激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

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

MyBatis動態(tài)SQL標簽用法實例詳解

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

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

1、動態(tài)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
<!-- 動態(tài)條件分頁查詢 -->
   <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、數(shù)字范圍查詢

所傳參數(shù)名稱是捏造所得,非數(shù)據(jù)庫字段,比如_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>

多次使用一個參數(shù)也是允許的      

?
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、函數(shù)的使用 

?
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結(jié)果集  

?
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
<!-- 動態(tài)條件分頁查詢 -->
   <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>
   <!-- 返回沒有下載的記錄總數(shù) -->
   <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結(jié)束。當choose中所有when的條件都不滿則時,則執(zhí)行 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動態(tài)SQL標簽用法實例詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩成人一区二区 | 欧美日韩手机在线观看 | 成人电影毛片 | 国产乱乱视频 | 一级毛片在线观看视频 | 黄视频网站免费观看 | 黄色av网站在线观看 | 久久精品观看 | 九九精品视频免费 | 国产免费黄色 | 91色琪琪电影亚洲精品久久 | 在线观看va | 亚洲欧美日韩精品久久亚洲区 | 免费观看一区二区三区视频 | 夜夜夜精品视频 | 国产精品久久久久影院老司 | 午夜伦情电午夜伦情电影 | 国产精品视频2021 | 桥本有菜免费av一区二区三区 | 中文字幕精品在线观看 | 羞羞的视频免费在线观看 | 国产一级小视频 | 中文字幕欧美在线 | 精品麻豆cm视频在线看 | 九九热免费精品 | 成人男女啪啪免费观看网站四虎 | 欧美日韩爱爱视频 | 欧美日本在线视频 | 性爱视频在线免费 | 毛片韩国 | 亚洲国产一区二区三区 | 欧美一区二区三区久久久久久桃花 | 久久久久9999 | 玖玖精品视频在线 | 国产九九热 | 成人福利在线 | 黄色毛片a级 | 国产大片中文字幕在线观看 | xxxx69hd一hd72| 91成人在线免费 | 99精品视频在线免费观看 |