
- MyBatis 제작 순서
1) www.mybatis.org 에 가서 라이브러리를 다운 받고 압축을 해제하고 프로젝트 안에 저장한다.
2) 테이블을 만들고 vo 클래스를 만든다.
3) context.xml을 만든다.
4) MyBatis의 핵심 환경설정인 config.xml을 문서를 보면서 제작한다.
5) config.xml을 작성시에 configuration에 맞는 DTD를 작성후 환경설정
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="">
<environment id="">
<transactionManager type="JDBC" />
<dataSource type="JNDI">
<property name="data_source"
value="java:comp/env/jdbc/myora" />
</dataSource>
</environment>
</environments>
</configuration>
6) mapper.xml을 작성해서 SQL문 문법에 맞게 입력한다.
이때 mapper에 해당하는 DTD를 작성한다.
<?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">
<insert id="add" parameterType="vo.BoardVO">
insert into board values(board_seq.nextVal, #{title}, #{writer}, #{content}, #{pwd}, 0, sysdate)
</insert>
</mapper>
7) config.xml에서 mapper를 연결한다.
8) config.xml을 관리하는 SqlSessionFactory 객체를 생성하는 클래스를 작성한다.
public class FactoryService {
private static SqlSessionFactory factory;
static {
try {
Reader reader = Resources.getResourceAsReader("config/config.xml");
// SqlSessionFactory를 생성해서 줘야 되기 때문에 Reader로 읽어온
// 환경설정파일을 기준으로 SqlSessionFactoryBuilder()를 사용해서 생성한 것.
factory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 클라이언트가 SqlSessionFactory를 받아서 SqlSession이란
// 클래스로 사용 할 수 있도록 SqlSessionFactory를 반환하는 메서드를 정의
public static SqlSessionFactory getFactory() {
return factory;
}
}
9) Dao에 SqlSessionFactory로부터 Sqlsession을 얻어서 해당 작업을 완료한다.
Sqlsession 생성 한 후 insert, delete, update, selectList:<List>, selectone:Object
ex) Dao에서 ss.insert("board.add". vo); 라면 ===> boardMapper.xml 안에
<mapper namespace="board">
<insert="add" parameterType="vo.BoardVO">
게시판 기능 mybatis로 만들기
1) 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="board">
<insert id="add" parameterType="vo.BoardVO">
insert into board values(board_seq.nextVal, #{title}, #{writer}, #{content}, #{pwd}, 0, sysdate)
</insert>
<select id="list" resultType="vo.BoardVO">
select no, title, writer, hit, regdate from board order by 1 desc
</select>
<update id="hit" parameterType="int">
update board set hit = hit + 1 where no = #{no}
</update>
<select id="detail" parameterType="int" resultType="vo.BoardVO">
select no, title, writer, content, pwd, hit, regdate from board where no = #{no}
</select>
<select id="pwdChk" parameterType="vo.BoardVO" resultType="int">
select count(*) as cnt from board where no = #{no} and pwd = #{pwd}
</select>
<delete id="del" parameterType="int">
delete board where no = #{no}
</delete>
<update id="update" parameterType="vo.BoardVO">
update board set title=#{title}, content=#{content} where no=#{no}
</update>
<!--
Dao에서 selectList()호출하면 무조건 List 저장해서 반환한다.
type="hashmap" List의 제네릭 자료형은 hashmap => List<Map<String,String>>
type="vo" List의 제네릭 자료형은 vo => List<VO>
-->
<resultMap type="hashmap" id="myMap">
<id column="no" property="no"/>
<result column="title" property="title"/>
</resultMap>
<select id="list2" resultMap="myMap">
select no, title, writer, hit, regdate from board order by 1 desc
</select>
</mapper>
2) config.xml
<mappers>
<mapper resource="mapper/boardMapper.xml"/>
</mappers>
3) BoardDao
package dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import service.FactoryService;
import vo.BoardVO;
public class BoardDao {
private static BoardDao dao;
public BoardDao() {
}
public synchronized static BoardDao getDao() {
if (dao == null)
dao = new BoardDao();
return dao;
}
// 게시물 추가
public void insert(BoardVO vo) {
SqlSession ss = FactoryService.getFactory().openSession(true);
// 호출
ss.insert("board.add", vo);
// 반드시 commit 해야한다.
// ss.commit(); openSession(true); 동일
ss.close(); // 세션 사용후 반드시 닫아줘야한다.
}
// 게시물 조회
public List<BoardVO> list(){
SqlSession ss = FactoryService.getFactory().openSession();
// mapper 인 member.xml에 네임스페이스와 id를 호출
List<BoardVO> list = ss.selectList("board.list");
ss.close();
return list;
}
// 게시물 조회
public List<Map<String, String>> list2(){
SqlSession ss = FactoryService.getFactory().openSession();
// mapper 인 member.xml에 네임스페이스와 id를 호출
List<Map<String, String>> list = ss.selectList("board.list2");
ss.close();
return list;
}
//조회수 증가 : update board set hit = hit + 1 where no=?
public void hit(int no){
SqlSession ss = FactoryService.getFactory().openSession(true);
ss.update("board.hit", no);
ss.close();
}
//상세정보 조회
public BoardVO info(int no){
SqlSession ss = FactoryService.getFactory().openSession();
BoardVO vo = ss.selectOne("board.detail", no);
ss.close();
return vo;
}
// 게시물 수정
public void update(BoardVO vo){
SqlSession ss = FactoryService.getFactory().openSession(true);
ss.update("board.update", vo);
ss.close();
}
//게시물 삭제
public void delete(int no){
SqlSession ss = FactoryService.getFactory().openSession(true);
ss.delete("board.del", no);
ss.close();
}
// 패스워드 확인
public int pwdCheck(BoardVO vo){
SqlSession ss = FactoryService.getFactory().openSession();
int cnt = ss.selectOne("board.pwdChk", vo);
ss.close();
return cnt;
}
}
'WEB > Study' 카테고리의 다른 글
| [0407][SPRING] 프레임워크, 스프링 IDE, Maven 설치 및 환경설정 (0) | 2021.04.07 |
|---|---|
| [0401][JSP] 로그인 세션 , 파일 업로드 구현 하기 (0) | 2021.04.01 |
| [0326][Web-JSP] Model 1 방식으로 만드는 기본 CRUD (0) | 2021.03.26 |
| [0325][Web - JSP] Connection Pool, DAO, DTO, Model 1 의 개념과 실습 (0) | 2021.03.25 |
| [0324] [Web - JSP] HTML5 : Form태그 요소, GET,POST , Parameter정리, JSP등 기본 문법 (0) | 2021.03.24 |