mybatis JSP 웹 프로젝트에 적용하기

ezzange·2022년 9월 29일
0

web

목록 보기
1/3

mybatis
0.Dynamic Web Prject 생성

라이브러리 준비

1.mybatis-x.x.x.jar 파일을 다운로드하고 webapp-WEB-INF-lib 폴더에 저장
2.ojdbc11.jar 파일을 다운로드하여 webapp-WEB-INF-lib 폴더에 저장

XML에서 SqlSessionFactory 빌드하기

mybatis package에 생성한경우

mybatis/mybatis-config.xml 파일

=접속 정보를 매핑 할 데이터를 프로퍼티즈에 저장해 놓은 것

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <properties resource="mybatis/dataSource.properties"/>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

mybatis/dataSource.properties 파일

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:xe
username=nowon
password=1234

mybatis/MybatisConfig.java 파일

package mybatis;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisConfig {
	
	private static SqlSessionFactory sqlSessionFactory;
	//SqlSessionFactory 싱글톤으로 구성하였습니다.
	public static SqlSessionFactory getInstance() {
		if(sqlSessionFactory==null)new MybatisConfig();
		return sqlSessionFactory;
	}
	
	private MybatisConfig() {
		String resource = "mybatis/mybatis-config.xml";
		InputStream inputStream=null;
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		sqlSessionFactory =
				  new SqlSessionFactoryBuilder().build(inputStream);
	}

}  

4.SqlSessionFactoryBuilder
5.SqlSessionFactory
6.SqlSession

XML 없이 SqlSessionFactory 빌드하기

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory =
  new JdbcTransactionFactory();
Environment environment =
  new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory =
  new SqlSessionFactoryBuilder().build(configuration);

매핑된 SQL 문 탐색

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>




수정, 취소 버튼 을 누르면 화면이 바뀌는 기능

<%@page import="nowon.domain.dto.MemoDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="text/javascript">
	//jsp파일이 로딩되면 실행하는 함수
	<!-- 이름있는 펑션 외부로 -->
	$(function(){
		$(".edit").hide();	
		$(".btn-edit").click(clickedBtnEdit);
		$(".btn-cancel").click(function(){
			var etr=$(this).parents(".edit");
			etr.prev().show();
			etr.hide();
		});
	});
			<!-- 이름 없는 펑션 괄호 내부안으로 -->
	//////////////////////////////
	function clickedBtnEdit(){
		<!-- 여기서 this는 클릭 이벤트가 발생한 아이라는뜻 -->
		var dtr=$(this).parents(".default")
		dtr.next().show();
		dtr.hide();
	}
</script>
</head>
<body>

	<a href="<%=request.getContextPath()%>">HOME</a>
	<h1>메모 리스트 페이지 입니다.</h1>
	<hr>
	<a href="./page">글쓰기 상대경로(./page: 현재보여지는 페이지경로 기준부터url표시)</a><br>
	<a href="<%=request.getContextPath()%>/memo/page">글쓰기 절대경로(ContextPath)부터 표시</a>
	
	
	<table border="1">
	<%
	List<MemoDTO> list=(List<MemoDTO>)request.getAttribute("list");
	for(MemoDTO dto:list){
	%>
		<tr class="default">
			<td><%=dto.getNo() %></td>
			<td><%=dto.getContent() %></td>
			<td><%=dto.getWriter() %></td>
			<td><%=dto.getCreated_date() %></td>
			<td>
				<a href="delete?no=<%=dto.getNo() %>">삭제</a>
						<!-- delete ? 이름 벨류 -->
						<!-- delete ? 이름 벨류 -->
				<button type="button" class="btn-edit" >수정</button>
		</td>
		</tr>
		<tr class="edit">
			<td><%=dto.getNo() %></td>
			<td>
				<input type="text" name="content" value="<%=dto.getContent()%>" >
			</td>
			<td><%=dto.getWriter() %></td>
			<td><%=dto.getCreated_date() %></td>
			<td>
			<button type="button" class="btn-edit-done" >수정완료</button>
			<button type="button" class="btn-cancel" >취소</button>
			</td>
		
		</tr>
	<% 
	}
	%>
	</table>
</body>
</html>

업데이트 설정

만약 수정기능을 만들고 싶다면 아래와 같이 보여지는 웹 페이지에서 기능을 구현할 창을 만들고 컨트롤러에서 데이터를 주고받고 수정할 로직을 설정한뒤 맵퍼에 위치를 추가하면 된다.

MemoController.java

list.jsp

MemoMapper.xml

업데이트 적용 결과

필터만들기

필터를 만들어두면 해당 로직마다 각각 따로따로 기능을 안 넣고 한번에 처리할 수 있어 코드가 좀 더 간결해진다.

EncodingFilter 필터생성

0개의 댓글