2021. 3. 3. 18:23ㆍWeb_Back-end/Spring
- 스프링부트 & mybatis 환경에서 DB연결
- 이전에 작성한 스프링부트 환경설정, 간단한 select 문을 view로 띄우는 연습을 한 후
- 다른 select 쿼리문을 요청하는 어플리케이션을 작성해보자
2021/03/03 - [분류 전체보기] - [Spring] Spring boot 시작해보기
[Spring] Spring boot 시작해보기
STS : spring tool suite spring boot : 스프링 개발을 빠르게(쉽게) 할 수 있도록 환경을 제공 spring.io/tools Spring Tools 4 is the next generation of Spring tooling Largely rebuilt from scratch, Spring..
jjiny-bbany.tistory.com
2021/03/03 - [분류 전체보기] - [Spring] spring boot 기초_ DB와 연동하기
[Spring] spring boot 기초_ DB와 연동하기
Oracle mybatis web listGoods.do 요청에 따른 상품목록 출력하는 어플리케이션 만들기 goods 테이블을 사용해, DB와 연동해보기 spring starter project 생성 프로젝트 생성 _ next 사용할 환경에 대한 jar파일..
jjiny-bbany.tistory.com
- 예제에 사용할 테이블은 도서정보를 담고있는 Book Table을 사용한다
위의 내용을 참고하여 기본적으로 select * from book 을 실행하는 book 프로젝트를 생성해둔다
내용은 goods 프로젝트와 같으므로 포스팅은 생략하고 나머지 query실행을 위한 코드만 포스팅한다
도서목록에서 도서이름에 a 태그를 걸어, 도서정보를 상세보기하는 view 페이지로 이동하는 코드를 작성해보자
view 페이지에 a태그로 상세보기 링크걸기
- 목록을 보여주는 jsp view페이지에서 a태그를 사용해, 링크를 건다
- 단, queryString 을 통해 책번호를 전달한다
listBook.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>도서 목록</h2>
<hr>
<table border="1" width="80%">
<tr>
<th>도서번호</th>
<th>도서이름</th>
</tr>
<c:forEach var="b" items="${list }">
<tr>
<td>${b.no }</td>
<td><a href="detailBook.do?no=${b.no }">${b.name }</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
mapping 파일에 상세보기할 sql 작성
mybatis 홈페이지 _ product _ docs _ Mapper XML Files
Parameter를 처리하는 방법 찾기
- 그동안 바인드변수를 ? 로 표현했다면
- 스프링부트 mybatis에서는 #{} 로 표현한다
BookMapper.xml
Manager클래스에 method 추가
BookManager.java
package com.example.demo.db;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.example.demo.vo.BookVo;
public class BookManager {
private static SqlSessionFactory factory;
static {
try {
Reader reader =
Resources.getResourceAsReader("com/example/demo/db/dbConfig.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
}catch(Exception e) {
System.out.println("예외발생 : " + e.getMessage());
}
}
public static List<BookVo> findAll(){
SqlSession session = factory.openSession();
List<BookVo> list = session.selectList("book.findAll");
session.close();
return list;
}
/**
* 상세보기를 위해 매개변수로 책번호를 받아,
* 도서정보가 담긴 vo를 반환하는 일
* @return
*/
public static BookVo selectBook(int no) {
SqlSession session = factory.openSession();
// selectOne("id", parameter)
BookVo b = session.selectOne("book.selectBook", no);
session.close();
return b;
}
}
Dao 에 method를 추가하기
- Manager 클래스에서, 만든 method를 호출한다
- 이때 매개변수의 유무를 꼭 확인해야한다
BookDao.java
package com.example.demo.dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.example.demo.db.BookManager;
import com.example.demo.vo.BookVo;
@Repository
public class BookDao {
public List<BookVo> findAll(){
return BookManager.findAll();
}
public BookVo selectBook(int no) {
return BookManager.selectBook(no);
}
}
Controller 작성
- Controller에 ModelAndView 객체로 상태유지하여, sql문을 수행한 값을 View페이지로 전송하기
- 이때도 매개변수의 유무를 확인해야한다
- !! 주의 !! method가 여러개 즉. 하나의 컨트롤러안에 여러개의 상태를 전송하는 경우
- 상태를 유지하여 ModelAndView객체를 보내는 id이름을 유의한다!
- addObject 함수를 통해 전달한 ModelAndView 객체의 id가 View페이지에서 사용되기 때문!
BookController.java
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.example.demo.dao.BookDao;
@Controller
public class BookController {
@Autowired
private BookDao dao;
public void setDao(BookDao dao) {
this.dao = dao;
}
@RequestMapping("/listBook.do")
public ModelAndView listBook() {
ModelAndView mav = new ModelAndView();
mav.addObject("list", dao.findAll());
return mav;
}
@RequestMapping("/detailBook.do")
public ModelAndView detailBook(int no) {
ModelAndView mav = new ModelAndView();
// ModelAndView객체로 상태유지하여 보내는 id가 book이다
// 따라서, View 페이지에서 객체를 받아서, 출력할 때 book.no 와같은 형태로 불러야한다
mav.addObject("book", dao.selectBook(no));
return mav;
}
}
View 페이지 작성
- Controller에서 sql문을 수행하여, 결과를 상태유지하여 보내는 객체를 받아와서, 출력하기
detailBook.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>도서 상세보기</h2>
<hr>
<table border="1" width="80%">
<tr>
<th>도서번호</th>
<th>도서이름</th>
<th>출판사명</th>
<th>도서가격</th>
</tr>
<tr>
<td>${book.no }</td>
<td>${book.name }</td>
<td>${book.publisher }</td>
<td>${book.price }</td>
</tr>
</table>
</body>
</html>
server 가동
- server를 가동하여, listBook.do 페이지를 요청한다
- listBook.do페이지에서 도서이름에 설정한 a 태그(링크)를 통해 detailBook.do 를 요청한다
- 이때, 상세보기할 책번호가 쿼리스트링으로 전달된다
- localhost:8080/listBook.do 요청
- 3000번 jsp 도서의 정보를 상세보기 하기 위해 클릭
- detailBook.do?no=요청한도서번호
- queryString으로 도서번호 3000이 전달되어,
- 3000번 도서의 정보를 상세보기 할 수 있다
'Web_Back-end > Spring' 카테고리의 다른 글
[Spring] STS / file upload 파일 올리기 _ 1. select (0) | 2021.03.04 |
---|---|
[Spring] STS / lombok 사용 (0) | 2021.03.04 |
[Spring] spring boot 기초_ DB와 연동하기 (0) | 2021.03.03 |
[Spring] Spring boot 시작해보기 (0) | 2021.03.03 |
[Spring] mybatis 초기설정하기 (0) | 2021.03.02 |