스프링부트(spring boot)와 데이터베이스를 연결하는 방법은 정말 여러가지인데, sql 자체를 그대로 활용해서 사용하고자 한다면 mybatis
만한 ORM 프레임워크가 없다고 생각한다. spring boot 프로젝트 생성시에 디펜던시는 아래 2개를 추가해주는데, 이 포스팅에서는 PostgreSQL
을 사용했지만, 본인이 사용하는 DB의 Driver 로 변경해서 받으면 된다.
- MyBatis Framework
- PostgreSQL Driver
postgresql JDBC 연결
로컬PC에 DB를 설치해야 할텐데, 직접 pc에 설치하는 것보다는 docker 이미지로 구동하는 걸 선호하는 편이다. 해당 방법은 여기를 클릭한다. 여기서는 postgreSQL DB와 연결할 예정이다. spring boot 에서 DB와 연결하고 싶다면, 아래와 같이 데이터소스 정보를 셋팅하면 된다.
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
위에서 보듯이 기본적으로 3가지를 셋팅하면 되는데, 가장 먼저 URL (Uniform Resource Locator)을 만들어 입력해야 한다. postgresql URL 관련 문서를 보면, 아래와 같이 URL 정보를 정의하면 된다.
jdbc:postgresql:database
jdbc:postgresql:/
jdbc:postgresql://host/database
jdbc:postgresql://host/
jdbc:postgresql://host:port/database
jdbc:postgresql://host:port/
여기서, 보통은 jdbc:postgresql://localhost:5432/mydb
와 같이 localhost
로 셋팅하면 되는데, 내경우 docker 이미지로 postgresql
을 실행하다보니, 동일 docker network
로 연결하고, docker 컨테이너 이름인 my-postgres
로 셋팅했다. 최종 셋팅한 설정은 아래 3개이다.
# application.properties
spring.datasource.url=jdbc:postgresql://my-postgres:5432/mydb
spring.datasource.username=postgres
spring.datasource.password=1111
mybatis 로 DB에 연결하기
JDBC 설정이 되었다면, 이제 mybatis 연결작업만 하면 된다. 아래와 같은 순서로 파일을 만들어가며 설정작업을 진행할 것이다.
mybatis 연결 작업 순서
1. src/main/resources/mybatis-config.xml
2. src/main/resources/mapper/MemberMapper.xml
3. src/main/java/com/creart/app01/domain/Member.java
4. src/main/java/com/creart/app01/mapper/MemberMapper.java
최종 파일 위치는 아래의 그림을 참고한다.
mybatis-config.xml 파일 생성하기
mybatis 를 spring boot 에 연결하여 사용하기 위해, xml 파일을 만들어 설정해야 한다. application.properties
파일과 동일한 위치에 mybatis-config.xml
파일을 만든다.
파일위치 : src/main/resources/mybatis-config.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>
<typeAliases>
<package name="com.creart.app01.domain"/>
</typeAliases>
<mappers>
<mapper resource="mapper/MemberMapper.xml"/>
</mappers>
</configuration>
그리고 application.properties
파일에 mybatis-config.xml
파일의 위치를 설정한다.
# mybatis 설정파일 위치설정.
mybatis.config-location=classpath:mybatis-config.xml
MemberMapper.xml 생성하기
MemberMapper.xml
파일은 실제 실행될 쿼리가 정의되어 있는 파일이다. 꼭 저이름으로 할 필요는 없고, 모델명Mapper.xml
형태로 보통 정의된다. namespace
는 자바 mapper 클래스를 정의하며, 해당 클래스는 자바환경에서 쉽게 해당 쿼리로 이어지게끔 다리역할을 하게 된다.
파일위치 : src/main/resources/mapper/MemberMapper.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.creart.app01.mapper.MemberMapper">
<select id="selectCityById" resultType="Member">
select id, email, name from user where id = #{id}
</select>
</mapper>
Member.java 생성하기.
읽고 싶은 테이블 레이아웃과 동일하게 필드 구성을 하고, getter
, setter
함수 및 toString()
함수를 오버라이딩 해서 재정의한다.
파일위치 : src/main/java/com/creart/app01/domain/Member.java
package com.creart.app01.domain;
public class Member {
private int id;
private String email;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Member{" +
"id=" + id +
", email='" + email + '\'' +
", name='" + name + '\'' +
'}';
}
}
MemberMapper.java 생성하기
xml 파일로도 mapper 가 있지만, 여기서는 java 인터페이스로 mapper 를 하나 더 생성한다. 역할은 보다시피, 자바환경에서 메소드로서 쿼리를 실행 시킬 수 있도록 한번 감싸는 역할을 한다. 중요한건, 메소드명을 xml 파일의 쿼리 id와 동일하게 셋팅해야 한다.
파일위치 : src/main/java/com/creart/app01/mapper/MemberMapper.java
package com.creart.app01.mapper;
import com.creart.app01.domain.Member;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MemberMapper {
Member selectCityById(int id);
}
CommandLineRunner를 이용한 쿼리 실행
spring boot 프로젝트를 만들면, main 메소드가 포함된 클래스가 하나 기본으로 생성되어 있다. 거기에다, CommandLineRunner
인터페이스를 이용해서, 간단하게 테이블 select 해서 로그를 찍어보기로 한다. MemberMapper 클래스를 @Autowired 해서 객체를 주입하고, 그 객체로 select 쿼리를 실행한다. 자세한 사용은 spring 웹사이트를 참고한다.
package com.creart.app01;
import com.creart.app01.mapper.MemberMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App01Application implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(App01Application.class, args);
}
@Autowired
private MemberMapper memberMapper;
@Override
public void run(String... args) throws Exception {
System.out.println(this.memberMapper.selectCityById(1));
}
}
서버를 실행하면, run
메소드가 실행되면서, select 결과를 로그상에서 볼 수 있다.
INFO 1273 --- [ restartedMain] com.creart.app01.App01Application : Started App01Application in 4.284 seconds (process running for 4.772)
INFO 1273 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
INFO 1273 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@47f303ae
INFO 1273 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
Member{id=1, email='user@gmail.com', name='user_name'}