(Ctrl + Shift + Alt + L : Quick Search)
GradeVO.java
package edu.global.ex.vo;
import org.springframework.stereotype.Component;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Component /* IoC Container에 객체 생성 */
@Getter
@Setter
@AllArgsConstructor
@ToString
public class GradeVO {
private int kor;
private int eng;
private int math;
public GradeVO() { /* No Arguments Constructor */
this.kor = 85;
this.eng = 92;
this.math = 78;
}
}
BoardController.java (GradeVO 부분 수정 및 추가)
package edu.global.ex.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import edu.global.ex.service.BoardService;
import edu.global.ex.vo.GradeVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j // Annotation for [log.info()]
@Controller
@RequestMapping("/jboard/*")
public class BoardController {
@Autowired
private BoardService boardService;
@Autowired
private GradeVO gradeVO;
@GetMapping("/list")
public String view_list(Model model) {
log.info("view_list()...");
System.out.println(gradeVO);
model.addAttribute("boards", boardService.getList());
return "/board/list";
}
}
[Console]
GradeVO(kor=85, eng=92, math=78)
BoardServiceImple.java (테스트 코드 추가)
package edu.global.ex.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.global.ex.repository.BoardDAO;
import edu.global.ex.vo.BoardVO;
import edu.global.ex.vo.GradeVO;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@AllArgsConstructor
@NoArgsConstructor
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardDAO dao;
@Autowired
private GradeVO gradeVO;
@Override
public List<BoardVO> getList() {
log.info("getList()..");
System.out.println("Service : " + gradeVO);
return dao.boardSelect();
}
}
Service 내용도 추가되었으면
[Console]
Service : GradeVO(kor=85, eng=92, math=78)
BoardServiceImpl.java (코드 수정)
//@Autowired
private GradeVO gradeVO;
/* Constructor Injection */
public BoardServiceImpl(GradeVO gradeVO) {
this.gradeVO = gradeVO;
}
/* Setter Injection */
@Autowired
public void setGradeVO(GradeVO gradeVO) {
this.gradeVO = gradeVO;
}
BoardServiceImpl.java
package edu.global.ex.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.global.ex.repository.BoardDAO;
import edu.global.ex.vo.BoardVO;
import edu.global.ex.vo.GradeVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardDAO dao;
@Autowired
private GradeVO gradeVO;
@Override
public List<BoardVO> getList() {
log.info("getList()..");
System.out.println("Service : " + gradeVO);
return dao.boardSelect();
}
}
BoardController.java (content_view 함수 추가)
package edu.global.ex.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import edu.global.ex.service.BoardService;
import edu.global.ex.vo.BoardVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j // Annotation for [log.info()]
@Controller
@RequestMapping("/jboard/*")
@RequiredArgsConstructor
public class BoardController {
@Autowired
private BoardService boardService;
@GetMapping("/list")
public String view_list(Model model) {
log.info("view_list()...");
model.addAttribute("boards", boardService.getList());
return "/board/list";
}
@GetMapping("/content_view")
public String content_view(BoardVO boardVO, Model model) {
log.info("content_view()...");
int bid = boardVO.getBid();
boardVO = boardService.get(bid);
model.addAttribute("content_view", boardVO);
return "/board/content_view";
}
}
BoardService.java
package edu.global.ex.service;
import java.util.List;
import edu.global.ex.vo.BoardVO;
public interface BoardService {
public abstract List<BoardVO> getList();
public BoardVO get(int bno);
}
BoardDAO.java (contentView 함수 추가)
public BoardVO contentView(int bid) {
BoardVO board = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
String query = "select * from mvc_board where bid = ?";
connection = DriverManager.getConnection(url, uid, upw);
preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, Integer.valueOf(bid));
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int id = resultSet.getInt("bid");
String bname = resultSet.getString("bname");
String btitle = resultSet.getString("btitle");
String bcontent = resultSet.getString("bcontent");
Timestamp bdate = resultSet.getTimestamp("bdate");
int bhit = resultSet.getInt("bhit");
int bgroup = resultSet.getInt("bgroup");
int bstep = resultSet.getInt("bstep");
int bindent = resultSet.getInt("bindent");
board = new BoardVO(id, bname, btitle, bcontent, bdate, bhit, bgroup, bstep, bindent);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null)
resultSet.close();
if (preparedStatement != null)
preparedStatement.close();
if (connection != null)
connection.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
return board;
}
BoardServiceImpl.java (함수 추가)
@Override
public BoardVO get(int bno) {
log.info("get()..");
return dao.contentView(bno);
}
content_view.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>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
$(document)
.ready(
function() {
$('#a-delete')
.click(
function(event) {
//prevendDefault()는 href로 연결해 주지 않고 단순히 click에 대한 처리를 하도록 해준다.
event.preventDefault();
console.log("ajax 호출전");
$
.ajax({
type : "DELETE",
url : "${pageContext.request.contextPath}/restful/board/"
+ "${content_view.bid}",
data : {
"bid" : "${content_view.bid}"
},
success : function(
result) {
console.log(result);
if (result == "SUCCESS") {
//getList();
}
},
error : function(e) {
console.log(e);
}
})
});
});
</script>
</head>
<body>
<form action="modify" method="post">
<table id="list-table" width="500" cellpadding="0" cellspacing="0"
border="1">
<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><input type="text" name="bname"
value="${content_view.bname}"></td>
</tr>
<tr>
<td>제목</td>
<td><input type="text" name="btitle"
value="${content_view.btitle}"></td>
</tr>
<tr>
<td>내용</td>
<td><textarea rows="10" name="bcontent">${content_view.bcontent}</textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="수정">
<a href="list">목록보기</a> <a id="a-delete">삭제</a>
<a href="reply_view?bid=${content_view.bid}">답변</a></td>
</tr>
</table>
</form>
</body>
</html>
EmpVO.java
package edu.global.ex.vo;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/*이름 널? 유형
-------- -------- ------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2) */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class EmpVO {
private int empno;
private String ename;
private String job;
private int mgr;
private Date hiredate;
private int sal;
private int comm;
private int deptno;
}
EmpDAO.java
package edu.global.ex.repository;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Repository;
import edu.global.ex.vo.EmpVO;
@Repository
public class EmpDAO {
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String uid = "scott";
private String upw = "tiger";
public EmpDAO() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
public List<EmpVO> empSelect() {
List<EmpVO> boards = new ArrayList<EmpVO>();
Connection con = null;
Statement stmt = null;
ResultSet resultSet = null;
try {
String sql = "Select * from emp";
con = DriverManager.getConnection(url, uid, upw);
stmt = con.createStatement();
resultSet = stmt.executeQuery(sql);
while (resultSet.next()) {
/*
* private int empno; private String ename; private String job; private int mgr;
* private Date hiredate; private int sal; private int comm; private int deptno;
*/
int empno = resultSet.getInt("empno");
String ename = resultSet.getString("ename");
String job = resultSet.getString("job");
int mgr = resultSet.getInt("mgr");
Date hiredate = resultSet.getDate("hiredate");
int sal = resultSet.getInt("sal");
int comm = resultSet.getInt("comm");
int deptno = resultSet.getInt("deptno");
EmpVO vo = new EmpVO(empno, ename, job, mgr, hiredate, sal, comm, deptno);
boards.add(vo);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null)
resultSet.close();
if (stmt != null)
stmt.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return boards;
}
}
EmpService.java
package edu.global.ex.service;
import java.util.List;
import edu.global.ex.vo.EmpVO;
public interface EmpService {
public abstract List<EmpVO> getList();
}
EmpServiceImpl.java
package edu.global.ex.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.global.ex.repository.EmpDAO;
import edu.global.ex.vo.EmpVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
public class EmpServiceImpl implements EmpService {
@Autowired
private final EmpDAO dao;
// @RequiredArgsConstructor + final 선언으로 생성자 주입
@Override
public List<EmpVO> getList() {
log.info("getList()..");
return dao.empSelect();
}
}
EmpController.java
package edu.global.ex.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import edu.global.ex.service.EmpService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/emp/*")
@RequiredArgsConstructor
public class EmpController {
@Autowired
private EmpService empService;
@GetMapping("/list")
public String view_list(Model model) {
log.info("view_list()...");
model.addAttribute("emps", empService.getList());
return "/emp/emp_list";
}
}
emp_list.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>Insert title here</title>
</head>
<body>
<table width="500" cellpadding="0" cellspacing="0" border="1">
<tr>
<th>EMPNO</th>
<th>ENAME</th>
<th>JOB</th>
<th>MGR</th>
<th>HIREDATE</th>
<th>SAL</th>
<th>COMM</th>
<th>DEPTNO</th>
</tr>
<c:forEach var="emp" items="${emps}">
<tr>
<td>${emp.empno}</td>
<td>${emp.ename}</td>
<td>${emp.job}</td>
<td>${emp.mgr}</td>
<td>${emp.hiredate}</td>
<td>${emp.sal}</td>
<td>${emp.comm}</td>
<td>${emp.deptno}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
EmpService.java
package edu.global.ex.service;
import java.util.List;
import edu.global.ex.vo.EmpVO;
public interface EmpService {
public abstract List<EmpVO> getList();
public EmpVO get(int bno);
}
EmpServiceImpl.java
@Override
public EmpVO get(int bno) {
// TODO Auto-generated method stub
return dao.empView(bno);
}
EmpDAO.java
public EmpVO empView(int bno) {
EmpVO emp = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
String query = "select * from emp where empno = ?";
connection = DriverManager.getConnection(url, uid, upw);
preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, Integer.valueOf(bno));
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int empno = resultSet.getInt("empno");
String ename = resultSet.getString("ename");
String job = resultSet.getString("job");
int mgr = resultSet.getInt("mgr");
Date hiredate = resultSet.getDate("hiredate");
int sal = resultSet.getInt("sal");
int comm = resultSet.getInt("comm");
int deptno = resultSet.getInt("deptno");
emp = new EmpVO(empno, ename, job, mgr, hiredate, sal, comm, deptno);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null)
resultSet.close();
if (preparedStatement != null)
preparedStatement.close();
if (connection != null)
connection.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return emp;
}
EmpController.java
@GetMapping("/emp_view")
public String emp_view(EmpVO empVO, Model model) {
log.info("emp_view()...");
int empno = empVO.getEmpno();
empVO = empService.get(empno);
model.addAttribute("emp_view", empVO);
return "/emp/emp_view";
}
emp_list.jsp (empno 부분에 a 링크 걸기)
<%@ 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" cellpadding="0" cellspacing="0" border="1">
<tr>
<th>EMPNO</th>
<th>ENAME</th>
<th>JOB</th>
<th>MGR</th>
<th>HIREDATE</th>
<th>SAL</th>
<th>COMM</th>
<th>DEPTNO</th>
</tr>
<c:forEach var="emp" items="${emps}">
<tr>
<td><a href="${pageContext.request.contextPath}/emp/emp_view?empno=${emp.empno}">${emp.empno}</a></td>
<td>${emp.ename}</td>
<td>${emp.job}</td>
<td>${emp.mgr}</td>
<td>${emp.hiredate}</td>
<td>${emp.sal}</td>
<td>${emp.comm}</td>
<td>${emp.deptno}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
emp_view.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>Insert title here</title>
</head>
<body>
<table width="500" cellpadding="0" cellspacing="0" border="1">
<tr>
<th>EMPNO</th>
<td>${emp_view.empno}</td>
</tr>
<tr>
<th>ENAME</th>
<td>${emp_view.ename}</td>
</tr>
<tr>
<th>JOB</th>
<td>${emp_view.job}</td>
</tr>
<tr>
<th>MGR</th>
<td>${emp_view.mgr}</td>
</tr>
<tr>
<th>HIREDATE</th>
<td>${emp_view.hiredate}</td>
</tr>
<tr>
<th>SAL</th>
<td>${emp_view.sal}</td>
</tr>
<tr>
<th>COMM</th>
<td>${emp_view.comm}</td>
</tr>
<tr>
<th>DEPTNO</th>
<td>${emp_view.deptno}</td>
</tr>
</table>
</body>
</html>
BoardMapper.java
package edu.global.ex.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import edu.global.ex.vo.BoardVO;
@Mapper
public interface BoardMapper {
public List<BoardVO> getList();
}
BoardMapper.xml
<?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="edu.global.ex.mapper.BoardMapper">
<select id="getList" resultType="edu.global.ex.vo.BoardVO">
<![CDATA[
select * from mvc_board order by bgroup desc, bstep asc
]]>
</select>
</mapper>
BoardServiceImpl.java
(get 부분은 나중에 구현)
package edu.global.ex.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.global.ex.mapper.BoardMapper;
import edu.global.ex.vo.BoardVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardMapper mapper;
@Override
public List<BoardVO> getList() {
log.info("getList()..");
return mapper.getList();
}
@Override
public BoardVO get(int bno) {
log.info("get(int bno)..");
return null;
}
}