본문 바로가기
코딩/수업 정리

21.02.04 [052] Thu

by 6^6 2021. 2. 4.
728x90

SPRING

 

xml vs json(요즘엔 거의 다 json만 쓴다.)

→다음 ajax(비동기통신)

→그다음 RESTful(대소문자구분)

 

스프링 시큐리티.

 

 

====시작=====

마이바티스 - 사용법 4가지 방법

 

 

 

@Repository는 @Conference의 자식

 

mybatis 활용 첫번째 방법 

1. interface IBDao를 XML namespac에 매핑 <mapper namespace="edu.bit.ex.board1.IBDao"> 
2. sqlSession.getMapper(IBDao.class)를 이용.

xml섹션에서 getmapper 가져오는것.

 

root-context.xml에 my batis설정

mapper의 경로 설정 무조건 해줘야함

[context-root.xml]
<!-- 1.번방법을 위하여 mapperLocations 을 추가 함 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="mapperLocations" value="classpath:/edu/bit/board/mapper/*.xml" />
	</bean>

↓1번 방법 코드 보기

더보기
[BController1.java]
package edu.bit.board.one;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;


/*
1.interface IBDao를 XML namespac에 매핑 <mapper namespace="edu.bit.ex.board1.IBDao"> 
2.sqlSession.getMapper(IBDao.class)를 이용.
* 
* 
* */
@Controller
public class BController1 {

	@Inject
	BService1 bservice;
	
	@RequestMapping("/list1")
	public String list(Model model) throws Exception{
		System.out.println("list1()");	
		
		model.addAttribute("list", bservice.selectBoardList());			
		return "list";		
	}
	
	/*
     *이렇게 컨트롤단에 장황하게 다 쓰면안됨
	 * @RequestMapping("/write_view") public String write_view(Model model) {
	 * System.out.println("write_view()");
	 * 
	 * return "write_view"; }
	 * 
	 * @RequestMapping("/content_view") public String
	 * content_view(HttpServletRequest request, Model model){
	 * System.out.println("content_view()");
	 * 
	 * String bid = request.getParameter("bId");
	 * 
	 * IBDao dao = sqlSession.getMapper(IBDao.class);
	 * model.addAttribute("content_view", dao.ContentDao(bid));
	 * 
	 * 
	 * return "content_view"; }
	 * 
	 * @RequestMapping("/delete") public String delete(HttpServletRequest request,
	 * Model model){ System.out.println("delete()");
	 * 
	 * String bId = request.getParameter("bId");
	 * 
	 * IBDao dao = sqlSession.getMapper(IBDao.class);
	 * 
	 * int num = Integer.parseInt(bId);
	 * 
	 * dao.deleteDao(num);
	 * 
	 * 
	 * return "redirect:list"; }
	 * 
	 * @RequestMapping(value="/modify", method=RequestMethod.POST ) public String
	 * modify(BDto bDto, Model model){ System.out.println("modify()");
	 * 
	 * 
	 * IBDao dao = sqlSession.getMapper(IBDao.class); dao.updateDao(bDto);
	 * 
	 * return "redirect:list"; }
	 */
}
[IBDao.java]
package edu.bit.board.one;

import java.util.List;

import edu.bit.board.vo.BoardVO;

public interface IBDao {
	
