MyBatis์ ๋ํ์ฌ
MyBatis: ๊ฐ๋ฐ์๋ฅผ ์ํ ์ ์ฐํ SQL ๋งคํผ ํ๋ ์์ํฌ์ ๋ํ์ฌ ์์๋ณธ ๊ธ์ ๋๋ค.
์๋ ํ์ธ์!
Java ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ํ์์ ์ธ ์์ ์ ๋๋ค.
MyBatis๋ ์ด ๊ณผ์ ์ ๊ฐ์ํํ๊ณ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋ SQL ๋งคํผ ํ๋ ์์ํฌ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์คํ๊ณผ ๊ฐ์ฒด ๋งคํ์ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
์ด๋ฒ ๊ธ์์๋ MyBatis์ ํน์ง, ์ฅ๋จ์ , ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
MyBatis๋?
MyBatis๋ Java ๋ฐ SQL ๊ธฐ๋ฐ์ ํผ์์คํด์ค ํ๋ ์์ํฌ๋ก, ๊ฐ๋ฐ์๊ฐ SQL, ์ ์ฅ ํ๋ก์์ , ๊ทธ๋ฆฌ๊ณ ๊ณ ์ ํ ๋งคํ ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
ํนํ MyBatis๋ ORM(Object-Relational Mapping) ๋๊ตฌ์ธ Hibernate์๋ ๋ค๋ฅด๊ฒ, SQL์ ์ง์ ์์ฑํ์ฌ ์ธ๋ฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์์ด ๊ฐ๋ฅํฉ๋๋ค.
MyBatis์ ์ฃผ์ ํน์ง
SQL ์ค์ฌ์ ๋ฐ์ดํฐ ๋งคํ
- ๊ฐ๋ฐ์๊ฐ SQL์ ์ง์ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ ์ดํฉ๋๋ค.
- XML ๋๋ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด SQL ๋ฌธ์ฅ์ ์ ์ํ ์ ์์ต๋๋ค.
์ ์ฐํ ๋งคํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ Java ๊ฐ์ฒด ๊ฐ์ ๋งคํ์ ๊ฐ๋จํ ์ค์ ํ ์ ์์ต๋๋ค.
- ๋ณต์กํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ์์ฝ๊ฒ ๊ฐ์ฒดํํฉ๋๋ค.
๊ฐ๋ ฅํ ์ปค์คํฐ๋ง์ด์ง
- MyBatis๋ SQL์ ์ง์ ์ ์ดํ๋ฏ๋ก ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ๊ณ ์ฑ๋ฅ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค.
- ๋ค์ํ ์บ์ฑ ์ ๋ต๊ณผ ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๊ฐ๋จํ ์ค์
- MyBatis๋ ์ค์ ํ์ผ(XML)๊ณผ ์ต์ํ์ Java ์ฝ๋๋ง์ผ๋ก ์๋ํฉ๋๋ค.
- ๋ณ๋์ ์คํค๋ง ์์ฑ์ด๋ ORM์ ์์กดํ์ง ์์ต๋๋ค.
MyBatis์ ์ฅ๋จ์
์ฅ์
- SQL ์ ์ด: ๊ฐ๋ฐ์๊ฐ SQL ๋ฌธ์ ์ง์ ์์ฑํ์ฌ ๋์ ์์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ด ๊ฐ๋ฅ.
- ์ ์ฐ์ฑ: ORM ๋๊ตฌ๊ฐ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์ด ๋ณต์กํ ์ฟผ๋ฆฌ์ ๊ด๊ณ๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์์.
- ๋น ๋ฅธ ํ์ต ๊ณก์ : SQL์ ์ต์ํ ๊ฐ๋ฐ์๋ ๋น ๋ฅด๊ฒ MyBatis๋ฅผ ์ต๋ํ ์ ์์.
- XML ์ง์: XML ํ์ผ์ ํตํด ๋ช ํํ๊ณ ์ ์ธ์ ์ธ ๋ฐฉ์์ผ๋ก ๋งคํ ์ค์ ๊ฐ๋ฅ.
๋จ์
- SQL ์์ฑ ๋ถ๋ด: SQL์ ์ง์ ์์ฑํด์ผ ํ๋ฏ๋ก, ์ฝ๋ ์์ด ๋ง์์ง ์ ์์.
- ์ ์ง๋ณด์ ์ด๋ ค์: ์ฟผ๋ฆฌ๊ฐ ๋ง์์ง์๋ก ์ ์ง๋ณด์๊ฐ ๋ณต์กํด์ง ์ ์์.
- ๋นํ์คํ: ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กด์ ์ธ SQL ๋ฌธ์ฅ์ ์์ฑํ ๊ฐ๋ฅ์ฑ์ด ๋์.
MyBatis ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
1. ์ค์ ํ์ผ ๊ตฌ์ฑ
MyBatis๋ mybatis-config.xml
ํ์ผ์ ํตํด ์ค์ ๋ฉ๋๋ค.
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mydb" />
<property name="username" value="root" />
<property name="password" value="password" />
</dataSource>
</environment>
</environments>
</configuration>
2. ๋งคํ ํ์ผ ๊ตฌ์ฑ
mapper.xml
ํ์ผ์์ SQL ๋ฌธ๊ณผ ๊ฐ์ฒด ๋งคํ์ ์ ์ํฉ๋๋ค.
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
3. DAO ์ธํฐํ์ด์ค ์์ฑ
๋งคํผ ํ์ผ๊ณผ ์ฐ๊ฒฐ๋๋ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
package com.example.mapper;
import com.example.model.User;
public interface UserMapper {
User getUserById(int id);
}
4. MyBatis๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์กฐํ
Java ์ฝ๋์์ MyBatis ์ธ์ ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํฉ๋๋ค.
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
public class MyBatisExample {
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
System.out.println("User Name: " + user.getName());
}
}
}
MyBatis๋ฅผ ์ฌ์ฉํ ๋ ๊ณ ๋ คํด์ผ ํ ์
SQL ์ฌ์ฌ์ฉ
- XML ๋งคํผ์์
<sql>
ํ๊ทธ๋ฅผ ํ์ฉํด ๊ณตํต SQL ๊ตฌ๋ฌธ์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
- XML ๋งคํผ์์
ํธ๋์ญ์ ๊ด๋ฆฌ
- MyBatis ์์ฒด์ ์ผ๋ก ํธ๋์ญ์ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ์ง๋ง, Spring๊ณผ ํตํฉํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ ์ผ๋ฐ์ ์ ๋๋ค.
์บ์ฑ ํ์ฉ
- MyBatis๋ 1์ฐจ, 2์ฐจ ์บ์ฑ์ ์ ๊ณตํ๋ฏ๋ก, ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ ์ ํ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๊ฒฐ๋ก
MyBatis๋ SQL ์ค์ฌ์ ๋ฐ์ดํฐ ๋งคํ์ ์ ํธํ๋ ๊ฐ๋ฐ์๋ค์๊ฒ ์ ํฉํ ํ๋ ์์ํฌ๋ก, ๊ฐ๋จํ ์ค์ ๊ณผ ๊ฐ๋ ฅํ ์ปค์คํฐ๋ง์ด์ง ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
SQL์ ์ง์ ์์ฑํจ์ผ๋ก์จ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๋ ์ธ๋ฐํ ์ ์ดํ ์ ์์ผ๋ฉฐ, ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃฐ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
ํ์ง๋ง, SQL ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ธ ์ ์์ผ๋ฏ๋ก ์ฝ๋ ํ์ง๊ณผ ์ ์ง๋ณด์๋ฅผ ๊ณ ๋ คํ ์ค๊ณ๊ฐ ํ์ํฉ๋๋ค.
MyBatis์ ์ฅ์ ์ ๊ทน๋ํํ๋ ค๋ฉด Spring๊ณผ ํตํฉํ์ฌ ์ฌ์ฉํ๊ฑฐ๋ ์ ์ ํ ๋งคํ ์ ๋ต์ ์๋ฆฝํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
MyBatis๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํด ๋ณด์ธ์! ๐