
MyBatis๋ Java ๊ธฐ๋ฐ์ SQL ๋งคํผ ํ๋ ์์ํฌ๋ก, SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ๊ณ XML ๋๋ ์ด๋ ธํ ์ด์ ์ ํตํด SQL ์ฟผ๋ฆฌ์ ๊ฐ์ฒด๋ฅผ ๋งคํํฉ๋๋ค. ์ด๋ ORM ํ๋ ์์ํฌ์ธ JPA์๋ ๋ค๋ฅด๊ฒ, SQL์ ๋ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
(1) ~ (3)์ ์ ํ๋ฆฌ์ผ์ด์
์์ํ ์ ์ํ๋๋ ํ๋ก์ธ์ค๋ค.
1. ์ ํ๋ฆฌ์ผ์ด์
์ด SqlSessionFactoryBuilder๋ฅผ ํตํด SqlSessionFactory๋ฅผ ๋น๋ํ๋๋ก ์์ฒญํ๋ค.
2. SqlSessionFactoryBuilder๋ SqlSessionFactory๋ฅผ ์์ฑํ๊ธฐ ์ํ Mybatis Config ํ์ผ์ ์ฝ๊ณ ,
3. SqlSessionFactoryBuilder๋ MyBatis Config ํ์ผ์ ๋ฐ๋ผ SqlSessionFactory๋ฅผ ์์ฑํ๋ค.
(4) ~ (10)์ ํด๋ผ์ด์ธํธ์ ๊ฐ ์์ฒญ์ ๋ํด ์ํ๋๋ ํ๋ก์ธ์ค๋ค.
4. ํด๋ผ์ด์ธํธ๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฒญ์ ๋ณด๋ธ๋ค.
5. ์ ํ๋ฆฌ์ผ์ด์
์ SqlSessionFactoryBuilder๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๋ SqlSessionFactory์์ SqlSession์ ๊ฐ์ ธ์ค๋๋ก ๋ช
๋ นํ๋ค.
6. SqlSessionFactory๋ SqlSession๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐํํ๋ค.
7. ์ ํ๋ฆฌ์ผ์ด์
์ด SqlSession์์ Mapper ์ธํฐํ์ด์ค์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๊ณ ,
8. ์ ํ๋ฆฌ์ผ์ด์
์ด Mapper ์ธํฐํ์ด์ค ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
9. Mapper ์ธํฐํ์ด์ค์ ๊ตฌํ ๊ฐ์ฒด๊ฐ SqlSession ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ SQL ์คํ์ ์์ฒญํ๋ค.
10. SqlSession์ Mapping ํ์ผ์์ ์คํํ SQL์ ๊ฐ์ ธ์ ์คํํ๋ค.
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUserById" resultType="com.example.dto.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
public interface UserMapper {
User selectUserById(int id);
}
<!-- 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>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
<!-- Maven dependency -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
mybatis-config.xml์ ํตํด MyBatis ์ค์ ์ ์ ์ํ๊ณ , SqlSessionFactory๋ฅผ ์์ฑํฉ๋๋ค.SqlSession ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUserById" resultType="com.example.dto.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
public interface UserMapper {
User selectUserById(int id);
}
<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>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(1);
System.out.println(user);
}
์ฐธ๊ณ ์ถ์ฒ