一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - MyBatis動態SQL標簽用法實例詳解

MyBatis動態SQL標簽用法實例詳解

2020-11-29 11:56luojishan1 Java教程

本文通過實例代碼給大家介紹了MyBatis動態SQL標簽用法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧

1、動態SQL片段

通過SQL片段達到代碼復用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!-- 動態條件分頁查詢 -->
   <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字段                   

?
1
2
3
4
5
6
7
8
9
10
<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>

多次使用一個參數也是允許的      

?
1
2
3
4
5
6
7
8
9
10
<isNotEmpty prepend="and" property="_now">
            <![CDATA[
                  execplantime >= #_now#
               ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="_now">
            <![CDATA[
                  closeplantime <= #_now#
               ]]>
        </isNotEmpty>

      3、時間范圍查詢           

?
1
2
3
4
5
6
7
8
<isNotEmpty prepend="" property="_starttime">
             <isNotEmpty prepend="and" property="_endtime">
                 <![CDATA[
                 createtime >= #_starttime#
                 and createtime < #_endtime#
              ]]>
             </isNotEmpty>
         </isNotEmpty>

  4、in查詢                   

?
1
2
3
<isNotEmpty prepend="and" property="_in_state">
              state in ('$_in_state$')
          </isNotEmpty>

 5、like查詢                 

?
1
2
3
4
5
6
<isNotEmpty prepend="and" property="chnameone">
              (chnameone like '%$chnameone$%' or spellinitial like '%$chnameone$%')
          </isNotEmpty>
          <isNotEmpty prepend="and" property="chnametwo">
              chnametwo like '%$chnametwo$%'
          </isNotEmpty>

6、or條件                  

?
1
2
3
4
5
6
7
8
9
10
11
<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子查詢              

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<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、函數的使用 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!-- 添加 -->
  <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結果集  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!-- 動態條件分頁查詢 -->
   <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代碼 

?
1
2
3
4
5
6
7
8
9
10
11
12
<!-- 查詢學生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代碼 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- 更新學生信息 --> 
<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。類似于Java 的switch 語句,choose為switch,when為case,otherwise則為default。

         if是與(and)的關系,而choose是或(or)的關系。

         例如下面例子,同樣把所有可以限制的條件都寫上,方面使用。選擇條件順序,when標簽的從上到下的書寫順序:

Xml代碼 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!-- 查詢學生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標簽用法實例詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

原文鏈接:http://blog.csdn.net/luojishan1/article/details/74837875

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲日韩欧美一区二区在线 | 欧美激情综合 | 久久精品男人影院 | 性欧美xxxxxxx另类 | 关晓彤一级做a爰片性色毛片 | 三级黄色片在线观看 | 2012中文字幕中字视频 | 跪在老师脚下吃丝袜脚 | 果冻传媒mv在线观看入口免费 | 国产一卡二卡3卡4卡四卡在线 | 麻豆网站视频国产在线观看 | 免费看日本 | 国产高清露脸学生在线观看 | 国产精品久久久免费视频 | 2019午夜福合集高清完整版 | 欧美最猛性xxxxx69交 | 兽操人| 欧美国产在线视频 | 国产麻豆精品原创 | 13 sewang41| 欧美肥胖bb | 美女被的视频 | 四虎免费永久观看 | 色综合网亚洲精品久久 | 爽好舒服使劲添高h视频 | 手机在线观看国产精选免费 | 日韩精品成人免费观看 | 男人的天堂久久精品激情a 男人的天堂va | 天天摸天天碰色综合网 | 99视频福利 | 亚洲图片一区二区三区 | 欧美同性猛男野外gay免费 | 99热最新在线观看 | 18欧美同性videos可播放 | 黄瓜视频黄 | 国产91精品在线观看 | 强漂亮白丝女教师小说 | 艹艹逼 | 欧美老肥妇bbbw | 美女被狂揉下部羞羞动漫 | 湖南美女被黑人4p到惨叫 |