Java mybatis MariaDB 연결 - Java mybatis MariaDB yeongyeol

Team404

Web/Spring

Spring Boot MariaDB + Mybatis 연동하기

heeman 2020. 4. 7. 15:17

Mybatis?

마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다.

쉽게 이야기하자면 대표적으로 기능으로는 쿼리 템플릿을 작성하여 파라미터 자동매핑, if, case, foreach 등을 이용해서 dynamicQuery 작성, 쿼리 결과에 대한 매핑을 진행해준다. 쿼리기반으로 작성된 프로젝트에서는 꼭 사용해야할 프레임워크라고 볼 수 있다.

Maybatis Spring Starter를 이용해서 빠르게 연동하기

Dependency

Maven

<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>2.6.0</version> </dependency>

Gradle

dependencies { compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.1") compile("org.mariadb.jdbc:mariadb-java-client:2.6.0") }

Datasource

application.properties

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.datasource.url=jdbc:mariadb://127.0.0.1:3307/database spring.datasource.username=root spring.datasource.password=root mybatis.mapper-locations: mapper/*.xml

샘플 프로젝트상 mariadb로 진행되었으며 JDBC LIST를 참고하셔서 각자 본인에게 맞는 DB로 연결하시면 됩니다.

mybatis.mapper-locations은 resource 폴더 내 sql template xml이 위치한 경로를 작성해주시면 됩니다.

resources/mapper/user.xml

Sql Template 작성

user.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "//mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.sample.UserMapper"> <select id="selectUsers" resultType="hashMap"> select * from user </select> </mapper>

Mapper 방식 사용

UserMapper.class

mapper의 메소드명과 user.xml의 쿼리문 id를 일치시키는것이 중요합니다.

package com.example.demo.sample; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import java.util.HashMap; import java.util.List; @Mapper @Repository public interface UserMapper { List<HashMap<String, Object>> selectUsers(); }

DAO 방식 사용

UserDao.class

mapper의 xml상 데이터와 자동으로 매핑이 되며 dao 방식으로 사용 할 경우 sqlsession 객채를 통해서 user.xml의 쿼리문을 실행합니다.

selectList상 파라미터는 namesapce.queryId 입니다.

package com.example.demo.sample; import org.apache.ibatis.session.SqlSession; import org.springframework.stereotype.Repository; import java.util.HashMap; import java.util.List; @Repository public class UserDao { private SqlSession sqlSession; public UserDao(SqlSession sqlSession){ this.sqlSession = sqlSession; } public List<HashMap<String, Object>> getUsers() { return sqlSession.selectList("com.example.demo.sample.UserMapper.selectUsers"); } }

Service

UserService.class

이제 xml을 통해서 작성된 쿼리문을 실행하는 방법입니다. 편의상 service내에 mapper와 dao 방식 모두 구현했습니다.

package com.example.demo.sample; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; @Service public class UserService { private UserMapper userMapper; private UserDao userDao; public UserService(UserMapper userMapper, UserDao userDao){ this.userMapper = userMapper; this.userDao = userDao; } public List<HashMap<String, Object>> getUsers() { return userMapper.selectUsers(); } public List<HashMap<String, Object>> getUsersWithDao() { return userDao.getUsers(); } }

Controller

DemoController.class

API를 통해서 실제로 쿼리조회가 되는지 확인합니다.

package com.example.demo; import com.example.demo.sample.UserService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.List; @RestController public class DemoController { private UserService userService; public DemoController(UserService userService){ this.userService = userService; } @GetMapping("/users") public List<HashMap<String, Object>> getUsers() { return userService.getUsers(); } @GetMapping("/usersDao") public List<HashMap<String, Object>> getUsersDao() { return userService.getUsersWithDao(); } }

Mybatis를 통해서 쿼리를 실행하는 방법은 sqlsession을 직접 이용하는 dao방식과 Mapper 방식이 있습니다.

Mapper방식이 Dao방식대비 가지고 있는 장점은 다음과 같습니다.

  - 문자열에 의존하지 않는다. (애플리케이션을 좀 더 안전하게 만든다)

  - 개발자가 IDE를 사용할 때 매핑된 SQL 구문을 사용할때의 수고를 덜어 준다.

  - 리턴타입에 대해 타입 캐스팅을 하지 않아도 된다.

두가지 방식의 차이점을 자세히 보시려면 mybatis 사이트에서 '매핑된 SQL 구문 살펴보기' 섹션을 참고해보시길 바랍니다.

Sample 소스

//github.com/heemankim/spring-boot-mybatis-sample

heemankim/spring-boot-mybatis-sample

springboot mybatis 연결 샘플입니다. Contribute to heemankim/spring-boot-mybatis-sample development by creating an account on GitHub.

github.com

Toplist

최신 우편물

태그