일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터베이스
- I'm fine thank you
- Inside Of Me
- 신입
- IT
- 말 더듬
- 오라클 아키텍처
- index
- DBMS 구성요소
- nginx
- 봄 사랑 벚꽃 말고
- 기타
- 인덱스
- 오라클
- DBMS
- 스위트라떼
- 핑거스타일
- oracle
- 악보
- 6학년 8반 1분단
- db
- 아이유
- 개발자
- 장범준
- 슬픔의 후에
- 러블리즈
- 레이디스코드
- SQL 처리
- 천공의 시간
- 니가 참 좋아
취미로 음악을 하는 개발자
[Spring Boot] MyBatis 파라미터 사용 본문
파라미터 사용방법
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="입력"> <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 |