취미로 음악을 하는 개발자

[Spring Boot] MyBatis 파라미터 사용 본문

공대인/Spring[Boot]

[Spring Boot] MyBatis 파라미터 사용

영월특별시 2019. 8. 14. 16:45
728x90

파라미터 사용방법


1) param1, param2

<select>

select * from 테이블명 where 컬럼=#{param1} and 컬럼=#{param2}

</select>


2) 0부터 시작하는 인덱스

<select>

select * from 테이블명 where 컬럼=#{0} and 컬럼=#{1}

</select>


3) 파라미터명을 그대로 사용하기 위해 @Param 어노테이션 사용

- 호출을 가장 먼저 받는 interface 추상메소드 정의 시

public void 함수명(@Param("파라미터명") String 파라미터명, ...)


- Mapper 파일에서

select * from 테이블명 where 필드명=#{파라미터명} 와 같은 형식으로 사용


4) 파라미터로 해시맵 사용

- 호출을 가장 먼저 받는 interface 추상메소드 정의 시

public int writeDao(Map<String, String> 파라미터명);


- Controller 파일에서

Map<String, String> map = new HashMap<String, String>();

map.put("item1", sName);

map.put("item2", sContent);


- Mapper 파일에서

insert into 테이블명 (컬럼1, 컬럼2, ...) values (#{item1}, #{item2}) 와 같은 형식으로 사용


* HashMap은 다음 포스트 확인



프로젝트 생성




코드 구현


* build.gradle과 application.properties는 이전 프로젝트에서 그대로 사용


1
2
3
4
5
6
7
8
9
10
11
package com.study.springboot.dto;
 
import lombok.Data;
 
@Data
public class SimpleBbsDto {
    private int id;
    private String writer;
    private String title;
    private String content;
}
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.study.springboot.dao;
 
import java.util.List;
 
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
 
import com.study.springboot.dto.SimpleBbsDto;
 
@Mapper
public interface ISimpleBbsDao {
    List<SimpleBbsDto> listDao();
    SimpleBbsDto viewDao(String id);
    Integer writeDao(String writer, String title, String content);
    Integer deleteDao(@Param("_id"String id);
}
cs


@Param을 사용하면 xml에서 이 인터페이스를 사용할 때 Param에 해당하는 값을 파라미터로 사용 가능.


* int 대신 Integer를 사용한 이유는 필자가 이 여기 있는 코드를 실행할 때 아래의 에러가 뜸.

" ... attempted to return null from a method with a primitive return type (int). "


그래서 int 대신 Integer를 사용하면 null이 나와도 매핑이 된다을 보고 사용한 것.


// SimpleBbsDao.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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.dao.ISimpleBbsDao">
    <select id="listDao" resultType="com.study.springboot.dto.SimpleBbsDto">
        select * from simple_bbs order by id desc
    </select>
    
    <select id="viewDao" resultType="com.study.springboot.dto.SimpleBbsDto">
        select * from simple_bbs where id = #{0}
    </select>
    
    <select id="writeDao">
        insert into simple_bbs (writer, title, content)
            values (#{param1}, #{param2}, #{param3})
    </select>
    
    <select id="deleteDao">
        delete from simple_bbs where id = #{_id}
    </select>
</mapper>
cs


listDao는 id 순으로 테이블 조회

viewDao는 인덱스가 0부터 조회 (이 코드에서는 딱히 의미없는 것 같다.)

writeDao는 테이블에 파라미터 값을 넣어 행을 추가

deleteDao는 파라미터 "_id"의 값과 일치하는 id 값을 찾아 행을 삭제


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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.study.springboot;
 
import javax.servlet.http.HttpServletRequest;
 
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 com.study.springboot.dao.ISimpleBbsDao;
 
@Controller
public class MyController {
    @Autowired
    ISimpleBbsDao dao;
    
    @RequestMapping("/")
    public String root() throws Exception {
        return "redirect:list";
    }
 
    @RequestMapping("/list")
    public String userlistPage(Model model) {
        model.addAttribute("list", dao.listDao());
        return "/list";
    }
    
    @RequestMapping("/view")
    public String view(HttpServletRequest request,Model model) {
        String sId = request.getParameter("id");
        model.addAttribute("dto", dao.viewDao(sId));
        return "/view";
    }
    
    @RequestMapping("/writeForm")
    public String writeForm() {
        return "/writeForm";
    }
    
    @RequestMapping("/write")
    public String write(HttpServletRequest request, Model model) {
        dao.writeDao(request.getParameter("writer"),
                request.getParameter("title"),
                request.getParameter("content")
                    );
        return "redirect:list";
    }
    
    @RequestMapping("/delete")
    public String delete(HttpServletRequest request, Model model) {
        dao.deleteDao(request.getParameter("id"));
        return "redirect:list";
    }
}
cs



// list.jsp

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
<%@ 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>
 
<table width="500" cellpadding="0" cellspacing="0" border="1">
    <tr>
        <td>번호</td>
        <td>작성자</td>
        <td>제목</td>
        <td>삭제</td>
    </tr>
    <c:forEach var="dto" items="${list}">
        <tr>
            <td>${dto.id }</td>
            <td>${dto.writer }</td>
            <td><a href="view?id=${dto.id }">${dto.title }</a></td>
            <td><a href="delete?id=${dto.id }">X</a></td>            
        </tr>
    </c:forEach>
</table>
 
<br>
<p><a href="writeForm">글작성</a></p>
 
</body>
</html>
cs


list에서는 DB에 있는 내용을 불러와서 표 형태로 보여준다. 

model에 list로 속성을 불러와서 변수 dto에 저장하고 dto의 속성들을 출력해준다.

id 부분은 auto_increment 속성을 추가했기 때문에 행을 추가할 때마다 값이 증가한다.




// writeForm.jsp

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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table width="500" cellpadding="0" cellspacing="0" border="1">
    <form action="write" method="post">
        <tr>
            <td>작성자</td>
            <td><input type="text" name="writer" size="100"></td>
        </tr>
        <tr>
            <td>제목 </td>
            <td><input type="text" name="title" size="100"></td>
        </tr>
        <tr>
            <td>내용</td>
            <td><input type="text" name="content" size="100"></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="입력">
                &nbsp;&nbsp; <a href="list">목록</a></td>
        </tr>
    </form>
</table>
<br>
</body>
</html>
cs



// view.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
내용보기 <br>
<hr>
작성자 : ${dto.writer }<br>
제목 : ${dto.title }<br>
내용 : ${dto.content } <br>
<hr>
 
<br><p>
<a href="list">목록보기</a>
</body>
</html>
cs



'공대인 > Spring[Boot]' 카테고리의 다른 글

[Spring Boot] logback  (0) 2019.08.16
[Spring Boot] MyBatis HashMap 사용  (2) 2019.08.16
[Spring Boot] MyBatis  (0) 2019.08.13
[Spring Framework] MyBatis란  (0) 2019.08.09
[Spring Boot] InitBinder, Valid  (0) 2019.08.05
Comments