Dao에 들어있는 쿼리문을 간단하게 줄이기위해 MyBatis를 설치한다.
구글에 MyBatis 검색시 제일 위에나옵니다.(http://www.mybatis.org/mybatis-3/ko/getting-started.html)
현재 최신버전인 3.5.2버전을 다운받았습니다.
압축을 해제하면 파일 4개가 있는데 mybatis-3.5.2.jar파일만 프로젝트파일에 Web Content/WEB-INF/lib 폴더에 넣어줍니다
src 밑에 mappers라는 패키지를 만들고,
src 밑에 mybatis-config.xml파일을 생성했다.
mybatis-config.xml에 mybatis홈페이지에있는 환경설정을 입력해준다.
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <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> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
src밑에 db.properties파일을 생성했다.
driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@localhost:1521:XE username=java password=oracle
mappers 패키지에 BoardMapper.xml을 생성하였다.
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://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>
셀렉트 태그 안에는 DB의 셀렉트문을 넣어준다.
SELECT bo_no, bo_mem_id, bo_title, bo_content, bo_ip, bo_hit, bo_del_yn, bo_reg_date, bo_mod_date FROM board
mybatis를 사용한 Dao의 내용 줄임.
com.study밑에 mybatis라는 package를 만들어주고 그안에는 MybatisSqlSessionFactory 클래스를 생성하고 세션을 생성한다.
public class MybatisSqlSessionFactory {
private static SqlSessionFactory sqlSessionFactory; /* mybatis == ibatis(옛날것.) */ static { try { // classpath 경로에서 자원 가져오기 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); /* 자원위치 */ sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
/* 인터페이스는 new생성이 안됨 빌더를 이용한다. */
}catch(IOException e) { e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; }
}
생성한 세션을 service에도 넘겨준다.
private SqlSessionFactory sqlSessionFactory = MybatisSqlSessionFactory.getSqlSessionFactory(); @Override public List<BoardVO> getBoardList(BoardSearchVO searchVO) throws Exception { SqlSession session = sqlSessionFactory.openSession(); int tot_cnt = boardDao.getBoardCount(searchVO); searchVO.setting(tot_cnt); List<BoardVO> list = boardDao.getBoardList(session, searchVO); return list; }
Dao에 들어잇던 내용을 BoardMapper에 담은 내용이다.
Dao또한 깔끔해졌고 BoardMapper에서도 손쉽게 코딩이 가능하다.
<mapper namespace="com.study.board.mapper.BoardMapper">
<!-- 클래스명과 같다. namespace는 충돌방지를위해 자바의 package와 같으며 필수이다. -->
<!-- 셀렉트쿼리. 즉 CRUD태그가 가능하다. --> <select id="getBoardList" resultType="com.study.board.vo.BoardVO" <!-- 메소드명과 동일하다. -->
parameterType="com.study.board.vo.BoardSearchVO"><!--resultType에는 아래 select를 담을 VO위치를 넣어준다.-->
SELECT bo_no, bo_mem_id,123 bo_title, bo_content, bo_ip, bo_hit, bo_del_yn, bo_reg_date, bo_mod_date FROM board WHERE 1=1
<!-- 1=1은 true만들기 위함. WHERE절을 필수적으로 넣어주기위함(아래 웨어절 쿼리를 넣을때도 AND만 붙이면 되기때문에 간편) --> <if test="search_type != null and search_type != '' and search_word != null and search_word != ''">
<!-- 널체크는 필수.. -->
<choose> <when test="search_type == 'id'"> AND bo_mem_id LIKE '%' || #{search_word} || '%' </when> <when test="search_type == 'title'"> AND bo_title LIKE '%' || #{search_word} || '%' </when> <when test="search_type == 'content'"> AND bo_content LIKE '%' || #{search_word} || '%' </when>
</choose>
</if>
</select>
'IT공부 > SPRING' 카테고리의 다른 글
DI AOP MVC (0) | 2019.08.09 |
---|---|
스프링 4회차. (0) | 2019.08.07 |
BoardDao를 BoardMapper로 바꿔준다. (0) | 2019.08.05 |
mybatis에서 로그를 보기위해 Log4j 설치하기. (0) | 2019.08.05 |
스프링 2회차. (0) | 2019.08.05 |