이론☆☆☆☆☆
직전의 JDBC, DBCP 프로젝트를 MyBatis 방식으로 교체
insertBoard(), listBoard(), detailBoard()를 수정
package bean;
import java.io.InputStream;
import java.util.List;
import mapper.BoardMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class BoardDao2 {
private static BoardDao2 dao = new BoardDao2();
public static BoardDao2 getInstance() {
return dao;
}
public SqlSessionFactory getSqlSessionFactory() {
//mybatis-config.xml => SqlSesstionFactory로 변환하는 작업
String resource = "resource/mybatis-config.xml";
InputStream in = null;
try {
in = Resources.getResourceAsStream(resource);//mybatis-config.xml를 인푸트스트림이랑 연결시켜줬음.
} catch (Exception e) {
e.printStackTrace();
}
return new SqlSessionFactoryBuilder().build(in);
}
public int insertBoard(Board board) {
SqlSession sqlSession = getSqlSessionFactory().openSession();
int re = -1;
try {
//re = sqlSession.insert("mapper.BoardMapper.insertBoard", board);
re = sqlSession.getMapper(BoardMapper.class).insertBoard(board);
if (re > 0) {
sqlSession.commit();
} else {
sqlSession.rollback();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(sqlSession != null){
sqlSession.close();
}
}
return re;
}
public List<Board> listBoard() {
SqlSession sqlSession = getSqlSessionFactory().openSession();
List<Board> list = null;
try {
//list = sqlSession.selectList("mapper.BoardMapper.listBoard");//mapStatement 호출
list = sqlSession.getMapper(BoardMapper.class).listBoard();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
return list;
}
public Board detailBoard(int seq){
SqlSession sqlSession = getSqlSessionFactory().openSession();
Board board = null;
try{
board = sqlSession.getMapper(BoardMapper.class).detailBoard(seq);
}catch(Exception e){
e.printStackTrace();
}finally{
if(sqlSession!=null){
sqlSession.close();
}
}
return board;
}
public int updateBoard(Board board){
SqlSession sqlSession = getSqlSessionFactory().openSession();
int re = -1;
try{
re = sqlSession.getMapper(BoardMapper.class).updateBoard(board);
if (re > 0) {
sqlSession.commit();
}else{
sqlSession.rollback();
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(sqlSession != null){
sqlSession.close();
}
}
return re;
}
}
<BoardDao2.java>
.
.
.
public SqlSessionFactory getSqlSessionFactory() {
//mybatis-config.xml => SqlSesstionFactory로 변환하는 작업
String resource = "resource/mybatis-config.xml";
InputStream in = null;
try {
in = Resources.getResourceAsStream(resource);//mybatis-config.xml를 인푸트스트림이랑 연결시켜줬음.
} catch (Exception e) {
e.printStackTrace();
}
return new SqlSessionFactoryBuilder().build(in);
}
.
.
.
<BoardDao2.java 내용>
이 부분이 MyBatis를 통해 DB와 Application을 연동해주는 부분이다.
한줄씩 이해하고 싶었는데, 자세히 설명된 블로그나 내용을 찾지못했다.
전체적으로 mybatis-config.xml을 객체화하여 Application에서 사용할 수 있도록 변환해주는 과정이라고
이해하면 되는 것 같다.
* mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="bean.Board" alias="Board"/>
<typeAlias type="member.Member" alias="Member"/>
<typeAlias type="blog.Author" alias="Author"/>
<typeAlias type="blog.Blog" alias="Blog"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="JNDI">
<!--아래 property를 통해 context.xml의 설정을 통해 DB와 접속-->
<property name="data_source" value="java:comp/env/jdbc/oracle"/>
</dataSource>
<!-- <dataSource type="POOLED">-->
<!-- <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>-->
<!-- <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>-->
<!-- <property name="username" value="c##kosta236_2"/>-->
<!-- <property name="password" value="1234"/>-->
<!-- </dataSource>-->
</environments>
</environments>
<mappers>
<mapper resource="mapper/Board.xml"/>
<mapper resource="mapper/Member.xml"/>
<mapper resource="mapper/Blog.xml"/>
</mappers>
</configuration>
<mybatis-config.xml>
environments : DB에 연결할 설정에 대한 정보 선언
- <environments default="{defaultName}"> : 여러개의 environment 중 기본으로 연결할 정보를 설정
environment 1개는 1개의 DB와 매칭
<environment id="{name}">으로 구분 가능 (defaultName = (id = "{name}") 중 하나
- <transactionManager type="JDBC"> : 트랜잭션 제어 방식 설정
JDBC : JDBC가 commit/rollback을 직접 처리하기 위해 사용(수동 commit)
MANAGED : 트랜잭션을 자동으로 관리(자동 commit)
- <dataSource type="POOLED"> : Connection Pool 사용 여부에 대한 설정 (DB 접속 방식)
UNPOOLED : Connection객체를 별도로 저장하지 않고 객체 호출 시 매번 생성하여 사용
POOLED : 최초 Connection객체를 생성할 때 그 정보를 pool 영역에 저장 및 이후 재사용
- properties : 연결 정보 입력 (driver, url(DB주소), username(DB username), password(DB userpassword))
- mappers : DB에 사용되는 쿼리문들들을 담은 mapper파일을 등록하는 부분
- typeAliases : 각 객체에 대한 별칭 설정
참고 : https://spring.tistory.com/3
아래에서 진행한 프로젝트의 mybatis-config.xml 셋팅은 위에 작성된 것과 같으며,
context.xml및 directory 구조는 아래와 같다.
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver"
maxActive="100" maxIdle="30" maxWait="10000"
name="jdbc/oracle" password="1234" type="javax.sql.DataSource"
url="jdbc:oracle:thin:@localhost:1521:XE"
username="c##kosta236_2"/>
</Context>
<context.xml>
나머지는 복습할 때 프로젝트 열어서 확인해보자. <BoardDao2.java>랑 내용이 많이 다르지 않다.
* bean, member, blog
'kosta > Servlet,JSP,JDBC,MyBatis' 카테고리의 다른 글
[MVC] Mybatis, JSP, JNDI를 기반으로 MVC 구현 (PW:0) (0) | 2022.04.21 |
---|---|
[MyBatis] 실습2 (0) | 2022.04.15 |
[JDBC] JDBC 이론 및 JDBC를 이용한 DB와 JSP 연동 1 (PW:0) (0) | 2022.04.14 |
[JSP,Servlet] 기초 (작성중) (0) | 2022.04.14 |
[Servlet, JSP] Intellij JSP, Servlet Setting 및 실습 (0) | 2022.04.12 |
댓글