본문 바로가기

java,jsp,spring/Spring

Spring 프레임워크 표준형

표준형 : 변형 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="입력" /> -->
					&nbsp;&nbsp;
					<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