취미로 음악을 하는 개발자

[Spring Boot] MyBatis 본문

공대인/Spring[Boot]

[Spring Boot] MyBatis

영월특별시 2019. 8. 13. 17:08
728x90

프로젝트 생성




코드 구현


// build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
plugins {
    id 'org.springframework.boot' version '2.1.7.RELEASE'
    id 'java'
    id 'war'
}
 
apply plugin: 'io.spring.dependency-management'
 
group = 'com.study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
 
configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}
 
ext['tomcat.version'= '8.5.38'
 
repositories {
    mavenCentral()
}
 
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation("mysql:mysql-connector-java")
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'javax.servlet:jstl'
    implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
}
cs



// application.properties

1
2
3
4
5
6
7
8
9
10
11
server.port = 8081
# JSP
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
 
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/DB이름
spring.datasource.username=유저이름
spring.datasource.password=비밀번호
 
mybatis.mapper-locations=classpath:mybatis/mapper/**/**.xml
cs


mysql이나 oracle이나 자신의 DB에 맞게 설정을 맞춰주면 될 것 같다. (필자는 mysql을 사용)

물론 사용하는 DB에 따라 build.gradle에서 dependency도 바꿔줘야 함.

mybatis / mapper 폴더 아래의 모든 폴더의(**) 모든 xml(**.xml)을 사용한다고 지정



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.study.springboot;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
 
import com.study.springboot.jdbc.IMyUserDao;
 
@Controller
public class MyController {
    @Autowired
    private IMyUserDao userDao;
    
    @RequestMapping("/")
    public @ResponseBody String root() throws Exception {
        return "MyBatis 사용하기";
    }
 
    //@GetMapping("/user")
    @RequestMapping(value = "/user", method = RequestMethod.GET)
    public String userlistPage(Model model) {
        model.addAttribute("users", userDao.list());
        return "userlist";
    }
}
cs


처음 "/"에는 @ResponseBody에 의해 "MyBatis 사용하기"가 출력된 화면이 나오게 됨.

"/user"로 넘어가면 "users"라는 속성을 모델에 넣어주되 Mapper와 연결된 IMyUserDao 인터페이스의 메소드를 값으로 사용


1
2
3
4
5
6
7
8
9
10
package com.study.springboot.jdbc;
 
import java.util.List;
 
import org.apache.ibatis.annotations.Mapper;
 
@Mapper
public interface IMyUserDao {
    List<MyUserDTO> list();
}
cs


DB 내용이 담긴 MyUserDTO를 list() 메소드로 호출하는 것을 만듬


1
2
3
4
5
6
7
8
9
package com.study.springboot.jdbc;
 
import lombok.Data;
 
@Data
public class MyUserDTO {
    private int id;
    private String auth;
}
cs


lombok에 의한 설정.


// MyUserDao.xml

1
2
3
4
5
6
7
8
9
10
<?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.study.springboot.jdbc.IMyUserDao">
    <select id="list" resultType="com.study.springboot.jdbc.MyUserDTO">
        select * from user
    </select>
</mapper>
cs


IMyUserDao에 연결될 Mapper는 list함수가 실행될 때 MyUserDTO 타입으로 'select * from user' 쿼리문을 실행


// userlist.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    out.println("MyBatis : Hello World");
%>
<br>
<c:forEach var="dto" items="${users}">
    ${dto.id} / ${dto.auth} <br>
</c:forEach>
</body>
</html>
cs


이 페이지로 들어오면 모델에 지정한 속성중 "users"라는 속성을 사용하는데 그것은 dto라는 변수로 쓸 것이다.

그래서 그 dto의 id값과 auth값을 출력 IMyUserDao에서 List로 설정했기 때문에 각각의 값이 배열 형태로 나오게 됨


* MyBatis에 관한 글은 따로 올릴 것임



Comments