<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. java語言

    詳解MyBatis動態SQL標簽用法

    時間:2025-03-11 22:50:44 java語言 我要投稿
    • 相關推薦

    詳解MyBatis動態SQL標簽用法

      本文通過實例代碼給大家介紹了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、函數的使用

      <!-- 添加 -->

      < id="" parameterClass="RuleMaster">

      into rulemaster(

      name,

      createtime,

      updatetime,

      remark

      ) values (

      #name#,

      now(),

      now(),

      #remark#

      )

      <selectKey keyProperty="id" resultClass="long">

      select LAST_INSERT_ID()

      </selectKey>

      </>

      <!-- 更新 -->

      <id="update" parameterClass="RuleMaster">

      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代碼

      <!-- 更新學生信息 -->

      <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。類似于Java 的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標簽用法】相關文章:

    Spring+MyBatis數據讀寫分離的實例詳解10-09

    Bootstrap的php制作動態分頁標簽10-26

    Axure動態面板功能詳解10-12

    java list的用法詳解08-24

    HTML5的Audio標簽使用詳解08-09

    C語言for語句用法詳解10-30

    英語代詞的幾種用法詳解07-12

    C語言指針用法詳解08-21

    PHP中動態HTML的輸出技術詳解06-03

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人