공부/[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에 저장한 결과가 잘 출력되는 것을 확인 할 수 있다.