본문 바로가기

IT공부/SPRING

MyBatis이용한 기존 쿼리문 변경.

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 폴더에 넣어줍니다


mybatis-3.5.2.zip


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