본문 바로가기
스프링부트+gradle+JSP+STS(Eclipse)

스프링부트 DB(Mariadb, Mybatis) 설정

by 크리스턍 2022. 4. 29.

설정 순서

1. build.gradle 에 Mariadb, Mybatis, log4jdbc 라이브러리 추가

   (log4jdbc는 쿼리 로그를 보기위한 것이므로 생략 가능)

2. application.properties 에 DB 접속 정보 추가

3. Mapper.xml, Mapper.java, Service.java, Controller.java 코드 작성

  MVC 구조를 봤을 때에는 Controller.java -> Service.java -> Mapper.java -> Mapper.xml 순이지만

  코딩은 Mapper.xml -> Mapper.java -> Service.java -> Controller.java 순으로 작성한다.

 

 

소스 구조 참고

 

 

 - build.gradle 파일에서 dependencies 안에 mariadb, mybatis, log4jdbc 라이브러리를 추가한다.

	// MYSQL
	implementation 'org.mariadb.jdbc:mariadb-java-client:3.0.4'
	
	// MyBatis
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'

	// log4jdbc	
	implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'

 

 - application.properties 에 DB 접속정보와 mybatis 설정을 추가한다.

spring.datasource.url=jdbc:log4jdbc:mariadb://아이피:포트/DB명?serverTimezone=UTC&characterEncoding=UTF-8&allowMultiQueries=true
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.username=아이디
spring.datasource.password=패스워드

mybatis.mapper-locations=mybatis/**/*.xml
mybatis.configuration.map-underscore-to-camel-case=true

 - mybatis.mapper-locations : mybatis 작성 xml의 경로를 지정해 준다.

   전체 경로는 src/main/resources/mybatis/**/*.xml  이다

   * (애스터리스크) 는 모든 문자열을 의미하는 것으로 동일한 폴더 구조에 어떤 문자도 허용한다는 뜻이다

ex) /mybatis/sample/sampleMapper.xml (가능)

     /mybatis/test/testMapper.xml (가능)

     /mybatis/test/test2/testMapper.xml (불가능)  - test 또는 test2 가 삭제되어야 허용

 

 

<?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.example.demo.sample.mapper.SampleMapper">
	<select id="selectTest" resultType="string">
		select 'test'
	</select>
</mapper>

 - SampleMapper.xml 작성

 - mapper-namespace : mybatis 의 SQL문과 Mapper.java 를 연결해주기 위한 방법으로 namespace 에는 연결할 Mapper.java 의 클래스명을 기입해 준다.

 - <select> 태그 : 실행할 SQL을 작성하는 영역으로 DML(데이터조작어)에 따라 태그가 달라진다.

                        SELECT 문 : <select></select>

                        UPDATE 문 : <update></update>

                        INSERT 문 : <insert></insert>

                        DELETE 문 : <delete></delete>

 - 테스트로 'test' 문자를 조회하는 SQL 작성

 

package com.example.demo.sample.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface SampleMapper {
	// 샘플 조회
	String selectTest();
}

 - SampleMapper.java 작성

 - SampleMapper.xml 호출할 때 사용

   SampleMapper.xml 에서 namespace 에 선언해 준 Mapper.java 를 호출한다

 

 

package com.example.demo.sample.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.sample.mapper.SampleMapper;

@Service
public class SampleService {
	
	@Autowired
	private SampleMapper sampleMapper;
	
	public String selectTest() {
		return sampleMapper.selectTest();
	}

}

 - SampleService.java 작성

 

package com.example.demo.sample.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.example.demo.sample.service.SampleService;

@Controller
public class SampleController {
	
	@Autowired
	private SampleService sampleService;
	
	@RequestMapping(value="/index", method = {RequestMethod.POST, RequestMethod.GET})
	public String index() {
		System.out.println("인덱스 페이지 호출");
		String test = sampleService.selectTest();
		System.out.println("조회 테스트 : "+test);
		return "index";
	}

}

 - SampleController.java 작성

 

 - 서버 재시작 후 http://localhost:8080/index 호출

 - 콘솔창에 호출한 값이 찍히면 정상

 

 

댓글