	public List<BoardVO> listDao(); // BService1.java에서 얘 호출
/*	public BDto ContentDao(String bId);
	public void deleteDao(int bId);
	
	public void modifyDao(@Param("bId") int bId,
			@Param("bName") String bName,
			@Param("bTitle") String bTitle,
			@Param("bContent") String bContent);
	
	public void updateDao(BDto bdto);*/
}
[board1.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.bit.board.one.IBDao">
	<select id="listDao" resultType="edu.bit.board.vo.BoardVO">
		<![CDATA[
			select bId, bName, bTitle, bContent, bDate, bHit, bGroup, bStep, bIndent from mvc_board order by bGroup desc, bStep asc
		]]>
	</select>
	
	<!-- <select id="ContentDao" resultType="edu.bit.ex.board1.BDto">
		select * from mvc_board where bId = #{bId}	
	</select>		

	<delete id="deleteDao">
		delete from mvc_board where bId = #{bId}
	</delete>
	
	<update id="modifyDao">
		update mvc_board set bName = #{bName}, bTitle = #{bTitle}, bContent = #{bContent} where bId = #{bId}
	</update>
	
	<update id="updateDao" parameterType="edu.bit.ex.board1.BDto">
		update mvc_board set bName = #{bName}, bTitle = #{bTitle}, bContent = #{bContent} where bId = #{bId}
	</update> -->
	
</mapper>
	<!-- 1.번방법을 위하여 mapperLocations 을 추가 함 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="mapperLocations" value="classpath:/edu/bit/board/mapper/*.xml" />
	</bean>
	<!-- 1번 방식 사용을 위한 sqlSession --><!-- BService1.java에서 끌고오는 부분 -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean>
[BService1.java]
package edu.bit.board.one;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession; //얘가 my batis
import org.springframework.stereotype.Service;

import edu.bit.board.vo.BoardVO;


@Service // IBDao 구현한걸 끌고와야함
public class BService1 {
	
	@Inject
	SqlSession sqlSession;//얘가 my batis
	//root-context.xml에서< bean id="sqlSession"~~/>부분(=ioc컨테이너) 가져오는것 
	//이걸쓰면 받아온다.
	
    public List<BoardVO> selectBoardList()throws Exception {
    	IBDao dao = sqlSession.getMapper(IBDao.class);
		return dao.listDao(); //IBDao.java에 있는거 호출
    }

}
[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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<table width="500" cellpadding="0" cellspacing="0" border="1">
		<tr>
			<td>번호</td>
			<td>이름</td>
			<td>제목</td>
			<td>날짜</td>
			<td>히트</td>
		</tr>
		<c:forEach items="${list}" var="dto">
		<tr>
			<td>${dto.bId}</td>
			<td>${dto.bName}</td>
			<td>
				<c:forEach begin="1" end="${dto.bIndent}">-</c:forEach>
				<a href="content_view?bId=${dto.bId}">${dto.bTitle}</a></td>
			<td>${dto.bDate}</td>
			<td>${dto.bHit}</td>
		</tr>
		</c:forEach>
		<tr>
			<td colspan="5"> <a href="write_view">글작성</a> </td>
		</tr>
	</table>
</body>
</html>

 

mybatis 활용 두번째 방법 

2. mybatis함수 활용

1. interface는 필요가 없음 
2. sqlSession에서 제공하는 함수(selectList,selectOne)를 이용함
3. 쿼리구현을 위한 XML이 필요. 해당 namespace는 개발자가 정함

 

 

 

↓2번 방법 코드 보기

더보기

mybatis3가 나왔음에도 불구하고 실무에서 많이 보임

package edu.bit.board.two;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;


/*
1. interface는 필요가 없음 
2. sqlSession에서 제공하는 함수(selectList,selectOne)를 이용함
3. 쿼리구현을 위한 XML이 필요. 해당 namespace는 개발자가 정함
* 
* */


@Controller
public class BController2 {

	@Inject
	BService2 bservice;
	
	@RequestMapping("/list2")
	public String list(Model model) throws Exception{
		System.out.println("list2()");	
		
		model.addAttribute("list", bservice.selectBoardList());			
		return "list";		
	}
	
	/*
	 * @RequestMapping("/write_view") public String write_view(Model model) {
	 * System.out.println("write_view()");
	 * 
	 * return "write_view"; }
	 * 
	 * @RequestMapping("/content_view") public String
	 * content_view(HttpServletRequest request, Model model){
	 * System.out.println("content_view()");
	 * 
	 * String bid = request.getParameter("bId");
	 * 
	 * IBDao dao = sqlSession.getMapper(IBDao.class);
	 * model.addAttribute("content_view", dao.ContentDao(bid));
	 * 
	 * 
	 * return "content_view"; }
	 * 
	 * @RequestMapping("/delete") public String delete(HttpServletRequest request,
	 * Model model){ System.out.println("delete()");
	 * 
	 * String bId = request.getParameter("bId");
	 * 
	 * IBDao dao = sqlSession.getMapper(IBDao.class);
	 * 
	 * int num = Integer.parseInt(bId);
	 * 
	 * dao.deleteDao(num);
	 * 
	 * 
	 * return "redirect:list"; }
	 * 
	 * @RequestMapping(value="/modify", method=RequestMethod.POST ) public String
	 * modify(BDto bDto, Model model){ System.out.println("modify()");
	 * 
	 * 
	 * IBDao dao = sqlSession.getMapper(IBDao.class); dao.updateDao(bDto);
	 * 
	 * return "redirect:list"; }
	 */
}
[board2.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="board"><!-- mapper이름을 개발자가 정하는 것!! 이러면 board.selectBoardList 인것임 -Bservice2에 연결-->
	<select id="selectBoardList" resultType="edu.bit.board.vo.BoardVO">
		select bId, bName, bTitle, bContent, bDate, bHit, bGroup, bStep, bIndent from mvc_board order by bGroup desc, bStep asc	
	</select>
	
</mapper>
[BService2.java]
package edu.bit.board.two;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Service;

import edu.bit.board.vo.BoardVO;


@Service
public class BService2 {
	
	@Inject
	SqlSession sqlSession;
	
    public List<BoardVO> selectBoardList()throws Exception {
		return sqlSession.selectList("board.selectBoardList");
    }
}

 

 

mybatis 활용 세번째 방법 

매퍼 인터페이스를 정의하는 방식

: 인터페이스 통해서 매퍼를 가져와서 인터페이스를 정의하는 방식

↓3번 방법 코드 보기

더보기
[root-context.xml]
<!-- 1.번방법을 위하여 mapperLocations 을 추가 함 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<!-- <property name="mapperLocations" value="classpath:/edu/bit/board/mapper/*.xml" /> 
		세번째 방법에선 이부분 필요없음-->
	</bean>
    ....
    	<mybatis-spring:scan
		base-package="edu.bit.board.mapper" /> 
       //이부분만 필요함!
    

 

 

mybatis 활용 네번째 방법 

세번째 방법이랑 같이 쓸 수 있음

↓4번 방법 코드 보기

더보기
[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.bit.board.mapper.BoardMapper">
	
<!-- 
전부 필요XX
	<select id="getList" resultType="edu.bit.board.vo.BoardVO">
	<![CDATA[
		select bId, bName, bTitle, bContent, bDate, bHit, bGroup, bStep, bIndent from mvc_board order by bGroup desc, bStep asc
	]]>
	</select>
	
	<select id="read" resultType="edu.bit.board.vo.BoardVO">
	<![CDATA[
		select * from mvc_board where bId = #{bId}
	]]>
	</select>
	
	<update id="updateShape" >
	<![CDATA[
		update mvc_board set bStep = bStep + 1 where bGroup = #{bGroup}
	]]>
	</update>
	
	<insert id="insertReply" >
	<![CDATA[
		insert into mvc_board (bId, bName, bTitle, bContent, bGroup, bStep, bIndent) values (mvc_board_seq.nextval, #{bName}, #{bTitle},#{bContent}, #{bGroup}, #{bStep}+1, #{bIndent}+1)
	]]>
	</insert>
	
	<insert id="insertBoard" >
	<![CDATA[
		insert into mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent) values (mvc_board_seq.nextval, #{bName}, #{bTitle}, #{bContent}, 0, mvc_board_seq.currval, 0, 0)
	]]>
	</insert>
	
	<delete id="delete" >
	<![CDATA[
		delete from mvc_board where bId = #{bId}
	]]>
	</delete> -->
	
	<select id="getListWithPaging" resultType="edu.bit.board.vo.BoardVO">
		<![CDATA[
			SELECT * FROM (
			     SELECT ROWNUM AS RNUM, A.* FROM (
			        		SELECT
			                    *
			                FROM
			                    mvc_board 
			                order by bGroup desc, bStep asc   
			    ) A WHERE ROWNUM <= #{pageNum} * #{amount}
			) WHERE RNUM > (#{pageNum}-1) * #{amount}
		]]>
	</select>
	
	<select id="getTotalCount" resultType="int">
		select count(*)	from mvc_board
	</select>
</mapper>
[BaordMapper.java]
package edu.bit.board.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Select;

import edu.bit.board.page.Criteria;
import edu.bit.board.vo.BoardVO;

public interface BoardMapper {

//이렇게 쿼리문을 바로 갖다넣을 수 있다.
	@Select("select * from mvc_board order by bGroup desc , bStep asc")
	public List<BoardVO> getList();
   	}

 

 

데이터베이스 모델링

ch08_데이터베이스 설계-한빛마트.pptx
6.60MB

 

 

개체(엔티티) : 회원

회원 개체의 키 속성 : 회원아이디

 

 

 

오늘의 문제

과정참고 ↓

1.  DVD를 대여하기 위해서는 회원 가입을 해야 한다. 회원 가입 시에는 회원에 대한 이름, 주
   민번호, 전화번호, 핸드폰번호, 이메일, 우편번호, 주소, 등록일 등을 기록해 둔다. 가입자는 
   관심 장르를 설정하여 신 프로 입고 시 이메일을 발송한다.
2.  DVD에 대한 정보는 영화제목, 제작사, 주연배우, 감독, 영화출시일 등의 상세 정보를 관리
   해야 하며 각 DVD에 대한 파손 여부와 대여 여부 등의 상태정보도 관리되어야 한다.
3.  DVD는 장르로 구분해서 체계적으로 관리된다.
4.  대여는 신 프로의 경우에는 대여일이 기본 1일이며 구 프로인 경우에는 2일이 기본 대여일
    이며 대여료는 신 프로의 경우에는 2000원이며 구 프로인 경우에는 대여료가 1000원이다.
5.  미납회원 관리와 함께 연체되었을 경우 하루에 500원 연체료가 누적된다. DVD가 파손되
    거나 망실된 경우 해당 회원은 DVD 가격을 변상해야 한다. 
6.  회원이 DVD를 대여할 경우 대여 1회당 1점씩의 포인트 점수를 부여하고 포인트 점수가 
    10점이 되면 무료로 DVD 하나를 대여할 수 있도록 포인트제를 운영하고자 한다.
7.  DVD 대여점 운영자는 금전상의 관리를 위해서 일별, 월별 매출액과 DVD가 대여된 횟수를 
    알고 싶어 한다.

 

 

 

 

1.마이바티스 사용 4가지 방법에 대하여 설명하시오.

첫번째 방법

1. interface IBDao를 XML namespac에 매핑 <mapper namespace="edu.bit.ex.board1.IBDao">

2. sqlSession.getMapper(IBDao.class)를 이용.

 

 

두번째 방법

1. interface는 필요가 없음 
2. sqlSession에서 제공하는 함수(selectList,selectOne)를 이용함
3. 쿼리구현을 위한 XML이 필요. 해당 namespace는 개발자가 정함

 

세번째 방법

인터페이스 통해서 매퍼를 가져와서 인터페이스를 정의하는 방식

 

네번째 방법

mapper에 @Select 어노테이션으로 쿼리문을 바로 넣음

세번째 방법과 같이 쓸 수 있다.

 


2.ajax+json으로 list를 뿌리시오.

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
 
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<style type="text/css">
table {
	border-collapse: collapse;
}

td {
	border: #ABF200 solid;
}
</style>


<!-- <script
	src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> -->
<script type="text/javascript">
	
$(document).ready(function() {

	$("#con").hide()

	$("#b").click(function() {
	
	      $.ajax({

	         url : "list2",

	         dataType : "json",

	         cache : false, 

				success : function(data) {

					$("#con").html("");
					$("<table/>").css({

						border : "solid 3px",
					}).appendTo("#con");
					$("<tr>" , {
					 html : "<td>" + "사원번호" + "</td>"+  
	                  "<td>" + "사원번호" + "</td>"+
	                  "<td>" + "사원직급" + "</td>"+
	                  "<td>" + "매니저" + "</td>"+            
	                  "<td>" + "입사일" + "</td>"+
	                  "<td>" + "급여" + "</td>"+  
	                  "<td>" + "커미션" + "</td>"+  
	                  "<td>" + "부서" + "</td>"
					}).appendTo("table") 

					$.each(data.empVO, function(index, empVO) { 
							var items = [];

							items.push("<td>" + empVO.empno + "</td>"); // 여기에 id pw addr tel의 값을 배열에 넣은뒤

							items.push("<td>" + empVO.ename + "</td>");

							items.push("<td>" + empVO.job + "</td>");

							items.push("<td>" + empVO.mgr + "</td>");

							items.push("<td>" + empVO.hiredate + "</td>");
							items.push("<td>" + empVO.sal + "</td>");
							items.push("<td>" + empVO.comm + "</td>");
							
							$("<tr/>", {

								html : items // 티알에 붙임,

							}).appendTo("table"); // 그리고 그 tr을 테이블에 붙임

						});//each끝

					}

				});

				

				$("#con").fadeToggle("slow")

});

});




	</script>


<!--  	var htmls = "";

		$("#list-table").html("");

		$(
				"<tr>",
				{
					html : "<td>" + "사원번호" + "</td>" + // 컬럼명들
					"<td>" + "사원이름" + "</td>" + "<td>" + "사원직급" + "</td>"
							+ "<td>" + "매니저" + "</td>" + "<td>" + "입사일"
							+ "</td>" + "<td>" + "급여" + "</td>" + "<td>"
							+ "커미션" + "</td>" + "<td>" + "부서" + "</td>"
				}).appendTo("#list-table") // 이것을 테이블에붙임

		//왜? 
		//★★★위에는 웹브라우저에서 해석 따라서 그대로 보냄. 하지만 얘(c:,el($))는 서버쪽 언어이다.
		//따라서 전부다 html로 다 다 바꿔준다.★★★
		<c:forEach var="empVO" items="${ list2}" >
		htmls += '<tr>';
		htmls += '<td>' + '${empVO.empno}' + '</td>';
		htmls += '<td>' + '${empVO.ename}' + '</td>';
		htmls += '<td>' + '${empVO.job}' + '</td>';
		htmls += '<td>' + '${empVO.mgr}' + '</td>';
		htmls += '<td>' + '${empVO.hiredate}' + '</td>';
		htmls += '<td>' + '${empVO.sal}' + '</td>';
		htmls += '<td>' + '${empVO.comm}' + '</td>';
		htmls += '/<td>';

		</c:forEach>

		$("#list-table").append(htmls);

	}//end   getList()
</script>

<script>
	$(document).ready(function() {
		makeList();
	});
</script>-->

</head>
<body>
<body>
	<input type="button" id="b" value="리스트">

	<div id="con"></div>

</body>
</body>
</html>

 

 

 

728x90

'코딩 > 수업 정리' 카테고리의 다른 글

21.02.08 [054] Mon  (0) 2021.02.08
21.02.05 [053] Fri  (0) 2021.02.05
21.02.03 [051] Wed  (0) 2021.02.03
21.02.02 [050] Tue  (0) 2021.02.02
21.02.01 [049] Mon  (0) 2021.02.01

댓글