[Spring] MyBatis ์์ํ๊ธฐ
๋ง์ด๋ฐํฐ์ค๋ iBatis๋ ๋
์์ ํ์ ์ผ๋ก,
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ณด์กฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
๋์ธ๋ JPA์ธ๋ฏ ํ์ง๋ง, ์ฌ์ ํ ์ด๊ฒ๋ ๋ง์ด ์ฐ์ด๋ ์ค์ด๋ค.
๋จผ์ ์ธํ
๋ถํฐ ํ์.
๋ฉ์ด๋ธ์์ pom.xml์ ์ด์ด์, ๋์ถฉ ์ด๋ ๊ฒ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.

๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปค๋ฅํฐ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฑ๋กํด์ค๋ค. ๋ jar์ ๋ฐ์์ ์ง์ด๋ฃ์๋ค.
๋ง์ด๋ฐํฐ์ค๊ฐ ์ค์ ๋ ์ํ์์ ๋๋ผ์ด๋ฒ๊ฐ ํ๋๋ ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ ์์ฒด๊ฐ ์๋๋ค.
๊ทธ๋ฆฌ๊ณ ์คํ๋ง๋ถํธ ์ค์ ํ์ผ์ ์ด์ด์, ์๋์ ๊ฐ์ด ์ฐ๋์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ค.
mysql์ test ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ๋ค๋ ๋ป์ด๊ณ , ์ฌ์ฉ์๋ช
๊ณผ ํจ์ค์๋, ๊ทธ๋ฆฌ๊ณ ๋๋ผ์ด๋ฒ ํด๋์ค๋ช
์ด๋ค.
๊ทธ๋ฌ๊ณ ๋์ ์ค์ ํ์ผ์ ํ๋ ๋ง๋ ๋ค.
๋ง์ด๋ฐํฐ์ค๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํด์ SqlSession์ด๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ทธ๊ฑธ ์ค์ ํด์ฃผ๋ ๊ฑฐ๋ค.
package com.example.mybatis.configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.mybatis.repository")
public class MyBatisConfiguration
{
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory)
{
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
{
var sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
//์ฟผ๋ฆฌ๊ฐ ์ ์๋ xml ํ์ผ๋ค์ ์์น ์ง์
sqlSessionFactoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml")
);
return sqlSessionFactoryBean.getObject();
}
}

๊ทธ๋ฆฌ๊ณ ํ ์คํธํ ํ ์ด๋ธ์ ์ด๋ ๊ฒ ์ ์๊ฐ ๋์ด์๋ค.

๋ด์ฉ๋ฌผ์ ์ด๋ ๊ณ .

์ด์ ์ ๊ฑธ ์๋ฐ ๊ฐ์ฒด๋ก ๋งค์นญํด๋ณด์.
๊ฐ ํ(Row) ๊ฐ์ ํํํ ํ์
์ด๋ค.
๊ฐ ํ๋์ ์ด๋ฆ์ ์ค์ ํ
์ด๋ธ์ ์ปฌ๋ผ๋ช
๊ณผ ๋ง์ถฐ์ค์ผ ํ๋ค.
๋ง์ถ์ง ์์๋ ์๋ฌ๋ ์ ๋์ง๋ง, ๊ฐ์ ๋ชป ๊ฐ์ ธ์จ๋ค.
์ด๋ฒ์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ ์ํ๋ค.
@Mapper๋ง ๋ถ์ด๋ฉด ๋ง์ด๋ฐํฐ์ค xml๊ณผ ๋งคํ๋๋ ๋น์ฆ ํด๋์ค๊ฐ ๋๋ค.
Name ๊ฐ๋ค์ ์ ๋ถ ๊ฒ์ํด์ ๊ฐ์ ธ์ฌ selectAllName์ ์ ์ธํ๋ค.
๋ฐํํ์
์ ๋น์ฐํ ๋ฆฌ์คํธ์ ๋ด์๋๊ณ .
๊ตฌํ์ ํ์ง ์์๋ ๋๋ค. ๋ง์ด๋ฐํฐ์ค๊ฐ ์์์ ํด์ค๋ค.
์ ๊ทธ๋ผ xml์ ํตํด ๋ด๋ถ ์ฟผ๋ฆฌ๋ฅผ ์ ์ํด๋ณด์.
์๊น Configuration์์ ์ง์ ํ ์์น์๋ค๊ฐ, xml ํ์ผ์ ๋์ถฉ ์ถ๊ฐํ๋ค.

๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์จ๋ฃ๋๋ค.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"
>
<mapper namespace="com.example.mybatis.repository.NameMapper">
<select id="selectAllName" resultType="com.example.mybatis.model.Name">
SELECT * FROM NameTable
</select>
</mapper>
mapper์ ๋ค์์คํ์ด์ค์ ๋ฐฉ๊ธ ๋ง๋ , ๋งคํผ ์ธํฐํ์ด์ค๋ฅผ ์ง์ด๋ฃ์๋ค.
๊ทธ๋ฆฌ๊ณ select ํ๊ทธ์ id๋ ๋งคํผ ๋ด์ ์ ์ํ๋ ๋ฉ์๋์ ์ด๋ฆ์ ๋ง์ถฐ์ฃผ๊ณ , ๋ฐํ๋ ํ์
๋ ์ง์ ํด์ค๋ค.
๋ด๋ถ์๋ ์คํ๋ ์ฟผ๋ฆฌ๋ฅผ ์จ์ค๋ค.
๊ทธ๋ผ ์ด์ ๋ค ์งฐ๋ค. ๋๋ ค๋ณด์.
์๊น ๋ง๋ ๋งคํผ ๋น์ฆ๋ฅผ ๊ฐ์ ธ์์ ๊ฒ์์ ์๋ํ๋ค.

์ ๋์๊ฐ๋ค.