표준형 : 변형 MyBatis + Service
파라미터 데이터 : hashmap(Controller, Service, Dao, xml)
xml : parameterType = “hashmap” ⇒ param:필드명
Service : interface + ~Impl(파일 병합)
예시
- 게시판 코드 변형
1. Controller
@Controller
public class BController {
@Autowired
private BService service;
@RequestMapping("/list")
public String list(Model model) {
ArrayList<BDto> list = service.list();
model.addAttribute("list", list);
return "list";
}
@RequestMapping("/write_view")
public String write_view() {
return "write_view";
}
@RequestMapping("/write")
public String write(@RequestParam HashMap<String, String> param) {
service.write(param);
return "redirect:list";
}
@RequestMapping("/content_view") public String
content_view(@RequestParam HashMap<String, String> param, Model model) {
model.addAttribute("content_view", service.contentView(param));
return "content_view";
}
@RequestMapping("/modify")
public String modify(@RequestParam HashMap<String, String> param) {
service.modify(param);
return "redirect:list";
}
@RequestMapping("/delete")
public String delete(@RequestParam HashMap<String, String> param) {
service.delete(param);
return "redirect:list";
}
}
2. Dao
public interface IBDao {
public ArrayList<BDto> list();
public void write(HashMap<String, String> param);
public BDto contentView (HashMap<String, String> param);
public void upHit(HashMap<String, String> param);
public void modify(HashMap<String, String> param);
public void delete(HashMap<String, String> param);
}
3. Dto
public class BDto {
private int bId;
private String bName;
private String bTitle;
private String bContent;
private Timestamp bDate;
private int bHit;
public BDto() { }
public BDto(int bId, String bName, String bTitle, String bContent, Timestamp bDate, int bHit) {
this.bId = bId;
this.bName = bName;
this.bTitle = bTitle;
this.bContent = bContent;
this.bDate = bDate;
this.bHit = bHit;
}
public int getbId() {
return bId;
}
public void setbId(int bId) {
this.bId = bId;
}
public String getbName() {
return bName;
}
public void setbName(String bName) {
this.bName = bName;
}
public String getbTitle() {
return bTitle;
}
public void setbTitle(String bTitle) {
this.bTitle = bTitle;
}
public String getbContent() {
return bContent;
}
public void setbContent(String bContent) {
this.bContent = bContent;
}
public Timestamp getbDate() {
return bDate;
}
public void setbDate(Timestamp bDate) {
this.bDate = bDate;
}
public int getbHit() {
return bHit;
}
public void setbHit(int bHit) {
this.bHit = bHit;
}
}
4. xml
<?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="com.javalec.spring_mvc_board_std.dao.IBDao">
<select id="list" resultType="com.javalec.spring_mvc_board_std.dto.BDto">
SELECT BID, BNAME, BTITLE, BCONTENT, BDATE, BHIT FROM MVC_BOARD ORDER BY BID
</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" resultType="com.javalec.spring_mvc_board_std.dto.BDto">
SELECT BID, BNAME, BTITLE, BCONTENT, BDATE, BHIT FROM MVC_BOARD WHERE BID = #{bId}
</select>
<update id="upHit">
UPDATE MVC_BOARD SET BHIT = BHIT+1 WHERE BID = #{bId}
</update>
<update id="modify">
UPDATE MVC_BOARD SET BNAME = #{bName}, BTITLE = #{bTitle}, BCONTENT = #{bContent} WHERE BID = #{bId}
</update>
<delete id="delete">
DELETE FROM MVC_BOARD WHERE BID = #{bId}
</delete>
</mapper>
5. Service
public interface BService {
public ArrayList<BDto> list();
public void write(HashMap<String, String> param);
public BDto contentView (HashMap<String, String> param);
public void upHit(HashMap<String, String> param);
public void modify(HashMap<String, String> param);
public void delete(HashMap<String, String> param);
}
// 파라미터값을 해시맵으로 받아오기 때문에 매개변수에 HashMap 타입의 변수를 작성
@Service("BService")
public class BServiceImpl implements BService{
@Autowired
private SqlSession sqlSession;
@Override
public ArrayList<BDto> list() {
IBDao dao = sqlSession.getMapper(IBDao.class);
ArrayList<BDto> list = dao.list();
return list;
}
@Override
public void write(HashMap<String, String> param) {
IBDao dao = sqlSession.getMapper(IBDao.class);
dao.write(param);
}
@Override
public BDto contentView(HashMap<String, String> param) {
IBDao dao = sqlSession.getMapper(IBDao.class);
dao.upHit(param);
BDto dto = dao.contentView(param);
return dto;
}
@Override
public void upHit(HashMap<String, String> param) {}
@Override
public void modify(HashMap<String, String> param) {
IBDao dao = sqlSession.getMapper(IBDao.class);
dao.modify(param);
}
@Override
public void delete(HashMap<String, String> param) {
IBDao dao = sqlSession.getMapper(IBDao.class);
dao.delete(param);
}
}
- Ajax로 데이터 받기 : 아래 코드를 제외한 코드는 위와 같음
1. write 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>
<script src="${pageContext.request.contextPath}/resources/js/jquery.js"></script>
<script type="text/javascript">
function fn_submit() {
// form 요소를 통째로 불러옴
var formData = $("#frm").serialize();
$.ajax({
type:"post"
, data:formData
, url:"write"
, success: function(data) {
alert("저장완료");
location.href="list";
}
, error: function(data) {
alert("오류발생");
}
});
}
</script>
</head>
<body>
<table width="500" border="1">
<!-- Ajax 구성 -->
<form id="frm">
<!-- <form method="post" action="write"> -->
<tr>
<td>이름</td>
<td>
<input type="text" name="bName" size="50" />
</td>
</tr>
<tr>
<td>제목</td>
<td>
<input type="text" name="bTitle" size="50" />
</td>
</tr>
<tr>
<td>내용</td>
<td>
<textarea rows="10" name="bContent"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" onclick="fn_submit()" value="입력" />
<!-- type이 submit이면 action경로로 이동해야하기 때문에 button으로 변경 -->
<!-- <input type="submit" value="입력" /> -->
<a href="list">목록보기</a>
</td>
</tr>
</form>
</table>
</body>
</html>
2. Controller
@Controller
public class BController {
@Autowired
private BService service;
@RequestMapping("/list")
public String list(Model model) {
ArrayList<BDto> list = service.list();
model.addAttribute("list", list);
return "list";
}
@RequestMapping("/write_view")
public String write_view() {
return "write_view";
}
@RequestMapping("/write")
public String write(@RequestParam HashMap<String, String> param) {
service.write(param);
return "redirect:list";
// ajax는 비동기 방식으로 별도로 처리되기 때문에 원래의 화면에 영향을 직접적으로 주지는 못함.
// 따라서 ajax가 success한 경우 페이지 이동하게 설정해야함.
}
@RequestMapping("/content_view") public String
content_view(@RequestParam HashMap<String, String> param, Model model) {
model.addAttribute("content_view", service.contentView(param));
return "content_view";
}
@RequestMapping("/modify")
public String modify(@RequestParam HashMap<String, String> param) {
service.modify(param);
return "redirect:list";
}
@RequestMapping("/delete")
public String delete(@RequestParam HashMap<String, String> param) {
service.delete(param);
return "redirect:list";
}
}
'java,jsp,spring > Spring' 카테고리의 다른 글
Spring security (0) | 2022.10.19 |
---|---|
Spring 트랜잭션 (0) | 2022.10.19 |
Spring MyBatis로 전환 (0) | 2022.10.14 |
MyBatis (0) | 2022.10.14 |
Spring Jdbc Template (0) | 2022.10.14 |