詳解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="lt_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[
(shed='11' or ure=3)
]]>
</isEqual>
<isEqual prepend="and" property="_exeable" compareValue="Y">
<![CDATA[
shed in ('10','19') and ure<3
]]>
</isEqual>
7、where子查詢
<isNotEmpty prepend="" property="exprogramcode">
<isNotEmpty prepend="" property="isRational">
<isEqual prepend="and" property="isRational" compareValue="N">
code not in
(select entcode
from cms_ccm_programcontent t
where enttype='MZNRLX_MA'
and ramcode = #exprogramcode#)
</isEqual>
</isNotEmpty>
</isNotEmpty>
<select id="findByProgramcode" parameterClass="string" resultMap="cms_ccm_lt">
select *
from cms_ccm_material
where code in
(select entcode
from cms_ccm_programcontent t
where enttype = '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 vid,
imgurl,
_s imgfile,
ename vfilename,
name,
sid,
url,
name filename,
us status
</sql>
<sql id="sql_where">
From secfiles c, juji b, videoinfo a
where
= b. videoid
and = entid
and us = 0
order by asc, asc,num 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="Map">
<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!='' ">
ENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')
</if>
<if test="studentSex!= null and studentSex!= '' ">
AND ENT_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_ENT_NAME = #{studentName},
</if>
<if test="studentSex!=null and studentSex!='' ">
STUDENT_ENT_SEX = #{studentSex},
</if>
<if test="studentBirthday!=null ">
STUDENT_ENT_BIRTHDAY = #{studentBirthday},
</if>
<if test="classEntity!=null and sID!=null and sID!='' ">
STUDENT_S_ID = #{sID}
</if>
</trim>
WHERE STUDENT_ENT_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!='' ">
ENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')
</when>
<when test="studentSex!= null and studentSex!= '' ">
AND ENT_SEX = #{studentSex}
</when>
<when test="studentBirthday!=null">
AND ENT_BIRTHDAY = #{studentBirthday}
</when>
<when test="classEntity!=null and sID !=null and sID!='' ">
AND S_ID = #{sID}
</when>
<otherwise>
</otherwise>
</choose>
</where>
</select>
-
java的nio的使用示例分享
在jdk1.4中提出的技術,非阻塞IO,採用的是基於事件處理方式。傳統的io技術為阻塞的`,比如讀一個檔案,惹read方法是阻塞的,直到有資料讀入。歸納為:1、javaio為阻塞,在開啟一個io通道後,read將一直等待在埠一邊讀取位元組內容,如果沒有內容進來,read相當於阻塞掉了。2、在1...
-
java xp環境變數設定
本文例項為大家分享了java的環境變數設定方法,供大家參考,具體內容如下安裝好jdk後找到我的電腦(右鍵)——》屬性——》高階選項卡——》環境變數,裡面有管理員的使用者變數,有系統變數。選哪一個都無所謂,我選的是Administrator的使用者變數即管理員的.使用者變數,點選“新...
-
Java資料型別、變數和常量的基礎知識
Java是一門面向物件程式語言,不僅吸收了C++語言的各種優點,還摒棄了C++裡難以理解的多繼承、指標等概念,因此Java語言具有功能強大和簡單易用兩個特徵。那麼Java資料型別、變數和常量的基礎知識都有哪些?以下僅供參考!一、資料型別Java程式語言定義了八種基本的資料...
-
初學java程式設計入門必備的知識
基礎知識是新手學習一門新技術的必須掌握的,下面內容由小編為大家介紹初學java程式設計入門必備的知識,供大家參考!01、Java程式設計出現的背景1991年Sun公司的JamesGosling等人開始開發名稱為Oak的語言。希望用於控制嵌入在有線電視交換盒、PDA等的微處理器,但卻沒有取得...
相關文章
- Passage Eighteen (Strictly Ban smoking)英語閱讀理解
- Spring+MyBatis資料讀寫分離的例項詳解
- Box Jellyfish Eyes Aim At The Trees美文欣賞
- 詳解CSS3盒模型display:box
- Yii使用migrate命令執行sql語句方法
- 英語報紙解讀:Data may disrupt a peculiar business大綱
- 開機提示invalidsystemdisk解決方法
- MySQL關鍵字Distinct的詳細介紹
- SQL語句詳解 MySQL update的用法
- 英語報紙解讀:Data may disrupt a peculiar business