MyBatis 동적 SQL 태그 사용법 실례 상세 설명

1.동적 SQL 세 션
SQL 세 션 을 통 해 코드 재 활용

 <!--          --> 
    <sql id="sql_count"> 
        select count(*) 
    </sql> 
    <sql id="sql_select"> 
        select * 
    </sql> 
    <sql id="sql_where"> 
        from icp 
        <dynamic prepend="where"> 
            <isNotEmpty prepend="and" property="name"> 
                name like '%$name$%' 
            </isNotEmpty> 
            <isNotEmpty prepend="and" property="path"> 
                path like '%path$%' 
            </isNotEmpty> 
            <isNotEmpty prepend="and" property="area_id"> 
                area_id = #area_id# 
            </isNotEmpty> 
            <isNotEmpty prepend="and" property="hided"> 
                hided = #hided# 
            </isNotEmpty> 
        </dynamic> 
        <dynamic prepend=""> 
            <isNotNull property="_start"> 
                <isNotNull property="_size"> 
                    limit #_start#, #_size# 
                </isNotNull> 
            </isNotNull> 
        </dynamic> 
    </sql> 
    <select id="findByParamsForCount" parameterClass="map" resultClass="int"> 
        <include refid="sql_count"/> 
        <include refid="sql_where"/> 
    </select> 
    <select id="findByParams" parameterClass="map" resultMap="icp.result_base"> 
        <include refid="sql_select"/> 
        <include refid="sql_where"/> 
    </select>
2.디지털 범위 조회
전 달 된 매개 변수 이름 은 조작 소득,비 데이터베이스 필드,예 를 들 어img_size_ge、_img_size_lt 필드                   

 <isNotEmpty prepend="and" property="_img_size_ge"> 
                <![CDATA[ 
                img_size >= #_img_size_ge# 
            ]]> 
            </isNotEmpty> 
            <isNotEmpty prepend="and" property="_img_size_lt"> 
                <![CDATA[ 
                img_size < #_img_size_lt# 
            ]]> 
            </isNotEmpty>
매개 변 수 를 여러 번 사용 하 는 것 도 허용 된다.      

    <isNotEmpty prepend="and" property="_now"> 
                <![CDATA[ 
                      execplantime >= #_now# 
                   ]]> 
            </isNotEmpty> 
            <isNotEmpty prepend="and" property="_now"> 
                <![CDATA[ 
                      closeplantime <= #_now# 
                   ]]> 
            </isNotEmpty>
      3.시간 범위 조회           

   <isNotEmpty prepend="" property="_starttime"> 
                <isNotEmpty prepend="and" property="_endtime"> 
                    <![CDATA[ 
                    createtime >= #_starttime# 
                    and createtime < #_endtime# 
                 ]]> 
                </isNotEmpty> 
            </isNotEmpty> 
  4.in 조회                   

  <isNotEmpty prepend="and" property="_in_state"> 
                state in ('$_in_state$') 
            </isNotEmpty>
 5.like 조회                 

  <isNotEmpty prepend="and" property="chnameone"> 
                (chnameone like '%$chnameone$%' or spellinitial like '%$chnameone$%') 
            </isNotEmpty> 
            <isNotEmpty prepend="and" property="chnametwo"> 
                chnametwo like '%$chnametwo$%' 
            </isNotEmpty> 
6.or 조건                  

 <isEqual prepend="and" property="_exeable" compareValue="N"> 
                <![CDATA[ 
                (t.finished='11'  or t.failure=3) 
            ]]> 
            </isEqual>
 
            <isEqual prepend="and" property="_exeable" compareValue="Y"> 
                <![CDATA[ 
                t.finished in ('10','19') and t.failure<3 
            ]]> 
            </isEqual>
