열심히 끝까지
디바이스 융합 자바(Java) day94 - Spring Boot[JDBCTemplate] 본문
디바이스 융합 자바(Java) day94 - Spring Boot[JDBCTemplate]
노유림 2022. 10. 27. 13:38
- JDBCUtil
: JDBC를 도와주는 클래스, 모듈
- JDBC
: 드라이버 적재
: 연결
: sql문 쿼리 실행
: 연결 해제
=> 반복적인 작업 ->> Spring에서 모듈화하여 제공
NewSpringStarter
> jdbc 검색

api + driver 하나씩 선택해야하는데
> Oracle Driver는 현재 선택 하지 않음(오류 발생)

JSP 이용 준비 끝!!!
+ JavaBuildPath에 ojdbc6.jar 추가
= new << 객체화 하게 되면
결합도가 높아짐(강한 결합, 낮은 응집도)
결합도를 낮추기 위해서 객체화를 컨테이너에게 위임
TestController---------------
package com.ryo.springboot;
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.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@Autowired
private MemberDAO memberDAO;
@Autowired
private BoardDAO boardDAO;
@RequestMapping("/")
public @ResponseBody String root() {
return "Jdbc Template 실습 실습";
}
@RequestMapping(value="/memberList", method=RequestMethod.GET) // get post 방식하게 되면
public String memberList(Model model) {
model.addAttribute("datas",memberDAO.selectAll());
return "memberList";
}
}
MemberDTO----------------
package com.ryo.springboot;
public class MemberDTO {
private String mid;
private String mpw;
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getMpw() {
return mpw;
}
public void setMpw(String mpw) {
this.mpw = mpw;
}
@Override
public String toString() {
return "MemberDTO [mid=" + mid + ", mpw=" + mpw + "]";
}
}
MemberDAO----------------
package com.ryo.springboot;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository // dao라는 것을 인식 가능
public class MemberDAO {
@Autowired // DI(의존주입)
private JdbcTemplate jdbcTemplate;
// 결합도를 낮추기 위해 의존주입을 컨테이너에게 시킴
public List<MemberDTO> selectAll(){
String sql = "SELECT * FROM MEMBER";
List<MemberDTO> datas = jdbcTemplate.query(sql, new BeanPropertyRowMapper<MemberDTO>(MemberDTO.class));
// 위의 import된 도구를 가져옴 == 코드 한줄로 줄이는 것 가능
// 초기에 추가한 jdbc api 덕분
return datas;
}
}
-------------------------------------------------
게시판 작업(css 제외)
BoardDTO-------------------
package com.ryo.springboot;
public class BoardDTO {
private int bid;
private String writer;
private String title;
private String content;
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "BoardDTO [bid=" + bid + ", writer=" + writer + ", title=" + title + ", content=" + content + "]";
}
}
BoardDAO-------------------
package com.ryo.springboot;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class BoardDAO implements IBoardDAO{
@Autowired // DI(의존주입)
private JdbcTemplate jdbcTemplate;
@Override
public List<BoardDTO> selectAll(BoardDTO dto) {
String sql = "SELECT * FROM BOARD ORDER BY DESC";
List<BoardDTO> datas = jdbcTemplate.query(sql, new BeanPropertyRowMapper<BoardDTO>(BoardDTO.class));
return datas;
}
@Override
public BoardDTO selectOne(BoardDTO dto) {
String sql = "SELECT * FROM BOARD WHERE BID=?";
BoardDTO data = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<BoardDTO>(BoardDTO.class), dto.getBid());
return data;
}
@Override
public int insert(BoardDTO dto) {
String sqlex = "INSERT INTO BOARD VALUES(BOARD_SEQ.nextval,?,?,?)";
String sql = "INSERT INTO BOARD(BID,WRITER,TITLE,CONTENT) VALUES ((SELECT NVL(MAX(BID),0)+1 FROM BOARD),?,?,?)";
int res = jdbcTemplate.update(sql,dto.getWriter(),dto.getTitle(),dto.getContent());
return res;
}
@Override
public int delete(BoardDTO dto) {
String sql = "DELETE BOARD WHERE BID=?";
int res = jdbcTemplate.update(sql, dto.getBid());
return res;
}
}
IBoardDAO------------------
package com.ryo.springboot;
import java.util.List;
public interface IBoardDAO {
List<BoardDTO> selectAll(BoardDTO dto);
BoardDTO selectOne(BoardDTO dto);
int insert(BoardDTO dto);
int delete(BoardDTO dto);
}
TestController--------------
package com.ryo.springboot;
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.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@Autowired
private BoardDAO boardDAO;
@RequestMapping("/boardList")
public String boardList(BoardDTO dto, Model model) {
model.addAttribute("datas", boardDAO.selectAll(dto));
return "boardList";
}
@RequestMapping("/board")
public String board(BoardDTO dto, Model model) {
model.addAttribute("data", boardDAO.selectOne(dto));
return "board";
}
@RequestMapping(value="/boardInsert", method=RequestMethod.GET)
public String boardInsertin(BoardDTO dto) {
return "boardInsert";
}
@RequestMapping(value = "/boardInsert", method = RequestMethod.POST)
public String boardInsert(BoardDTO dto) {
boardDAO.insert(dto);
return "redirect:boardList";
}
@RequestMapping("/boardDelete")
public String boardDelete(BoardDTO dto) {
boardDAO.delete(dto);
return "redirect:boardList";
}
}
board.jsp--------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상세 페이지</title>
</head>
<body>
번호 : ${data.bid}<br>
작성자 : ${data.writer}<br>
제목 : ${data.title}<br>
내용 : ${data.content}<br>
<a href="boardList"><input type="button" value="메인"></a>
<a href="boardDelete?bid=${data.bid}"><input type="button" value="삭제하기"></a>
</body>
</html>
boardInsert.jsp------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 추가 페이지</title>
</head>
<body>
<form action="boardInsert" method="post">
작성자 : <input type="text" name="writer" value="writer"><br>
제목 : <input type="text" name="title" value="title"><br>
내용 : <input type="text" name="content" value="content"><br>
<input type="submit" value="글 추가"><a href="boardList"><input type="button" value="메인"></a>
</form>
</body>
</html>
boardList.jsp---------------
<%@ 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>글 목록 페이지</title>
</head>
<body>
<c:forEach var="v" items="${datas}">
<a href="board?bid=${v.bid}">${v.bid}</a> | ${v.writer} | ${v.title} | 🌸🌸🌸 <br>
</c:forEach>
<hr>
<a href="boardInsert" method="get"><input type="button" value="글 쓰기"></a>
</body>
</html>
Spring.sql------------------
SELECT * FROM USER_TABLES;
DROP TABLE MEMBER;
DROP TABLE BOARD;
CREATE TABLE MEMBER(
MID VARCHAR(15),
MPW VARCHAR(15)
);
INSERT INTO MEMBER VALUES('admin', '1234');
INSERT INTO MEMBER VALUES('timo', '1111');
CREATE TABLE BOARD(
BID INT PRIMARY KEY,
WRITER VARCHAR(15),
TITLE VARCHAR(15),
CONTENT VARCHAR(20)
);
--제약조건
CREATE SEQUENCE BOARD_SEQ;
-- AutoIncrement 대체
DROP SEQUENCE BOARD_SEQ;
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)' 카테고리의 다른 글
디바이스 융합 자바(Java) day97 - JPA(Java Persistence API) (0) | 2022.11.01 |
---|---|
디바이스 융합 자바(Java) day95 - Spring Boot[트랜잭션] (0) | 2022.10.28 |
디바이스 융합 자바(Java) day93 - Spring Boot : Validator(유효성 검사) (0) | 2022.10.26 |
디바이스 융합 자바(Java) day92 - Spring Boot 설정[MVC 패턴] (0) | 2022.10.25 |
디바이스 융합 자바(Java) day91(2) - SpringBoot 의존 주입 (0) | 2022.10.24 |