Java Bean 방식을 사용하여 Java에서 MyBatis의 전역설정을 수행 및 SQL 실행하기
。기존의 전역설정파일( mybatis-config.xml )을 작성하는 방식을 Java의 설정 클래스를 Java Bean으로서 생성하여 수행
▶ <Configuration> / <Environment> / <TransactionManager> / <DataSource> 등의 태그를 Java Bean으로 생성
Mapper 인터페이스 작성
。Mapper.xml파일의 SQL매핑태그와 바인딩할 추상메서드를 정의
。Mapper.xml 파일의 <mapper namespace="인터페이스명"> 등록 시 MyBatis에 의해 해당 Mapper 인터페이스를 자동으로 스캔하여 가져와서 등록
public interface TestMapperV2 {
Integer test();
}
Mapper.xml 파일 작성
。Mapper Interface의 추상메서드와 바인딩 되어 실제 실행될 SQL매핑태그를 작성
。<select>의 id="" 속성은 인터페이스 추상메서드 명과 동일하게 설정
▶ 설정 시 인터페이스 추상메서드와 SQL매핑태그는 서로 바인딩되어 연동되므로, 추상메서드 호출 시 SQL매핑태그에 정의된 SQL문이 실행
。반드시 Mapper 인터페이스와 미러링되는 resources 이하 디렉토리에서 Mapper 인터페이스와 동일한 파일명으로 등록해야한다.
ex ) src/main/java/mapper/TestMapperV2.Interface인 경우 src/main/resources/mapper/TestMapperV2.xml로 설정
。<mapper>의 namespace = "" 속성은 src/main/java 기준 절대경로로 입력
▶ 등록 시 MyBatis가 Mapper 인터페이스를 자동으로 스캔하여 식별
<?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="mapper.TestMapperV2">
<select id="test" resultType="int">
-- SQL 구문 입력
SELECT 1
</select>
</mapper>
Java 코드 작성
。<configuration> / <environment> / <transactionManager> / <dataSource> 등의 태그들을 Java Bean으로 생성
。DataSource, TransactionManager -> Environment -> Configuration 순서로 Java Bean 생성하여 Configuration 객체 생성 후 SqlSessionFactory 객체 생성 및 SqlSession 객체 활용
public class SessionFactory {
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3304/mybatis_shop";
private static final String USER = "root";
private static final String PASSWORD = "wjd747";
public static void main(String[] args) {
PooledDataSource pooledDataSource = new PooledDataSource();
pooledDataSource.setDriver(DRIVER);
pooledDataSource.setUrl(URL);
pooledDataSource.setUsername(USER);
pooledDataSource.setPassword(PASSWORD);
JdbcTransactionFactory jdbcTransactionFactory = new JdbcTransactionFactory();
Environment exp3 = new Environment(
"exp3",
jdbcTransactionFactory,
pooledDataSource
);
Configuration configuration = new Configuration(exp3);
configuration.addMappers("mapper");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(configuration);
try(SqlSession sqlSession = build.openSession()){
TestMapperV2 mapper = sqlSession.getMapper(TestMapperV2.class);
Integer result = mapper.test();
System.out.println("result = " + result);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}