공부/[Project] J2P

[J2P] MySQL + MyBatis 연동

맴썰 2022. 3. 8. 19:19

MyBatis에 관한 것은 다른 게시글로 다룰 예정이다.

 

Create table test(
	name varchar(20),
	age int
);

INSERT INTO TEST VALUES("Test", 99);

 

테스트를 위해서 임시 테이블을 만들고 임시 데이터를 집어넣었다.

 

import lombok.*;

@Data
public class MySQLTestVo {
	String name;
	int age;
}

Vo를 만들 때 lombok을 이용해서 getter, setter 생성 등의 작업들을 생략하였다.

자세한 내용은 다른 게시글에서 다룰 예정이다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.jdbc-url=jdbc:mysql://localhost:3306/Jim2Pack?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=J2P
spring.datasource.password=J2P

# mapper.xml
mybatis.type-aliases-package:com.Jim2Pack.main.model

# mapper.xml location
mybatis.mapper-locations: mappers/**/*.xml

application.properties에 jdbc 접속 정보와 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>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
        <setting name="callSettersOnNulls" value="true"/>
    </settings>
</configuration>

MyBatis configuration file이다. 나도 잘 몰라서 다시 공부하여 포스팅할 계획이다.

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Repository
@Mapper
public interface MySQLTestDAO {
	List<MySQLTestVo> getList();
}

VO객체를 담는 리스트를 리턴하는 함수를 가진 DAO 인터페이스를 구현하였다.

<?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.Jim2Pack.main.Test.MySQLTestDAO">
    <select id="getList" resultType="com.Jim2Pack.main.Test.MySQLTestVo">
        select name,age
        from test
    </select>
</mapper>

Mapper.xml file의 id와 메소드명이 동일해야 한다.

 

import java.util.List;

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

@Service
public class MySQLTestService {
	@Autowired
	MySQLTestDAO mtd;
	
	List<MySQLTestVo> getList() {
		return mtd.getList();
	}
}

Service class에서 dao에 객체를 주입하고 getlist 함수를 구현하였다.

 

import java.util.List;

import javax.servlet.http.HttpServletRequest;

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

@Controller

public class MySQLTestController {
	
	@Autowired
	MySQLTestService mts;
	
	@RequestMapping("test1")
	public ModelAndView goHome(HttpServletRequest request) { 
		ModelAndView mav = new ModelAndView(); 
		List<MySQLTestVo> mtv = mts.getList();
		mav.addObject("list", mtv); 
		mav.setViewName("MySQLTest"); 
		return mav; 
	}

}

Controller 클래스를 만들고 service에 객체를 주입하여 얻은 리스트를 modelAndView 객체에 넣었다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Title</title>
</head>
<body>
	${list}
</body>
</html>

controller로부터 받은 list를 띄우는 JSP 파일이다.

 

localhost:8088/test1에 접속한 결과이다. MySQL에 저장한 결과가 잘 출력되는 것을 확인 할 수 있다.