[Spring Boot , gradle ] mybatis 연동 방법과 환경 설정

Mybatis란?

마이바티스는 아파치 스포트웨어 재단에서 만든 자바 퍼시스턴스 프레임워크이다.
마이바티스는 xml 서술자나 어노테이션을 사용해 저장 프로시저나 sql문으로 객체들을 연결시킨다.
특징으로는 기존의 ibatis보다 간결하고 유연한 설정방식을 제공한다.
 

build.gradle에  JDBC 라이브러리 추가

    implementation 'org.springframework.boot:spring-boot-starter-jdbc'

 
bulid.gradle 파일에 spring-boot-starter-jdbc 라이브러리와 db 종류에  따른  jdbc 드라이버도 추가해준다. 

- mssql

 runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc'

- mysql (spring boot 2.7.8 이후)

runtimeOnly 'com.mysql:mysql-connector-j'

- mysql (spring boot 2.7.8 이전)

runtimeOnly 'com.mysql:mysql-connector-java'

- oracle

runtimeOnly 'com.oracle.database.jdbc:ojdbc8'

 
db의 버전과 java의 버전에 따라 약간의 구문 차이점이 있으니 이점 참고하기 바란다.
 

mybatis 설정

mybatis.config-location=classpath:mybatis/sqlmap-config.xml
mybatis.mapper-locations= mybatis/map/*.xml

application.properties 파일에 mybatis 설정파일의 경로를 설정해주고 그 하위에 mapper 들을 만들어줄 map이라는 폴더를 만들어줬다.

mapper-locations = mybatis/map/*.xml 이라고 넣어주면 해당 경로에 있는 모든 이름의 xml 파일들이 자동으로 매핑이 될것이다. 해당경로는 임의의 경로이니 본인의 입맛에 맞게 바꿔줘도 무방하다.

<?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>
	<settings>
		<setting name="cacheEnabled" value="false" />
		<setting name="useGeneratedKeys" value="true" />
		<setting name="defaultExecutorType" value="REUSE" />
		<setting name="jdbcTypeForNull" value="NULL" />
	</settings>
</configuration>

설정한 경로의 위치에 맞게 설정파일인  sqlmap-config.xml을 생성해준다.
 

DB 접속정보 추가

 
연동 테스트를 하기 위해 mariadb를 로컬에 설치하고 total_board라는 테이블을 만들었다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:[포트]/[디비명]?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=id
spring.datasource.password=password

application.properties 파일에 내가 연결하고자 하는 db 드라이버 정보와 접속정보를 기입한다.
혹시 연결하고자 하는 db가 mssql이나 oracle이라면 아래의 접속정보를 참고하도록 하자.
 

#mssql
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://localhost:[포트];databaseName=[디비명]
spring.datasource.username=id
spring.datasource.password=password

#oracle
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:[포트]/[디비명]
spring.datasource.username=id
spring.datasource.password=password

 

실전 테스트

1. Mapper.java

@Mapper
public interface TotalMapper {
    List<ResultMap> list(ParamMap paramMap);
}

2. mapper.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.boot.totalboard.TotalMapper">
	<select id="list"  parameterType="ParamMap" resultType="ResultMap">
	 	SELECT * FROM TOTAL_BOARD
	</select>
</mapper>


내가 설정한 경로(mybatis/map )에 mapper.xml 파일을 만들어준다.

3. Service.java

@Service
public class TotalBoardService {

	@Autowired
	TotalMapper totalMapper;

	public List<ResultMap> getTotalList(ParamMap paramMap) {
		List<ResultMap> list =  totalMapper.list(paramMap);
		return list;
	}
}

4. Contoroller.java

@Controller
public class DbConnectController {

    @Autowired
    private TotalBoardService totalBoardService;

    @RequestMapping(value = "/totalList")
    public String totalList(Model model) {
        System.out.println("home controller totalList");
        ParamMap paramMap = new ParamMap();
        model.addAttribute("list", totalBoardService.getTotalList(paramMap));
        return "totalboard/index";
    }
}

 다 준비됐으니 bootRun!!

콘솔창에서 쿼리 확인하기

log4j를 통해 콘솔창에서 쿼리를 직접 확인 할수 있다.

implementation group: 'org.bgee.log4jdbc-log4j2', name:'log4jdbc-log4j2-jdbc4.1', version: '1.16'

build.gradle에 log4j 라이브러리 추가해주고

spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/[디비명]?serverTimezone=UTC&characterEncoding=UTF-8

application.properties에 driver-class-name과 url을 재설정해주면 콘솔창에는 내가 기입한 쿼리의 결과가 가지런하게 보이게 된다.


 
개발과 운영 프로필에 따라 db 접속정보 설정을 다르게 하고 싶은경우엔 아래의 블로그글을 참고하도록 하자.

 

[Spring Boot+Gradle + intelliJ+ logback] 개발 운영 프로필 분리 설정

현재 내가 세팅한 개발환경은 spring boot 2.7.14, java 11, gradle, intelliJ이다. build.gradle 설정plugins { id 'java' id 'war' id 'org.springframework.boot' version '2.7.14' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } grou

letsplaycoding.tistory.com