dependency를 사용하지 않고 jar파일을 사용해보았다.
1. mvnrepository로 들어가 Mybatis검색 후 원하는 버전의 jar파일을 다운받는다.
Maven Repository: org.mybatis » mybatis » 3.4.6 (mvnrepository.com)
2. 자신의 웹프로젝트의 WEB-INF의 lib폴더에 등록!
정리한 순서
1. 설정xml을 만들어서 DB의 정보(driver, url, user, password)를 기입하고 mapper들의 위치도 등록한다.
2. Mapper(VO명Mapper.xml)XML을 만들어서 namespace(메모리상에서 이름을 가지고 구분할 수 있게)를 등록하고
각 쿼리문을 입력 이때 id는 쿼리 구분id, parameteType은 파라미터의 자료형(int, VO객체), resultType은 결과타입(List를 반환하는 쿼리일지라도 해당 List안의 들어갈 객체들의 자료형을 적어주면됨, List처리는 Mybatis가 담당!!)
그리고, PreparedStatement에서 ?를 #{}로 대신하여 쓰고 #{}안에는 파라미터명을 적어주면 된다.. (이때, 파라미터명은 파라미터가 1개일 때는 아무거나 적어도 상관이 없지만 구분하기 쉽게 해당 컬럼명으로 써주는게 좋은거같구, VO로 넘어오는 매개변수면 해당 테이블의 컬럼명을 써줘야한다!! 그리고 가장 중요한 VO와 테이블의 컬럼명들을 일치시켜주는게 제일 중요!!)
<?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">
<!-- 이름으로 메모리 영역을 구분하는 법 namespace 중복되면 안된다 -->
<mapper namespace="mybatis.config.Dept">
<!--
개발자는 Mybatis를 이용할 경우, 자바코드에서 쿼리문을 작성하지 않으며
수많은 jdbc관련 코드 또한 작성할 필요가 없고, 오직 쿼리문에만 집중하면 된다!
-->
<!--모든글 가져오기 -->
<!-- List는 자체적으로 만들어준뎨!!! -->
<select id="selectAll" resultType="emp.model.Dept">
select * from dept order by deptno asc
</select>
<!-- 한건 가져오기 -->
<!-- paramertType : 파라미터자료형 -->
<!-- ?대신 #{파라미터명} -->
<select id="select" parameterType="int" resultType="emp.model.Dept">
select * from dept where deptno=#{deptno}
</select>
<!-- 한건 등록 -->
<insert id="insert" parameterType="emp.model.Dept">
insert into deptno(dname, loc) values(#{dname}, #{loc})
</insert>
<!-- 한건 수정 -->
<!-- 반드시 VO와 컬럼명이 일치해야함!! -->
<update id="update" parameterType="emp.model.Dept" >
update dept set dname=#{dname}, loc=#{locg} where deptno=#{deptno}
</update>
<!-- 삭제하기 -->
<delete id="delete" parameterType="int">
delete from deptno where deptno=#{deptno}
</delete>
</mapper>
3. 지금까지 DAO를 JDBC에 따라 만들었지만 이제는 MyBatis의 코드기술을 따라만들어보았다.
Mapper를 사용하려면 SqlSession객체가 필요하다!! SqlSession객체는 SqlSessionFactory객체를 이용하여 .openSession()메서드를 이용한다. 그리고 Mapper에서 만든 쿼리문을 사용하려면 id가 필요한데 id앞에 해당 Mapper의 namespace의 이름이 필요!!
MybatisManager 클래스는 설정파일을 연결하여 SqlSessionFactory를 만들고 get메소드를 이용해 사용할 수 있게 해주는 클래스
/*
DB 접속 정보 및 매퍼들에 대한 위치가 지정된 마이바티스의 설정파일을 읽어보자!!
*/
package db;
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 MybatisManager {
private SqlSessionFactory sqlSessionFactory;
public MybatisManager() {
String resource = "mybatis/config/config.xml";
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(sqlSessionFactory);
} catch (IOException e) {
e.printStackTrace();
}
}
public SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
public static void main(String[] args) {
new MybatisManager();
}
}
/*
지금까지는 DAO의 코드 기술을 JDBC로 이용하였기 때문에 쿼리문보다 그 외의 코드가 더 장황했었다..
따라서 이번 DAO에서는 Mybatis 프레임웍을 도입하여, 코드를 보다 간결하게 작성해보겠다..
*/
package emp.model;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import db.MybatisManager;
public class DeptDAO {
//DAO에서 SQL문이 들어있는 xml을 호출하자!!! 이떄, 어떤 쿼리수행을 원하는 지를 구분하기 위해서는
// xml 태그에 부여한 id를 이용하면 된다!!!
//xml 태그를 호출하기 위해서는 mybatic의 SqlSession이 필요하고, 현재는 MybatisManager 클래스의 멤버로
//두었다...
MybatisManager manager = new MybatisManager();
SqlSessionFactory factory;
public DeptDAO() {
factory = manager.getSqlSessionFactory();
}
//모든 데이터가져오기
public List<Dept> selectAll() {
SqlSession session = factory.openSession();//쿼리문 수행객체 생성
return session.selectList("mybatis.config.Dept.selectAll");
}
}
실행결과
jsp파일을 만들어서 페이지로드 시 list들을 불러오도록 해보았다.
<%@page import="emp.model.Dept"%>
<%@page import="java.util.List"%>
<%@page import="emp.model.DeptDAO"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%
//DAO 이용하여 부서 정보 출력해보자!!!
DeptDAO dao = new DeptDAO();
List<Dept> list = dao.selectAll();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<style></style>
<script></script>
</head>
<body>
-----------------------------------------
<%for(int i=0;i<list.size();i++){ %>
<%Dept dept = list.get(i); %>
<br>
부서번호<%=dept.getDeptno()%><br>
부서명<%=dept.getDname()%><br>
부서위치<%=dept.getLoc()%><br>
-----------------------------------------
<%} %>
</body>
</html>
'프로그래밍 > JSP' 카테고리의 다른 글
JSP | session (0) | 2020.12.16 |
---|---|
JSP | 커넥션풀(Connection Pool) (0) | 2020.12.11 |
JSP - 페이징 이해 (0) | 2020.12.08 |
JSP - 이미지 업로드 (0) | 2020.12.04 |
JSP - JSP(Java Server Page)란? (0) | 2020.12.01 |