본문 바로가기

백/spring boot

스프링부트 - mybatis 사용하기

추가해야할것!

1.프로퍼티

#Server
server.port=8082
server.servlet.session.timeout=360000

#Spring MVC
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

#Database config
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=scott
spring.datasource.password=tiger
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver

#mybatis config
mybatis.config-location=classpath:mybatis-config.xml

 

2.의존성

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
    implementation 'javax.servlet:jstl:1.2'
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation files('libs/ojdbc6.jar')
}

3. libs 폴더 => ojdbc6.jar

4. 매핑

<?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>
  <mappers>
    <mapper resource="mybatis/mappers/member.xml"/>
  </mappers>
</configuration>

 


프로젝트생성

boot_board

프로퍼티

#server
server.port=8382
server.servlet.session.timeout=30

#Spring MVC
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

#Database config
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=scott
spring.datasource.password=tiger
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver

#mybatis config
mybatis.config-location=classpath:mybatis-config.xml

프로젝트 찍고 libs 폴더생성

톰캣에있는

이거 붙여넣읍시다

의존성주입

	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
	implementation 'javax.servlet:jstl:1.2'
	implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation files('libs/ojdbc6.jar')

저걸

롬복 디펜던시 위에 넣자

xml파일 추가

xml파일 생성하고 이름, 경로 저렇게 해줌

<?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>
	 <mappers>
	<!--  sql  파일(+경로) -->
	 	<mapper resource="mybatis/mappers/board.xml"/>
	 </mappers>
</configuration>

이제 저  경로에 맞게 패키지 만들고 board 만들어 넣어줌

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.boot.dao.IBDao">
   <select id="list" resultType="com.boot.dto.BDto">
      select bid, bname, btitle, bcontent, bdate, bhit from mvc_board
   </select>
</mapper>

dao.dto.service생성

dao

package com.boot.dao;

import java.util.ArrayList;

import org.apache.ibatis.annotations.Mapper;

import com.boot.dto.BDto;

//실행시 인터페이스에서 매퍼파일을 읽어 들이도록 지정
@Mapper
public interface IBDao {
    ArrayList<BDto> list();
//    void write(HashMap<String,String> param);
//    BDto contentView(HashMap<String,String> param);
//    void modify(HashMap<String,String> param);
//    void delete(HashMap<String,String> param);
//    int getTotalCount();
}

dto

package com.boot.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.sql.Timestamp;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class BDto {
    private int bid;
    private String bname;
    private String btitle;
    private String bcontent;
    private Timestamp bdate;
    private int bhit;


}

service(impl)

package com.boot.service;

import java.util.ArrayList;

import com.boot.dto.BDto;

public interface BService {
//    페이징 처리 없는 목록
    ArrayList<BDto> list();

}

package com.boot.service;

import java.util.ArrayList;

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

import com.boot.dao.IBDao;
import com.boot.dto.BDto;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class BServiceImpl implements BService{
    @Autowired
    private IBDao dao;

    @Override
    public ArrayList<BDto> list() {
        log.info("@# BServiceImpl");
        
        ArrayList<BDto> list = dao.list();
        
        return list;
    }
}

controller

package com.boot;

import java.util.ArrayList;

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.boot.dto.BDto;
import com.boot.service.BService;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class BController {
    @Autowired
    private BService service;

    @RequestMapping("/list")
    public String list(Model model) {
        log.info("@# list");
        ArrayList<BDto> list = service.list();
        model.addAttribute("list",list);

        return "list";
    }
    
}

보드 복사해와서 필요없는거 삭제

 

<%@ 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 charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table width="500" border="1">
		<tr>
			<td>번호</td>
			<td>이름</td>
			<td>제목</td>
			<td>날짜</td>
			<td>히트</td>
		</tr>
	<c:forEach items="${list}" var="dto">
		<tr>
			<td>${dto.bid}</td>
			<td>${dto.bname}</td>
			<td>
				<a href="content_view?bid=${dto.bid}">${dto.btitle}</a>
			</td>
			<td>${dto.bdate}</td>
			<td>${dto.bhit}</td>
		</tr>
	</c:forEach>
	<tr>
		<td colspan="5">
			<a href="write_view">글작성</a>
		</td>
	</tr>
	</table>

</body>
</html>

list.jsp