7.where 하위 조회              

 <isNotEmpty prepend="" property="exprogramcode"> 
                <isNotEmpty prepend="" property="isRational"> 
                    <isEqual prepend="and" property="isRational" compareValue="N"> 
                        code not in 
                        (select t.contentcode 
                        from cms_ccm_programcontent t 
                        where t.contenttype='MZNRLX_MA' 
                        and t.programcode = #exprogramcode#) 
                    </isEqual> 
                </isNotEmpty> 
            </isNotEmpty>
    <select id="findByProgramcode" parameterClass="string" resultMap="cms_ccm_material.result"> 
        select * 
        from cms_ccm_material 
        where code in 
        (select t.contentcode 
        from cms_ccm_programcontent t 
        where t.contenttype = 'MZNRLX_MA' 
        and programcode = #value#) 
        order by updatetime desc 
    </select>
    9.함수 의 사용 

  <!--    --> 
    <insert id="insert" parameterClass="RuleMaster"> 
        insert into rulemaster( 
        name, 
        createtime, 
        updatetime, 
        remark 
        ) values ( 
        #name#, 
        now(), 
        now(), 
        #remark# 
        ) 
        <selectKey keyProperty="id" resultClass="long"> 
            select LAST_INSERT_ID() 
        </selectKey> 
    </insert> 
    <!--    --> 
    <update id="update" parameterClass="RuleMaster"> 
        update rulemaster set 
        name = #name#, 
        updatetime = now(), 
        remark = #remark# 
        where id = #id# 
    </update>
10.map 결과 집  

 <!--          --> 
    <sql id="sql_count"> 
        select count(a.*) 
    </sql> 
    <sql id="sql_select"> 
        select a.id        vid, 
        a.img       imgurl, 
        a.img_s     imgfile, 
        b.vfilename vfilename, 
  b.name      name, 
        c.id        sid, 
        c.url       url, 
        c.filename  filename, 
        c.status    status 
    </sql> 
    <sql id="sql_where"> 
        From secfiles c, juji b, videoinfo a 
        where 
        a.id = b. videoid 
        and b.id = c.segmentid 
        and c.status = 0 
        order by a.id asc,b.id asc,c.sortnum asc 
        <dynamic prepend=""> 
            <isNotNull property="_start"> 
                <isNotNull property="_size"> 
                    limit #_start#, #_size# 
                </isNotNull> 
            </isNotNull> 
        </dynamic> 
    </sql> 
    <!--             --> 
    <select id="getUndownFilesForCount" parameterClass="map" resultClass="int"> 
        <include refid="sql_count"/> 
        <include refid="sql_where"/> 
    </select> 
    <!--           --> 
    <select id="getUndownFiles" parameterClass="map" resultClass="java.util.HashMap"> 
        <include refid="sql_select"/> 
        <include refid="sql_where"/> 
    </select>
11、trim
 trim 은 더 유연 한 곳 에 있 는 불필요 한 키워드 의 태그 로 where 와 set 의 효 과 를 실천 할 수 있 습 니 다.
 where 예 의 등가 trim 구문:
Xml 코드 

<!--     list,like  ,=   -->  
<select id="getStudentListWhere" parameterType="StudentEntity" resultMap="studentResultMap">  
  SELECT * from STUDENT_TBL ST  
  <trim prefix="WHERE" prefixOverrides="AND|OR">  
    <if test="studentName!=null and studentName!='' ">  
      ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')  
    </if>  
    <if test="studentSex!= null and studentSex!= '' ">  
      AND ST.STUDENT_SEX = #{studentSex}  
    </if>  
  </trim>  
</select> 
set 예 의 등가 trim 구문:
Xml 코드 

<!--        -->  
<update id="updateStudent" parameterType="StudentEntity">  
  UPDATE STUDENT_TBL  
  <trim prefix="SET" suffixOverrides=",">  
    <if test="studentName!=null and studentName!='' ">  
      STUDENT_TBL.STUDENT_NAME = #{studentName},  
    </if>  
    <if test="studentSex!=null and studentSex!='' ">  
      STUDENT_TBL.STUDENT_SEX = #{studentSex},  
    </if>  
    <if test="studentBirthday!=null ">  
      STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},  
    </if>  
    <if test="classEntity!=null and classEntity.classID!=null and classEntity.classID!='' ">  
      STUDENT_TBL.CLASS_ID = #{classEntity.classID}  
    </if>  
  </trim>  
  WHERE STUDENT_TBL.STUDENT_ID = #{studentID};  
</update>  
12、choose (when, otherwise)
         때때로 우 리 는 모든 조건 을 적용 하고 싶 지 않 고,단지 여러 옵션 중에서 하 나 를 선택 하고 싶 을 뿐이다.MyBatis 는 choose 요 소 를 제공 하여 when 의 조건 이 성립 되 는 지 순서대로 판단 하고 하나 가 성립 되면 choose 가 끝 납 니 다.choose 의 모든 when 조건 이 불만 이면 otherwise 의 sql 을 실행 합 니 다.자바 와 유사 한 switch 문 구 는 choose 는 switch 이 고 when 은 case 이 며,otherwise 는 default 입 니 다.
         if 는(and)와 의 관계 이 고 choose 는(or)와 의 관계 입 니 다.
         예 를 들 어 아래 의 예 와 같이 제한 할 수 있 는 모든 조건 을 적어 서 사용 합 니 다.조건 순 서 를 선택 하 십시오.when 라벨 의 위 에서 아래로 쓰기 순서:
Xml 코드 

<!--     list,like  、 =  、 =  、 =  ,  choose -->  
<select id="getStudentListChooseEntity" parameterType="StudentEntity" resultMap="studentResultMap">  
  SELECT * from STUDENT_TBL ST  
  <where>  
    <choose>  
      <when test="studentName!=null and studentName!='' ">  
          ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')  
      </when>  
      <when test="studentSex!= null and studentSex!= '' ">  
          AND ST.STUDENT_SEX = #{studentSex}  
      </when>  
      <when test="studentBirthday!=null">  
        AND ST.STUDENT_BIRTHDAY = #{studentBirthday}  
      </when>  
      <when test="classEntity!=null and classEntity.classID !=null and classEntity.classID!='' ">  
        AND ST.CLASS_ID = #{classEntity.classID}  
      </when>  
      <otherwise>  
      </otherwise>  
    </choose>  
  </where>  
</select> 
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 MyBatis 동적 SQL 태그 용법 의 실례 를 상세 하 게 설명 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기