mybatis where標籤的使用
where後面跟查詢條件 簡化sql語句中判斷條件的書寫
<select id="user" parameterType="user" resultType="User">
select * from user
<where>
<if test="id!=null and id!=''">
id=#{id}
</if>
<if test="name!=null and name!=''">
and name=#{name}
</if>
<if test="gender!=null and gender!=''">
and gender=#{gender}
</if>
</where>
</select>
MyBatis會智能的把首個and 或 or 給忽略
如果id爲null 執行的sql語句爲 :
select * from user where name='xxx' and gender='xxx'
mybatis set標籤的使用
set標記是mybatis提供的一個智能標記,一般將其用在修改的sql中
<update id="userUpdate" parameterType="user">
update user
<set>
<if test="id!=null and id!=''">
id=#{id},
</if>
<if test="name!=null and name!=''">
name=#{name},
</if>
<if test="gender!=null and gender!=''">
gender=#{gender},
</if>
</set>
</update>
如上片段假如都不爲null的情況下執行SQL爲:
update user set id="xx",name='xxx',gender='xxx'
在如上sql中最後一個逗號會被set標記自動忽略不計
mybatis trim標籤的使用
trim標記是一個格式化的標記,可以完成set或者是where標記的功能
trim 屬性
prefix:前綴
suffix:後綴
prefixOverrides:忽略第一個指定分隔符
suffixOverrides:會略最後一個分隔符
1)
<select id="user" parameterType="user" resultType="User">
select * from user
<trim prefix="WHERE" prefixoverride="and | or">
<if test="id!=null and id!=''">
id=#{id}
</if>
<if test="name!=null and name!=''">
and name=#{name}
</if>
<if test="gender!=null and gender!=''">
and gender=#{gender}
</if>
</trim>
</select>
如果id爲null執行的sql語句爲:
select * from user where name="xxx" and gender="xxx"
2)
<update>
update user
<trim prefix="set" suffixoverride=",">
<if test="id!=null and id!=''">
id=#{id},
</if>
<if test="name!=null and name!=''">
name=#{name},
</if>
<if test="gender!=null and gender!=''">
gender=#{gender}
</if>
</trim>
</update>
如果gender爲null 執行的sql語句爲:
update user set id="xx",name="xx"
mybatis foreach標籤的使用
可以利用標籤實現sql條件的循環,可完成類似批量的sql
mybatis接受的參數分爲:
- 基本類型
- 對象
- List
- 數組
- Map
參數:
collection:要循環的集合
index:定一個名字,用於表示在迭代過程中,每次迭代到的位置
item:集合中每一個元素進行迭代時的別名
open:以什麼開始
close:以什麼結束
separator:循環內容之間以什麼分隔
1)批量添加
<insert id="add" parameterType="List">
insert into user(id,name,gender) values
<foreach collection="list" item="user" open="(" close=")" separator=",">
#{user.id},#{user.name},#{user.gender}
</foreach>
</insert>
若list有兩條數據 則執行的sql語句爲:
insert into user(id,name,gender) values ("1","張三","男"),("2","李四","女")
mapper接口:
void add(List users);
2)批量刪除
<delete id="deleteUser" parameterType="array">
delete from user where id in
<foreach collection="array" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
如果有兩條數據要刪除 執行的sql語句爲:
delete from user where id in(1,2)
mybatis sql標籤的使用
通過sql片段達到代碼重複利用
<sql id="sqlcont">
select count(*)
</sql>
<sql id="sqlselect">
select *
</sql>
<sql id="sqlcontent">
from user
</sql>
<select id="findUser" parameterType="user" resultType="User">
<include refid="sqlcont"/>
<include refid="sqlcontent"/>
</select>