Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 객체 비교
- 참조형변수
- 제네릭
- 집합_SET
- 다형성
- 어윈 사용법
- 컬렉션 타입
- 자바
- abstract
- exception
- 대덕인재개발원
- 정수형타입
- oracle
- NestedFor
- Java
- 컬렉션프레임워크
- 추상메서드
- cursor문
- 인터페이스
- 오라클
- GRANT VIEW
- 한국건설관리시스템
- 생성자오버로드
- 예외미루기
- 예외처리
- EnhancedFor
- 메소드오버로딩
- 사용자예외클래스생성
- 환경설정
- 자동차수리시스템
Archives
- Today
- Total
거니의 velog
231129_SPRING 2 (6-1) 본문
package kr.or.ddit.controller.database;
public class MybatisController {
/*
* [ 12장. 마이바티스 ]
*
* 1. 마이바티스란?
*
* 마이바티스는 자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 어노테이션을 사용하여 저장프로시저나 SQL문으로 객체들을 연결시킨다.
* 마이바티스는 Apache 라이선스 2.0으로 배포되는 자유 소프트웨어이다.
*
* # 마이바티스를 사용함으로써 얻을 수 있는 이점
* - SQL의 체계적인 관리
* - 자바 객체와 SQL 입출력 값의 투명한 바인딩
* - 동적 SQL 조합
*
* # 마이바티스 설정
*
* 1) 의존관계 정의
* - 총 6가지 라이브러리를 등록하여 관계를 정의한다. (DatabaseConnectContoller 참고)
*
* 2) 스프링과 마이바티스 연결 설정
* - root-context.xml 설정(DatabaseConnectController 참고)
* - 총 3가지를 등록하여 설정한다. (추가로 Mapper를 등록하기 위한 basePackage 정보도 함께 추가할 예정
*
* 3) 마이바티스 설정
* - WEB-INF/mybatisAlias/mybatisAlias.xml 설정
* - 마이바티스의 위치 설정은 root-context.xml의 'sqlSessionFactory' 설정 시, property 요소로 적용
*
* # 관련 테이블 생성
*
* - board 테이블 생성
* - member 테이블 생성
* - member_auth 테이블 생성
*
* 2. Mapper 인터페이스
*
* - 인터페이스의 구현을 mybatis-spring에서 자동으로 생성할 수 있다.
*
* 1) 마이바티스 구현
*
* 1-1) Mapper 인터페이스
* - BoardMapper.java 생성(인터페이스)
*
* 1-2) Mapper 인터페이스와 매핑할 Mapper
* - sqlmap/boardMapper_SQL.xml 생성
*
* 1-3) 게시판 구현 설명
*
* - 게시판 컨트롤러 만들기 (crud/CrudBoardController)
* - 게시판 등록 화면 컨트롤러 메소드 만들기(crudRegister:get)
* - 게시판 등록 화면 만들기 (crud/register.jsp)
* - 여기까지 확인
*
* - 게시판 등록 기능 컨트롤러 메소드 만들기 (crudRegister:post)
* - 게시판 등록 기능 서비스 인터페이스 메소드 만들기
* - 게시판 등록 기능 서비스 클래스 메소드 만들기
* - 게시판 등록 기능 Mapper 인터페이스 메소드 만들기
* - 게시판 등록 기능 Mapper xml 쿼리 만들기
* - 게시판 등록 완료 페이지 만들기
* - 여기까지 확인
*
* - 게시판 목록 화면 컨트롤러 메소드 만들기 (crudList:get)
* - 게시판 목록 화면 서비스 인터페이스 메소드 만들기
* - 게시판 목록 화면 서비스 클래스 메소드 만들기
* - 게시판 목록 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 목록 화면 Mapper xml 쿼리 만들기
* - 게시판 목록 화면 만들기 (crud/list.jsp)
* - 여기까지 확인
*/
}
package kr.or.ddit.controller.crud;
import java.util.List;
import javax.inject.Inject;
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 kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/crud/board")
public class CrudBoardController {
@Inject
private IBoardService service;
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String crudRegisterForm() {
log.info("crudRegisterForm() 실행...!");
return "crud/register";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String crudRegister(Board board, Model model) {
log.info("crudRegister() 실행...!");
service.register(board);
// 게시글을 입력 후 최근 게시글 번호가 담겨있다(boardNo)
log.info("게시글 등록 후 만들어진 최신 게시글 번호 : " + board.getBoardNo());
model.addAttribute("msg", "등록이 완료되었습니다!");
return "crud/success";
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String crudList(Model model) {
log.info("crudList() 실행...!");
List<Board> boardList = service.list();
model.addAttribute("boardList", boardList);
return "crud/list";
}
}
package kr.or.ddit.service;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface IBoardService {
public void register(Board board);
public List<Board> list();
}
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IBoardMapper;
import kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
@Service
public class BoardServiceImpl implements IBoardService {
@Inject
private IBoardMapper mapper;
@Override
public void register(Board board) {
mapper.create(board);
}
@Override
public List<Board> list() {
return mapper.list();
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface IBoardMapper {
public void create(Board board);
public List<Board> list();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IBoardMapper">
<insert id="create" parameterType="board" useGeneratedKeys="true">
<selectKey keyProperty="boardNo" resultType="int" order="BEFORE">
select seq_board.nextval from dual
</selectKey>
insert into board(
board_no, title, content, writer, reg_date
) values (
#{boardNo}, #{title}, #{content}, #{writer}, sysdate
)
</insert>
<select id="list" resultType="board">
select
board_no, title, content, writer, reg_date
from board
order by board_no desc
</select>
</mapper>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CRUD BOARD LIST</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<h2>LIST</h2>
<a href="/crud/board/register">등록</a>
<form action="" method="post">
<input type="text" name="title" id="title" value="" />
<button type="submit">검색</button>
</form>
<table border="1">
<tr>
<td align="center" width="80">번호</td>
<td align="center" width="320">제목</td>
<td align="center" width="100">작성자</td>
<td align="center" width="180">작성일</td>
</tr>
<c:choose>
<c:when test="${empty boardList }">
<tr>
<td colspan="4">조회하실 게시물이 존재하지 않습니다.</td>
</tr>
</c:when>
<c:otherwise>
<c:forEach items="${boardList }" var="board">
<tr>
<td>${board.boardNo }</td>
<td>
<a href="/crud/board/read?boardNo=${board.boardNo }">${board.title }</a>
</td>
<td>${board.writer }</td>
<td>
<fmt:formatDate value="${board.regDate }" pattern="yyyy-MM-dd hh:mm"/>
</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
</body>
</html>
- http://localhost/crud/board/list
package kr.or.ddit.controller.database;
public class MybatisController {
/*
* [ 12장. 마이바티스 ]
*
* 1. 마이바티스란?
*
* 마이바티스는 자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 어노테이션을 사용하여 저장프로시저나 SQL문으로 객체들을 연결시킨다.
* 마이바티스는 Apache 라이선스 2.0으로 배포되는 자유 소프트웨어이다.
*
* # 마이바티스를 사용함으로써 얻을 수 있는 이점
* - SQL의 체계적인 관리
* - 자바 객체와 SQL 입출력 값의 투명한 바인딩
* - 동적 SQL 조합
*
* # 마이바티스 설정
*
* 1) 의존관계 정의
* - 총 6가지 라이브러리를 등록하여 관계를 정의한다. (DatabaseConnectContoller 참고)
*
* 2) 스프링과 마이바티스 연결 설정
* - root-context.xml 설정(DatabaseConnectController 참고)
* - 총 3가지를 등록하여 설정한다. (추가로 Mapper를 등록하기 위한 basePackage 정보도 함께 추가할 예정
*
* 3) 마이바티스 설정
* - WEB-INF/mybatisAlias/mybatisAlias.xml 설정
* - 마이바티스의 위치 설정은 root-context.xml의 'sqlSessionFactory' 설정 시, property 요소로 적용
*
* # 관련 테이블 생성
*
* - board 테이블 생성
* - member 테이블 생성
* - member_auth 테이블 생성
*
* 2. Mapper 인터페이스
*
* - 인터페이스의 구현을 mybatis-spring에서 자동으로 생성할 수 있다.
*
* 1) 마이바티스 구현
*
* 1-1) Mapper 인터페이스
* - BoardMapper.java 생성(인터페이스)
*
* 1-2) Mapper 인터페이스와 매핑할 Mapper
* - sqlmap/boardMapper_SQL.xml 생성
*
* 1-3) 게시판 구현 설명
*
* - 게시판 컨트롤러 만들기 (crud/CrudBoardController)
* - 게시판 등록 화면 컨트롤러 메소드 만들기(crudRegister:get)
* - 게시판 등록 화면 만들기 (crud/register.jsp)
* - 여기까지 확인
*
* - 게시판 등록 기능 컨트롤러 메소드 만들기 (crudRegister:post)
* - 게시판 등록 기능 서비스 인터페이스 메소드 만들기
* - 게시판 등록 기능 서비스 클래스 메소드 만들기
* - 게시판 등록 기능 Mapper 인터페이스 메소드 만들기
* - 게시판 등록 기능 Mapper xml 쿼리 만들기
* - 게시판 등록 완료 페이지 만들기
* - 여기까지 확인
*
* - 게시판 목록 화면 컨트롤러 메소드 만들기 (crudList:get)
* - 게시판 목록 화면 서비스 인터페이스 메소드 만들기
* - 게시판 목록 화면 서비스 클래스 메소드 만들기
* - 게시판 목록 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 목록 화면 Mapper xml 쿼리 만들기
* - 게시판 목록 화면 만들기 (crud/list.jsp)
* - 여기까지 확인
*
* - 게시판 상세 화면 컨트롤러 메소드 만들기 (crudRead:get)
* - 게시판 상세 화면 서비스 인터페이스 메소드 만들기
* - 게시판 상세 화면 서비스 클래스 메소드 만들기
* - 게시판 상세 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 상세 화면 Mapper xml 쿼리 만들기
* - 게시판 상세 화면 만들기 (crud/read.jsp)
* - 여기까지 확인!
*/
}
package kr.or.ddit.controller.crud;
import java.util.List;
import javax.inject.Inject;
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 kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/crud/board")
public class CrudBoardController {
@Inject
private IBoardService service;
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String crudRegisterForm() {
log.info("crudRegisterForm() 실행...!");
return "crud/register";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String crudRegister(Board board, Model model) {
log.info("crudRegister() 실행...!");
service.register(board);
// 게시글을 입력 후 최근 게시글 번호가 담겨있다(boardNo)
log.info("게시글 등록 후 만들어진 최신 게시글 번호 : " + board.getBoardNo());
model.addAttribute("msg", "등록이 완료되었습니다!");
return "crud/success";
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String crudList(Model model) {
log.info("crudList() 실행...!");
List<Board> boardList = service.list();
model.addAttribute("boardList", boardList);
return "crud/list";
}
@RequestMapping(value = "/read", method = RequestMethod.GET)
public String crudRead(int boardNo, Model model) {
log.info("crudRead() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
return "crud/read";
}
}
package kr.or.ddit.service;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface IBoardService {
public void register(Board board);
public List<Board> list();
public Board read(int boardNo);
}
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IBoardMapper;
import kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
@Service
public class BoardServiceImpl implements IBoardService {
@Inject
private IBoardMapper mapper;
@Override
public void register(Board board) {
mapper.create(board);
}
@Override
public List<Board> list() {
return mapper.list();
}
@Override
public Board read(int boardNo) {
return mapper.read(boardNo);
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface IBoardMapper {
public void create(Board board);
public List<Board> list();
public Board read(int boardNo);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IBoardMapper">
<insert id="create" parameterType="board" useGeneratedKeys="true">
<selectKey keyProperty="boardNo" resultType="int" order="BEFORE">
select seq_board.nextval from dual
</selectKey>
insert into board(
board_no, title, content, writer, reg_date
) values (
#{boardNo}, #{title}, #{content}, #{writer}, sysdate
)
</insert>
<select id="list" resultType="board">
select
board_no, title, content, writer, reg_date
from board
order by board_no desc
</select>
<select id="read" parameterType="int" resultType="board">
select
board_no, title, content, writer, reg_date
from board
where 1=1
and board_no = #{boardNo}
</select>
</mapper>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CRUD BOARD READ</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<h2>READ</h2>
<table border="1">
<tr>
<td>제목</td>
<td>${board.title }</td>
</tr>
<tr>
<td>작성자</td>
<td>${board.writer }</td>
</tr>
<tr>
<td>내용</td>
<td>
<p style="white-space: pre-wrap;">${board.content }</p>
</td>
</tr>
<tr>
<td>작성일</td>
<td>
<fmt:formatDate value="${board.regDate }" pattern="yyyy-MM-dd hh:mm"/>
</td>
</tr>
</table>
<form action="/crud/board/remove" method="post" id="delForm" name="delForm">
<input type="hidden" name="boardNo" value="${board.boardNo }" />
</form>
<div>
<button type="button" id="modifyBtn">수정</button>
<button type="button" id="deleteBtn">삭제</button>
<button type="button" id="listBtn">목록</button>
</div>
</body>
<script type="text/javascript">
$(function(){
var modifyBtn = $("#modifyBtn"); // 수정 버튼 Element
var deleteBtn = $("#deleteBtn"); // 삭제 버튼 Element
var listBtn = $("#listBtn"); // 목록 버튼 Element
var delForm = $("#delForm"); // delForm Element
modifyBtn.on("click", function(){
delForm.attr("action", "/crud/board/modify");
delForm.attr("method", "get");
delForm.submit();
});
deleteBtn.on("click", function(){
if(confirm("정말로 삭제하시겠습니까?")) {
delForm.submit();
}
});
listBtn.on("click", function(){
location.href = "/crud/board/list";
});
});
</script>
</html>
- http://localhost/crud/board/read?boardNo=2
package kr.or.ddit.controller.database;
public class MybatisController {
/*
* [ 12장. 마이바티스 ]
*
* 1. 마이바티스란?
*
* 마이바티스는 자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 어노테이션을 사용하여 저장프로시저나 SQL문으로 객체들을 연결시킨다.
* 마이바티스는 Apache 라이선스 2.0으로 배포되는 자유 소프트웨어이다.
*
* # 마이바티스를 사용함으로써 얻을 수 있는 이점
* - SQL의 체계적인 관리
* - 자바 객체와 SQL 입출력 값의 투명한 바인딩
* - 동적 SQL 조합
*
* # 마이바티스 설정
*
* 1) 의존관계 정의
* - 총 6가지 라이브러리를 등록하여 관계를 정의한다. (DatabaseConnectContoller 참고)
*
* 2) 스프링과 마이바티스 연결 설정
* - root-context.xml 설정(DatabaseConnectController 참고)
* - 총 3가지를 등록하여 설정한다. (추가로 Mapper를 등록하기 위한 basePackage 정보도 함께 추가할 예정
*
* 3) 마이바티스 설정
* - WEB-INF/mybatisAlias/mybatisAlias.xml 설정
* - 마이바티스의 위치 설정은 root-context.xml의 'sqlSessionFactory' 설정 시, property 요소로 적용
*
* # 관련 테이블 생성
*
* - board 테이블 생성
* - member 테이블 생성
* - member_auth 테이블 생성
*
* 2. Mapper 인터페이스
*
* - 인터페이스의 구현을 mybatis-spring에서 자동으로 생성할 수 있다.
*
* 1) 마이바티스 구현
*
* 1-1) Mapper 인터페이스
* - BoardMapper.java 생성(인터페이스)
*
* 1-2) Mapper 인터페이스와 매핑할 Mapper
* - sqlmap/boardMapper_SQL.xml 생성
*
* 1-3) 게시판 구현 설명
*
* - 게시판 컨트롤러 만들기 (crud/CrudBoardController)
* - 게시판 등록 화면 컨트롤러 메소드 만들기(crudRegister:get)
* - 게시판 등록 화면 만들기 (crud/register.jsp)
* - 여기까지 확인
*
* - 게시판 등록 기능 컨트롤러 메소드 만들기 (crudRegister:post)
* - 게시판 등록 기능 서비스 인터페이스 메소드 만들기
* - 게시판 등록 기능 서비스 클래스 메소드 만들기
* - 게시판 등록 기능 Mapper 인터페이스 메소드 만들기
* - 게시판 등록 기능 Mapper xml 쿼리 만들기
* - 게시판 등록 완료 페이지 만들기
* - 여기까지 확인
*
* - 게시판 목록 화면 컨트롤러 메소드 만들기 (crudList:get)
* - 게시판 목록 화면 서비스 인터페이스 메소드 만들기
* - 게시판 목록 화면 서비스 클래스 메소드 만들기
* - 게시판 목록 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 목록 화면 Mapper xml 쿼리 만들기
* - 게시판 목록 화면 만들기 (crud/list.jsp)
* - 여기까지 확인
*
* - 게시판 상세 화면 컨트롤러 메소드 만들기 (crudRead:get)
* - 게시판 상세 화면 서비스 인터페이스 메소드 만들기
* - 게시판 상세 화면 서비스 클래스 메소드 만들기
* - 게시판 상세 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 상세 화면 Mapper xml 쿼리 만들기
* - 게시판 상세 화면 만들기 (crud/read.jsp)
* - 여기까지 확인!
*
* - 게시판 수정 화면 컨트롤러 메소드 만들기 (crudModify:get)
* - 게시판 수정 화면 서비스 인터페이스 메소드 만들기
* - 게시판 수정 화면 서비스 클래스 메소드 만들기
* - 게시판 수정 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 수정 화면 Mapper xml 쿼리 만들기
* - 게시판 수정 화면 만들기 (crud/register.jsp)
* - 게시판 수정 기능 컨트롤러 메소드 만들기 (crudModify:post)
* - 게시판 수정 기능 서비스 인터페이스 메소드 만들기
* - 게시판 수정 기능 서비스 클래스 메소드 만들기
* - 게시판 수정 기능 Mapper 인터페이스 메소드 만들기
* - 게시판 수정 기능 Mapper xml 쿼리 만들기
* - 여기까지 확인!
*/
}
package kr.or.ddit.controller.crud;
import java.util.List;
import javax.inject.Inject;
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 kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/crud/board")
public class CrudBoardController {
@Inject
private IBoardService service;
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String crudRegisterForm() {
log.info("crudRegisterForm() 실행...!");
return "crud/register";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String crudRegister(Board board, Model model) {
log.info("crudRegister() 실행...!");
service.register(board);
// 게시글을 입력 후 최근 게시글 번호가 담겨있다(boardNo)
log.info("게시글 등록 후 만들어진 최신 게시글 번호 : " + board.getBoardNo());
model.addAttribute("msg", "등록이 완료되었습니다!");
return "crud/success";
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String crudList(Model model) {
log.info("crudList() 실행...!");
List<Board> boardList = service.list();
model.addAttribute("boardList", boardList);
return "crud/list";
}
@RequestMapping(value = "/read", method = RequestMethod.GET)
public String crudRead(int boardNo, Model model) {
log.info("crudRead() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
return "crud/read";
}
@RequestMapping(value = "/modify", method = RequestMethod.GET)
public String crudModifyForm(int boardNo, Model model) {
log.info("crudModifyForm() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
model.addAttribute("status", "u"); // '수정을 진행합니다' 라는 flag
return "crud/register";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CRUD REGISTER</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<h2>REGISTER</h2>
<form action="/crud/board/register" method="post" id="registerForm" name="registerForm">
<c:if test="${status eq 'u' }">
<input type="hidden" name="boardNo" value="${board.boardNo }" />
</c:if>
<table border="1">
<tr>
<td>제목</td>
<td><input type="text" id="title" name="title" value="${board.title }" /></td>
</tr>
<tr>
<td>작성자</td>
<td><input type="text" id="writer" name="writer" value="${board.writer }" /></td>
</tr>
<tr>
<td>내용</td>
<td>
<textarea rows="10" cols="40" name="content" id="content" wrap="soft">${board.content }</textarea>
</td>
</tr>
</table>
<div>
<c:set value="등록" var="btnText" />
<c:if test="${status eq 'u' }">
<c:set value="수정" var="btnText" />
</c:if>
<button type="button" id="registerBtn">${btnText }</button>
<c:if test="${status eq 'u' }">
<button type="button" id="cancelBtn">취소</button>
</c:if>
<c:if test="${status ne 'u' }">
<button type="button" id="listBtn">목록</button>
</c:if>
</div>
</form>
</body>
<script type="text/javascript">
$(function(){
var registerForm = $("#registerForm"); // form element
var registerBtn = $("#registerBtn"); // 등록 버튼 element
var listBtn = $("#listBtn"); // 목록 버튼 element
var cancelBtn = $("#cancelBtn"); // 취소 버튼 element
registerBtn.on("click", function(){
var title = $("#title").val();
var writer = $("#writer").val();
var content = $("#content").val();
if(!title) {
alert("제목을 입력해 주세요!");
return false;
}
if(!writer) {
alert("작성자를 입력해 주세요!");
return false;
}
if(!content) {
alert("내용을 입력해 주세요!");
return false;
}
// 수정일 때 수정 경로로 변경한다.
if($(this).text() == "수정") {
registerForm.attr("action", "/crud/board/modify");
}
registerForm.submit();
});
listBtn.on("click", function(){
location.href = "/crud/board/list";
});
cancelBtn.on("click", function(){
location.href = "/crud/board/read?boardNo=${board.boardNo}";
});
});
</script>
</html>
package kr.or.ddit.controller.crud;
import java.util.List;
import javax.inject.Inject;
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 kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/crud/board")
public class CrudBoardController {
@Inject
private IBoardService service;
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String crudRegisterForm() {
log.info("crudRegisterForm() 실행...!");
return "crud/register";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String crudRegister(Board board, Model model) {
log.info("crudRegister() 실행...!");
service.register(board);
// 게시글을 입력 후 최근 게시글 번호가 담겨있다(boardNo)
log.info("게시글 등록 후 만들어진 최신 게시글 번호 : " + board.getBoardNo());
model.addAttribute("msg", "등록이 완료되었습니다!");
return "crud/success";
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String crudList(Model model) {
log.info("crudList() 실행...!");
List<Board> boardList = service.list();
model.addAttribute("boardList", boardList);
return "crud/list";
}
@RequestMapping(value = "/read", method = RequestMethod.GET)
public String crudRead(int boardNo, Model model) {
log.info("crudRead() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
return "crud/read";
}
@RequestMapping(value = "/modify", method = RequestMethod.GET)
public String crudModifyForm(int boardNo, Model model) {
log.info("crudModifyForm() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
model.addAttribute("status", "u"); // '수정을 진행합니다' 라는 flag
return "crud/register";
}
@RequestMapping(value = "/modify", method = RequestMethod.POST)
public String crudModify(Board board, Model model) {
log.info("crudModify() 실행...!");
service.modify(board);
model.addAttribute("msg", "수정이 완료되었습니다.");
return "crud/success";
}
}
package kr.or.ddit.service;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface IBoardService {
public void register(Board board);
public List<Board> list();
public Board read(int boardNo);
public void modify(Board board);
}
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IBoardMapper;
import kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
@Service
public class BoardServiceImpl implements IBoardService {
@Inject
private IBoardMapper mapper;
@Override
public void register(Board board) {
mapper.create(board);
}
@Override
public List<Board> list() {
return mapper.list();
}
@Override
public Board read(int boardNo) {
return mapper.read(boardNo);
}
@Override
public void modify(Board board) {
mapper.update(board);
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface IBoardMapper {
public void create(Board board);
public List<Board> list();
public Board read(int boardNo);
public void update(Board board);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IBoardMapper">
<insert id="create" parameterType="board" useGeneratedKeys="true">
<selectKey keyProperty="boardNo" resultType="int" order="BEFORE">
select seq_board.nextval from dual
</selectKey>
insert into board(
board_no, title, content, writer, reg_date
) values (
#{boardNo}, #{title}, #{content}, #{writer}, sysdate
)
</insert>
<select id="list" resultType="board">
select
board_no, title, content, writer, reg_date
from board
order by board_no desc
</select>
<select id="read" parameterType="int" resultType="board">
select
board_no, title, content, writer, reg_date
from board
where 1=1
and board_no = #{boardNo}
</select>
<update id="update" parameterType="board">
update board
set
title = #{title},
content = #{content}
where board_no = #{boardNo}
</update>
</mapper>
- http://localhost/crud/board/modify?boardNo=2
package kr.or.ddit.controller.database;
public class MybatisController {
/*
* [ 12장. 마이바티스 ]
*
* 1. 마이바티스란?
*
* 마이바티스는 자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 어노테이션을 사용하여 저장프로시저나 SQL문으로 객체들을 연결시킨다.
* 마이바티스는 Apache 라이선스 2.0으로 배포되는 자유 소프트웨어이다.
*
* # 마이바티스를 사용함으로써 얻을 수 있는 이점
* - SQL의 체계적인 관리
* - 자바 객체와 SQL 입출력 값의 투명한 바인딩
* - 동적 SQL 조합
*
* # 마이바티스 설정
*
* 1) 의존관계 정의
* - 총 6가지 라이브러리를 등록하여 관계를 정의한다. (DatabaseConnectContoller 참고)
*
* 2) 스프링과 마이바티스 연결 설정
* - root-context.xml 설정(DatabaseConnectController 참고)
* - 총 3가지를 등록하여 설정한다. (추가로 Mapper를 등록하기 위한 basePackage 정보도 함께 추가할 예정
*
* 3) 마이바티스 설정
* - WEB-INF/mybatisAlias/mybatisAlias.xml 설정
* - 마이바티스의 위치 설정은 root-context.xml의 'sqlSessionFactory' 설정 시, property 요소로 적용
*
* # 관련 테이블 생성
*
* - board 테이블 생성
* - member 테이블 생성
* - member_auth 테이블 생성
*
* 2. Mapper 인터페이스
*
* - 인터페이스의 구현을 mybatis-spring에서 자동으로 생성할 수 있다.
*
* 1) 마이바티스 구현
*
* 1-1) Mapper 인터페이스
* - BoardMapper.java 생성(인터페이스)
*
* 1-2) Mapper 인터페이스와 매핑할 Mapper
* - sqlmap/boardMapper_SQL.xml 생성
*
* 1-3) 게시판 구현 설명
*
* - 게시판 컨트롤러 만들기 (crud/CrudBoardController)
* - 게시판 등록 화면 컨트롤러 메소드 만들기(crudRegister:get)
* - 게시판 등록 화면 만들기 (crud/register.jsp)
* - 여기까지 확인
*
* - 게시판 등록 기능 컨트롤러 메소드 만들기 (crudRegister:post)
* - 게시판 등록 기능 서비스 인터페이스 메소드 만들기
* - 게시판 등록 기능 서비스 클래스 메소드 만들기
* - 게시판 등록 기능 Mapper 인터페이스 메소드 만들기
* - 게시판 등록 기능 Mapper xml 쿼리 만들기
* - 게시판 등록 완료 페이지 만들기
* - 여기까지 확인
*
* - 게시판 목록 화면 컨트롤러 메소드 만들기 (crudList:get)
* - 게시판 목록 화면 서비스 인터페이스 메소드 만들기
* - 게시판 목록 화면 서비스 클래스 메소드 만들기
* - 게시판 목록 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 목록 화면 Mapper xml 쿼리 만들기
* - 게시판 목록 화면 만들기 (crud/list.jsp)
* - 여기까지 확인
*
* - 게시판 상세 화면 컨트롤러 메소드 만들기 (crudRead:get)
* - 게시판 상세 화면 서비스 인터페이스 메소드 만들기
* - 게시판 상세 화면 서비스 클래스 메소드 만들기
* - 게시판 상세 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 상세 화면 Mapper xml 쿼리 만들기
* - 게시판 상세 화면 만들기 (crud/read.jsp)
* - 여기까지 확인!
*
* - 게시판 수정 화면 컨트롤러 메소드 만들기 (crudModify:get)
* - 게시판 수정 화면 서비스 인터페이스 메소드 만들기
* - 게시판 수정 화면 서비스 클래스 메소드 만들기
* - 게시판 수정 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 수정 화면 Mapper xml 쿼리 만들기
* - 게시판 수정 화면 만들기 (crud/register.jsp)
* - 게시판 수정 기능 컨트롤러 메소드 만들기 (crudModify:post)
* - 게시판 수정 기능 서비스 인터페이스 메소드 만들기
* - 게시판 수정 기능 서비스 클래스 메소드 만들기
* - 게시판 수정 기능 Mapper 인터페이스 메소드 만들기
* - 게시판 수정 기능 Mapper xml 쿼리 만들기
* - 여기까지 확인!
*
* - 게시판 삭제 기능 컨트롤러 메소드 만들기 (crudRemove:post)
* - 게시판 삭제 기능 서비스 인터페이스 메소드 만들기
* - 게시판 삭제 기능 서비스 클래스 메소드 만들기
* - 게시판 삭제 기능 Mapper 인터페이스 메소드 만들기
* - 게시판 삭제 기능 Mapper xml 쿼리 만들기
* - 여기까지 확인!
*/
}
package kr.or.ddit.controller.crud;
import java.util.List;
import javax.inject.Inject;
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 kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/crud/board")
public class CrudBoardController {
@Inject
private IBoardService service;
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String crudRegisterForm() {
log.info("crudRegisterForm() 실행...!");
return "crud/register";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String crudRegister(Board board, Model model) {
log.info("crudRegister() 실행...!");
service.register(board);
// 게시글을 입력 후 최근 게시글 번호가 담겨있다(boardNo)
log.info("게시글 등록 후 만들어진 최신 게시글 번호 : " + board.getBoardNo());
model.addAttribute("msg", "등록이 완료되었습니다!");
return "crud/success";
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String crudList(Model model) {
log.info("crudList() 실행...!");
List<Board> boardList = service.list();
model.addAttribute("boardList", boardList);
return "crud/list";
}
@RequestMapping(value = "/read", method = RequestMethod.GET)
public String crudRead(int boardNo, Model model) {
log.info("crudRead() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
return "crud/read";
}
@RequestMapping(value = "/modify", method = RequestMethod.GET)
public String crudModifyForm(int boardNo, Model model) {
log.info("crudModifyForm() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
model.addAttribute("status", "u"); // '수정을 진행합니다' 라는 flag
return "crud/register";
}
@RequestMapping(value = "/modify", method = RequestMethod.POST)
public String crudModify(Board board, Model model) {
log.info("crudModify() 실행...!");
service.modify(board);
model.addAttribute("msg", "수정이 완료되었습니다.");
return "crud/success";
}
@RequestMapping(value = "/remove", method = RequestMethod.POST)
public String crudDelete(int boardNo, Model model) {
log.info("crudDelete() 실행...!");
service.remove(boardNo);
model.addAttribute("msg", "삭제가 완료되었습니다.");
return "crud/success";
}
}
package kr.or.ddit.service;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface IBoardService {
public void register(Board board);
public List<Board> list();
public Board read(int boardNo);
public void modify(Board board);
public void remove(int boardNo);
}
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IBoardMapper;
import kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
@Service
public class BoardServiceImpl implements IBoardService {
@Inject
private IBoardMapper mapper;
@Override
public void register(Board board) {
mapper.create(board);
}
@Override
public List<Board> list() {
return mapper.list();
}
@Override
public Board read(int boardNo) {
return mapper.read(boardNo);
}
@Override
public void modify(Board board) {
mapper.update(board);
}
@Override
public void remove(int boardNo) {
mapper.delete(boardNo);
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface IBoardMapper {
public void create(Board board);
public List<Board> list();
public Board read(int boardNo);
public void update(Board board);
public void delete(int boardNo);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IBoardMapper">
<insert id="create" parameterType="board" useGeneratedKeys="true">
<selectKey keyProperty="boardNo" resultType="int" order="BEFORE">
select seq_board.nextval from dual
</selectKey>
insert into board(
board_no, title, content, writer, reg_date
) values (
#{boardNo}, #{title}, #{content}, #{writer}, sysdate
)
</insert>
<select id="list" resultType="board">
select
board_no, title, content, writer, reg_date
from board
order by board_no desc
</select>
<select id="read" parameterType="int" resultType="board">
select
board_no, title, content, writer, reg_date
from board
where 1=1
and board_no = #{boardNo}
</select>
<update id="update" parameterType="board">
update board
set
title = #{title},
content = #{content}
where board_no = #{boardNo}
</update>
<delete id="delete" parameterType="int">
delete from board where board_no = #{boardNo}
</delete>
</mapper>
package kr.or.ddit.controller.database;
public class MybatisController {
/*
* [ 12장. 마이바티스 ]
*
* 1. 마이바티스란?
*
* 마이바티스는 자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 어노테이션을 사용하여 저장프로시저나 SQL문으로 객체들을 연결시킨다.
* 마이바티스는 Apache 라이선스 2.0으로 배포되는 자유 소프트웨어이다.
*
* # 마이바티스를 사용함으로써 얻을 수 있는 이점
* - SQL의 체계적인 관리
* - 자바 객체와 SQL 입출력 값의 투명한 바인딩
* - 동적 SQL 조합
*
* # 마이바티스 설정
*
* 1) 의존관계 정의
* - 총 6가지 라이브러리를 등록하여 관계를 정의한다. (DatabaseConnectContoller 참고)
*
* 2) 스프링과 마이바티스 연결 설정
* - root-context.xml 설정(DatabaseConnectController 참고)
* - 총 3가지를 등록하여 설정한다. (추가로 Mapper를 등록하기 위한 basePackage 정보도 함께 추가할 예정
*
* 3) 마이바티스 설정
* - WEB-INF/mybatisAlias/mybatisAlias.xml 설정
* - 마이바티스의 위치 설정은 root-context.xml의 'sqlSessionFactory' 설정 시, property 요소로 적용
*
* # 관련 테이블 생성
*
* - board 테이블 생성
* - member 테이블 생성
* - member_auth 테이블 생성
*
* 2. Mapper 인터페이스
*
* - 인터페이스의 구현을 mybatis-spring에서 자동으로 생성할 수 있다.
*
* 1) 마이바티스 구현
*
* 1-1) Mapper 인터페이스
* - BoardMapper.java 생성(인터페이스)
*
* 1-2) Mapper 인터페이스와 매핑할 Mapper
* - sqlmap/boardMapper_SQL.xml 생성
*
* 1-3) 게시판 구현 설명
*
* - 게시판 컨트롤러 만들기 (crud/CrudBoardController)
* - 게시판 등록 화면 컨트롤러 메소드 만들기(crudRegister:get)
* - 게시판 등록 화면 만들기 (crud/register.jsp)
* - 여기까지 확인
*
* - 게시판 등록 기능 컨트롤러 메소드 만들기 (crudRegister:post)
* - 게시판 등록 기능 서비스 인터페이스 메소드 만들기
* - 게시판 등록 기능 서비스 클래스 메소드 만들기
* - 게시판 등록 기능 Mapper 인터페이스 메소드 만들기
* - 게시판 등록 기능 Mapper xml 쿼리 만들기
* - 게시판 등록 완료 페이지 만들기
* - 여기까지 확인
*
* - 게시판 목록 화면 컨트롤러 메소드 만들기 (crudList:get)
* - 게시판 목록 화면 서비스 인터페이스 메소드 만들기
* - 게시판 목록 화면 서비스 클래스 메소드 만들기
* - 게시판 목록 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 목록 화면 Mapper xml 쿼리 만들기
* - 게시판 목록 화면 만들기 (crud/list.jsp)
* - 여기까지 확인
*
* - 게시판 상세 화면 컨트롤러 메소드 만들기 (crudRead:get)
* - 게시판 상세 화면 서비스 인터페이스 메소드 만들기
* - 게시판 상세 화면 서비스 클래스 메소드 만들기
* - 게시판 상세 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 상세 화면 Mapper xml 쿼리 만들기
* - 게시판 상세 화면 만들기 (crud/read.jsp)
* - 여기까지 확인!
*
* - 게시판 수정 화면 컨트롤러 메소드 만들기 (crudModify:get)
* - 게시판 수정 화면 서비스 인터페이스 메소드 만들기
* - 게시판 수정 화면 서비스 클래스 메소드 만들기
* - 게시판 수정 화면 Mapper 인터페이스 메소드 만들기
* - 게시판 수정 화면 Mapper xml 쿼리 만들기
* - 게시판 수정 화면 만들기 (crud/register.jsp)
* - 게시판 수정 기능 컨트롤러 메소드 만들기 (crudModify:post)
* - 게시판 수정 기능 서비스 인터페이스 메소드 만들기
* - 게시판 수정 기능 서비스 클래스 메소드 만들기
* - 게시판 수정 기능 Mapper 인터페이스 메소드 만들기
* - 게시판 수정 기능 Mapper xml 쿼리 만들기
* - 여기까지 확인!
*
* - 게시판 삭제 기능 컨트롤러 메소드 만들기 (crudRemove:post)
* - 게시판 삭제 기능 서비스 인터페이스 메소드 만들기
* - 게시판 삭제 기능 서비스 클래스 메소드 만들기
* - 게시판 삭제 기능 Mapper 인터페이스 메소드 만들기
* - 게시판 삭제 기능 Mapper xml 쿼리 만들기
* - 여기까지 확인!
*
* - 게시판 목록 화면 검색 페이지 추가(crud/board/list.jsp)
* - 게시판 검색 기능 컨트롤러 메소드 추가(crudSearch:post)
* - 게시판 검색 기능 서비스 인터페이스 메소드 추가
* - 게시판 검색 기능 서비스 클래스 메소드 추가
* - 게시판 검색 기능 Mapper 메소드 추가
* - 게시판 검색 기능 Mapper xml 쿼리 추가
* - 여기까지 확인
*
* - 기본 CRUD 끝
*/
}
package kr.or.ddit.controller.crud;
import java.util.List;
import javax.inject.Inject;
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 kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/crud/board")
public class CrudBoardController {
@Inject
private IBoardService service;
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String crudRegisterForm() {
log.info("crudRegisterForm() 실행...!");
return "crud/register";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String crudRegister(Board board, Model model) {
log.info("crudRegister() 실행...!");
service.register(board);
// 게시글을 입력 후 최근 게시글 번호가 담겨있다(boardNo)
log.info("게시글 등록 후 만들어진 최신 게시글 번호 : " + board.getBoardNo());
model.addAttribute("msg", "등록이 완료되었습니다!");
return "crud/success";
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String crudList(Model model) {
log.info("crudList() 실행...!");
List<Board> boardList = service.list();
model.addAttribute("boardList", boardList);
return "crud/list";
}
@RequestMapping(value = "/read", method = RequestMethod.GET)
public String crudRead(int boardNo, Model model) {
log.info("crudRead() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
return "crud/read";
}
@RequestMapping(value = "/modify", method = RequestMethod.GET)
public String crudModifyForm(int boardNo, Model model) {
log.info("crudModifyForm() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
model.addAttribute("status", "u"); // '수정을 진행합니다' 라는 flag
return "crud/register";
}
@RequestMapping(value = "/modify", method = RequestMethod.POST)
public String crudModify(Board board, Model model) {
log.info("crudModify() 실행...!");
service.modify(board);
model.addAttribute("msg", "수정이 완료되었습니다.");
return "crud/success";
}
@RequestMapping(value = "/remove", method = RequestMethod.POST)
public String crudDelete(int boardNo, Model model) {
log.info("crudDelete() 실행...!");
service.remove(boardNo);
model.addAttribute("msg", "삭제가 완료되었습니다.");
return "crud/success";
}
@RequestMapping(value = "/search", method = RequestMethod.POST)
public String crudSearch(String title, Model model) {
log.info("crudSearch() 실행...!");
Board board = new Board();
board.setTitle(title);
List<Board> boardList = service.search(board);
model.addAttribute("boardList", boardList);
model.addAttribute("board", board);
return "crud/list";
}
}
package kr.or.ddit.service;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface IBoardService {
public void register(Board board);
public List<Board> list();
public Board read(int boardNo);
public void modify(Board board);
public void remove(int boardNo);
public List<Board> search(Board board);
}
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IBoardMapper;
import kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
@Service
public class BoardServiceImpl implements IBoardService {
@Inject
private IBoardMapper mapper;
@Override
public void register(Board board) {
mapper.create(board);
}
@Override
public List<Board> list() {
return mapper.list();
}
@Override
public Board read(int boardNo) {
return mapper.read(boardNo);
}
@Override
public void modify(Board board) {
mapper.update(board);
}
@Override
public void remove(int boardNo) {
mapper.delete(boardNo);
}
@Override
public List<Board> search(Board board) {
return mapper.search(board);
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface IBoardMapper {
public void create(Board board);
public List<Board> list();
public Board read(int boardNo);
public void update(Board board);
public void delete(int boardNo);
public List<Board> search(Board board);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IBoardMapper">
<insert id="create" parameterType="board" useGeneratedKeys="true">
<selectKey keyProperty="boardNo" resultType="int" order="BEFORE">
select seq_board.nextval from dual
</selectKey>
insert into board(
board_no, title, content, writer, reg_date
) values (
#{boardNo}, #{title}, #{content}, #{writer}, sysdate
)
</insert>
<select id="list" resultType="board">
select
board_no, title, content, writer, reg_date
from board
order by board_no desc
</select>
<select id="read" parameterType="int" resultType="board">
select
board_no, title, content, writer, reg_date
from board
where 1=1
and board_no = #{boardNo}
</select>
<update id="update" parameterType="board">
update board
set
title = #{title},
content = #{content}
where board_no = #{boardNo}
</update>
<delete id="delete" parameterType="int">
delete from board where board_no = #{boardNo}
</delete>
<select id="search" parameterType="board" resultType="board">
select
board_no, title, content, writer, reg_date
from board
where 1=1
<if test="title != null and title != ''">
and title like '%' || #{title} || '%'
</if>
order by board_no desc
</select>
</mapper>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CRUD BOARD LIST</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<h2>LIST</h2>
<a href="/crud/board/register">등록</a>
<form action="/crud/board/search" method="post">
<input type="text" name="title" id="title" value="${board.title }" />
<button type="submit">검색</button>
</form>
- http://localhost/crud/board/search
'대덕인재개발원_웹기반 애플리케이션' 카테고리의 다른 글
231129_SPRING 2 (6-3) (0) | 2023.11.29 |
---|---|
231129_SPRING 2 (6-2) (0) | 2023.11.29 |
231128_SPRING 2 (5-2) (0) | 2023.11.28 |
231128_SPRING 2 (5-1) (0) | 2023.11.28 |
231127_SPRING 2 (4-2) (0) | 2023.11.27 |