Hello World?

MyBatis 기본 문법 정리 본문

JAVA WEB/SPRING

MyBatis 기본 문법 정리

쮠이 2018. 6. 5. 14:50

요즘 MyBatis는 기본으로 쓰이는 프레임워크가 되었다


처음 iBatis 로 시작했을때엔, XML로 적용하면 prepend 가 있어서 쓰기 좋았었는데, 


MyBatis로 바뀌면서 사용법을 찾아 다녀야 해서 시간난 김에 정리 해본다



기본 CRUD 

 <?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="co.kr.kj.dao.MessageDao"> 

<!--  @mapper 애노테이션을 사용했기 때문에 DAO 클래스 패스를 모두 써준다 -->




<select id="list" parameterType="[parameterClass]" resultType="[resultClass]">

    /** co.kr.kj.dao.MessageDao.list */  <!--  디버깅을 위해 쿼리 아이디를 달아주는걸 습관으로 한다 -->

SELECT msg_key

      , nation_code

      , msg_type

      , message

    FROM  T_MESSAGE

  <where>  <!--  where 절 아래에 들어가는 AND은 알아서 잘라준다. 가독성은 ibatis 보다 떨어진다 -->

  <if test="msgKey != null and msgKey != ''">

  AND msg_key = #{msgKey}

  </if>

  <if test="msgType != null and msgType != ''">

  AND msg_type = #{msgType}

  </if>

  </where>

  ORDER BY msg_key 

</select>


 <insert id="insert" parameterType="MessageVo">

  /** co.kr.kj.dao.MessageDao.insert */

  INSERT INTO T_MESSAGE 

(

msg_key, 

nation_code, 

msg_type, 

message

)

VALUES

(

#{msg_key}, 

#{nation_code}, 

#{msg_type}, 

#{message}

)

    

        <selectKey keyProperty="id" resultType="String" order="AFTER">

               SELECT LAST_INSERT_ID()   <!-- MySQL 기준이다. 오라클은 시퀀스의 CurVal  을 반환해주면 된다 -->

        </selectKey>


</insert>



        <update id="update" parameterType="MessageVo">

/** co.kr.kj.dao.MessageDao.update */

UPDATE T_MESSAGE

   SET nation_code = #{nationCode}

     , msg_type = #{msgType}


     <if test="message != null and message != '' ">, message = #{message} </if>

                      <!-- update시 값을 가지고 넘어오는 데이터만 업데이트 하기 위해 필수값 이외엔 if 문을 달아준다 -->


WHERE msg_key = #{msgKey} 


</update>

 

 

<delete id="delete"  parameterType="MessageVo">

/** co.kr.kj.dao.MessageDao.delete*/

DELETE FROM T_MESSAGE

WHERE msg_key = #{msgKey} 

</delete>


        <!-- 프로시져 호출시 아래와 같이 사용 가능하다. 다른 방법도 있다 -->

        <resultMap id="callSpResult" type="hashmap"></resultMap>

        <select id="callProcedure" statementType="CALLABLE" parameterType="java.util.HashMap">

               CALL SP_TEST(   #{aa},  #{result, mode=OUT, jdbcType=VARCHAR, javaType=String, resultMap=callSpREsult}  )

        </select>



        <select id="listByIds" parameterType="MessageVo" resultType="MessageVo">

               /** co.kr.kj.dao.MessageDao.listByIds*

               select * from T_MESSAGE

               where ID IN

                    <foreach collection="idList" item="item" index="index" separator="," open="(" close=")" >

                          #{item}   <!-- 리스트 오브젝트를 루프를 돌면서 ( a, b,c ) 와 같은 문법으로 변경시켜 준다  -->

                    <foreach>

         </select


</mapper>