mybatis
0.Dynamic Web Prject 생성
1.mybatis-x.x.x.jar 파일을 다운로드하고 webapp-WEB-INF-lib 폴더에 저장
2.ojdbc11.jar 파일을 다운로드하여 webapp-WEB-INF-lib 폴더에 저장
XML에서 SqlSessionFactory 빌드하기
=접속 정보를 매핑 할 데이터를 프로퍼티즈에 저장해 놓은 것
<?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>
driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:xe
username=nowon
password=1234
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
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);
<!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>
만약 수정기능을 만들고 싶다면 아래와 같이 보여지는 웹 페이지에서 기능을 구현할 창을 만들고 컨트롤러에서 데이터를 주고받고 수정할 로직을 설정한뒤 맵퍼에 위치를 추가하면 된다.
필터를 만들어두면 해당 로직마다 각각 따로따로 기능을 안 넣고 한번에 처리할 수 있어 코드가 좀 더 간결해진다.