추가해야할것!
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="수정">
<a href="list">목록보기</a>
<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리프레쉬
'백 > spring boot' 카테고리의 다른 글
왜 SELECT를 할때도 @Transactional을 붙이는게 좋은가? (0) | 2023.08.01 |
---|---|
스프링 부트 프로젝트 생성하기(gradle) (0) | 2023.07.12 |
스프링 부트 프로젝트 생성하기(Maven) (0) | 2023.07.12 |
스프링부트 3. 스프링 부트 동작원리 (0) | 2023.06.19 |
스프링 부트 2. JPA (0) | 2023.06.19 |