-
[Springboot] Mybatis를 연동해보자.Dev/Spring Java 2019. 7. 27. 17:03
다른 Freamework를 많이 돌아보고 와도 Spring 만큼 설정이 빡쌘 Framework가 또 없는 것 같다.
myBatis 설정은 이 글로 종결 지어보자.
개발 환경
IntelliJ + Spring boot 2.x.x 기준으로 작성되었다 .
1. Maven, Gradle 의존설정하기
필요한 라이브러리는
기본적인 Spring Boot 설정이 되어있다 가정하에
* myBatis-spring-boot-staerter
* mariadb-java-client
* mysql-connector-java
이렇게 3가지 이다.
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.13' compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '2.1.0' compile group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.4.1'
Gradle로 작성되었으며 , 필요에 따라 Maven Repository에서 찾아 쓰도록 하자.
2. Database connection 정보 입력해주기.
application.properties에 Database Connection 정보를 입력해주자.
이 데이터는 Spring IoC Container에서 차후 만들 SqlsessionFactory에 자동으로 파라미터에 넣어 줄 이다.
application.properties 일부.
## maria DB spring.datasource.url=jdbc:mariadb://localhost:3306/test spring.datasource.username=아이디 spring.datasource.password=패스워드 spring.datasource.driverClassName=org.mariadb.jdbc.Driver ## mySql spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=아이디 spring.datasource.password=패스워드 spring.datasource.driverClassName=com.mysql.jdbc.Driver
3. SqlsessionFactory Configuration 만들어주기.
@Configuration public class MyBatisConfig { @Bean public SqlSessionFactory sqlSessionFactory(DataSource datasource) throws Exception { SqlSessionFactoryBean sqlsessionFactory = new SqlSessionFactoryBean(); sqlsessionFactory.setDataSource(datasource); sqlsessionFactory.setMapperLocations( new PathMatchingResourcePatternResolver() .getResources("classpath:/mappers/*.xml")); return sqlsessionFactory.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory){ return new SqlSessionTemplate(sqlSessionFactory); } }
SqlSesseionFactory에 Inejection되는 데이터는 [스탭 2]에서 입력한 spring.dataSource 가 들어온다.
4. myBatis-config.xml 만들기
myBatis 파일은 만들어도 되고, 만들지 않아도 된다.
서로 장단점이 있는데,
myBatis-config.xml을 만들고 그쪽에 클래스 타입이나 Mapper를 정의할 수 있다.
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <package name="com.kuh.test.domain"/> </typeAliases> <mappers> <mapper resource="mapper/testMapper.xml"/> </mappers> </configuration>
이렇게하면 타입을 미리 선언할수 있다는 장점이 있고, Mybatis 구 버전에선 hashMap도 선언해야 사용이 가능했지만 MyBatis 버전이 올라오면서 java 내장 자료구조는 기본적으로 제공하도록 업데이트 되었다. 위 방법의 단점은 mapper가 추가될때마다 mappers에 추가를 해줘야 한다는 불편함이 있다. config.xml 을 만들고 싶다면 resources/mybatis_config.xml로 만들어주자. 그후 추가되는 mapper는 설정 파일 내에 있는 mappers에 등록해 주자.
두번째 방법으로는 myBatis-config.xml를 만들지 않고 바로 mapper를 만드는 방법이다.
이 방법의 경우 클래스 타입으로 리턴받고 싶은경우 해당 mapper위에서 타입을 정의 해줘야한다는 불편함이 있고, 장점으로는 mapper가 추가 되더라도 spring에서 바로 읽어들인다는 장점이 있다. mapper를 만들고 싶다면 resources/mappers/mybatis_config.xml에 만들어주자. 아래는 mapper 기본 탬플릿 이다 .,
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd"> <mapper namespace="myBatis_connection_test"> <select id="list" resultType="hashmap"> SELECT * FROM test_table </select> </mapper>
Config.xml을 만들 경우 위 과정을 순서대로 하면되고 만들지 않을거면 config.xml 을 만드는 과정만 생략해도 정상 동작한다.
5. 정상동작하는지 확인해보자.