다했으면 refresh gradle 잊지말고

실행!

1번빼고 다 지워줌

XML에 쿼리 추가

  
    <insert id="write" parameterType="hashmap">
            INSERT INTO mvc_board (bid, bname, btitle, bcontent, bhit)
            VALUES (mvc_board_seq.NEXTVAL, #{bname},#{btitle},#{bcontent}, 0)
        </insert>

DAO write 주석풀어줌

service쪽도

package com.boot.service;

import java.util.ArrayList;
import java.util.HashMap;

import com.boot.dto.BDto;

public interface BService {
//    페이징 처리 없는 목록
    ArrayList<BDto> list();
    void write(HashMap<String,String> param);
//    BDto contentView(HashMap<String,String> param);
//    void modify(HashMap<String,String> param);
//    void delete(HashMap<String,String> param);
//    int getTotalCount();
}
package com.boot.service;

import java.util.ArrayList;
import java.util.HashMap;

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

import com.boot.dao.IBDao;
import com.boot.dto.BDto;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class BServiceImpl implements BService{
    @Autowired
    private IBDao dao;

    @Override
    public ArrayList<BDto> list() {
        log.info("@# BServiceImpl");
        
        ArrayList<BDto> list = dao.list();
        
        return list;
    }
    

    @Override
    public void write(HashMap<String, String> param) {
        log.info("@# BServiceImpl.write()");
        dao.write(param);
    }
//
//    @Override
//    public BDto contentView(HashMap<String, String> param) {
//        log.info("@# BServiceImpl.contentView() start");
//
//        IBDao dao = sqlSession.getMapper(IBDao.class);
////        model.addAttribute("content_view", dao.contentView(request.getParameter("bid")));
//        BDto dto = dao.contentView(param);
//
//        log.info("@# BServiceImpl.contentView() end");
//
//        return dto;
//    }
//
//    @Override
//    public void modify(HashMap<String, String> param) {
//        log.info("@# BServiceImpl.modify() start");
//
//        IBDao dao = sqlSession.getMapper(IBDao.class);
////        dao.modify(request.getParameter("bid")
////                ,request.getParameter("bname")
////                ,request.getParameter("btitle")
////                ,request.getParameter("bcontent"));
////
////        return "redirect:list";
//        dao.modify(param);
//        log.info("@# BServiceImpl.modify() end");
//
//    }
//
//    @Override
//    public void delete(HashMap<String, String> param) {
//        log.info("@# BServiceImpl.delete() start");
//
//        IBDao dao = sqlSession.getMapper(IBDao.class);
//        dao.delete(param);
//        log.info("@# BServiceImpl.delete() end");
//
//    }
//
//    @Override
//    public int getTotalCount() {
//        log.info("@# BServiceImpl.getTotalCount()");
//        IBDao dao = sqlSession.getMapper(IBDao.class);
//
//        return dao.getTotalCount();
//    }
}

controller

package com.boot;

import java.util.ArrayList;
import java.util.HashMap;

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.RequestParam;

import com.boot.dto.BDto;
import com.boot.service.BService;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class BController {
    @Autowired
    private BService service;

    @RequestMapping("/list")
    public String list(Model model) {
        log.info("@# list");
        ArrayList<BDto> list = service.list();
        model.addAttribute("list",list);

        return "list";
    }
    
    @RequestMapping("/write")
    public String write(@RequestParam HashMap<String, String> param) {
        log.info("@# write");
        service.write(param);
        return "redirect:list";
    }

    @RequestMapping("/write_view")
    public String write_view() {
        log.info("@# write_view");

        return "write_view";
    }

//    @RequestMapping("/content_view")
//    public String content_view(@RequestParam HashMap<String, String> param, Model model) {
//        log.info("@# content_view");
//        BDto dto = service.contentView(param);
//        model.addAttribute("content_view",dto);
////        content_view.jsp에서 pageMaker를 가지고 페이징 처리
//        model.addAttribute("pageMaker",param);
//        return "content_view";
//    }
//    @RequestMapping("/modify")
////    @ModelAttribute("cri") Criteria cri: Criteriara 객체를 cri로 받는다.
////    RedirectAttributes rttr : 쿼리스트링을 뒤에 추가
//    public String modify(@RequestParam HashMap<String, String> param, @ModelAttribute("cri") Criteria cri,
//                         RedirectAttributes rttr) {
//        log.info("@# modify");
//        service.modify(param);
////        페이지 이동시 뒤에 페이지 번호, 글 갯수 추가
//        rttr.addAttribute("pageNum",cri.getPageNum());
//        rttr.addAttribute("amount",cri.getAmount());
//        return "redirect:list";
//    }
//    @RequestMapping("/delete")
//    public String delete(@RequestParam HashMap<String, String> param,@ModelAttribute("cri") Criteria cri,
//                         RedirectAttributes rttr) {
//        log.info("@# delete");
//        service.delete(param);
//        rttr.addAttribute("pageNum",cri.getPageNum());
//        rttr.addAttribute("amount",cri.getAmount());
//        return "redirect:list";
//    }
    
}

글이 잘써저용~~`

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.boot.dao.IBDao">
   <select id="list" resultType="com.boot.dto.BDto">
      select bid, bname, btitle, bcontent, bdate, bhit from mvc_board
   </select>
   
    <insert id="write" parameterType="hashmap">
            INSERT INTO mvc_board (bid, bname, btitle, bcontent, bhit)
            VALUES (mvc_board_seq.NEXTVAL, #{bname},#{btitle},#{bcontent}, 0)
        </insert>
        
         <select id="contentView" parameterType="hashmap" resultType="com.boot.dto.BDto">
            select bid, bname, btitle, bcontent, bdate, bhit from mvc_board where bid=#{bid}
        </select>
        

<!--     <update id="modify" parameterType="hashmap"> -->
<!-- <!--            update mvc_board set bname = #{param2}, btitle = #{param3}, bcontent = #{param4} --> -->
<!-- <!--            where bid=#{param1}--> -->
<!--             update mvc_board set bname = #{bname}, btitle = #{btitle}, bcontent = #{bcontent} -->
<!--             where bid=#{bid} -->
<!--         </update> -->

<!--         <delete id="delete" parameterType="hashmap"> -->
<!-- <!--            delete mvc_board where bid=#{param1}--> -->
<!--             delete mvc_board where bid=#{bid} -->
<!--         </delete> -->

<!--         <select id="getTotalCount" resultType="int"> -->
<!--             select count(*) from mvc_board -->
<!--         </select> -->
</mapper>

content_view

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table width="500" border="1">
		<form method="post" action="modify">
			<input type="hidden" name="bid" value="${content_view.bid}">
			<tr>
				<td>번호</td>
				<td>${content_view.bid}</td>
			</tr>
			<tr>
				<td>히트</td>
				<td>${content_view.bhit}</td>
			</tr>
			<tr>
				<td>이름</td>
<%-- 				<td>${content_view.bname}</td> --%>
				<td>
					<input type="text" name="bname" value="${content_view.bname}">
				</td>
			</tr>
			<tr>
				<td>제목</td>
<%-- 				<td>${content_view.btitle}</td> --%>
				<td>
					<input type="text" name="btitle" value="${content_view.btitle}">
				</td>
			</tr>
			<tr>
				<td>내용</td>
<%-- 				<td>${content_view.bcontent}</td> --%>
				<td>
					<input type="text" name="bcontent" value="${content_view.bcontent}">
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value="수정">
					&nbsp;&nbsp;<a href="list">목록보기</a>
					&nbsp;&nbsp;<a href="delete?bid=${content_view.bid}">삭제</a>
				</td>
			</tr>
		</form>
	</table>
</body>
</html>

 


실습문제

디펜던시

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1'
	
	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
	implementation 'javax.servlet:jstl:1.2'
	implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation files('libs/ojdbc6.jar')
	
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.3.1'
}


프로퍼티

#server
server.port=8382
server.servlet.session.timeout=30

#Spring MVC
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

#Database config
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=scott
spring.datasource.password=tiger
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver

#mybatis config
mybatis.config-location=classpath:mybatis-config.xml

libs폴더 추가하고, ojdbc 넣고,

mybatis-config

<?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>
	 <mappers>
	<!--  sql  파일(+경로) -->
	 	<mapper resource="mybatis/mappers/item.xml"/>
	 </mappers>
</configuration>

webapp채로 복사, 컨트롤러단 통째로 복사후 패키지이름변경, 경로들 수정해주고 저장한다음 gradle리프레쉬