MyBatis 動態SQL
阿新 • • 發佈:2020-07-18
MyBatis 動態SQL
簡介
動態 SQL是MyBatis強大特性之一。極大的簡化我們拼裝SQL的操作動態 。SQL 元素和使用 JSTL 或其他類似基於 XML 的文字處理器相似
應用
if/where/trim
prefix:在操作的SQL語句前加入某些內容
suffix:在操作的SQL語句後加入某些內容
prefixOverrides:把操作的SQL語句前的某些內容去掉
suffixOverrides:把操作的SQL語句後的某些內容去掉
<select id="getEmpsListByMoreTJ" resultType="<u>Emp</u>"> select <u>eid</u>,<u>ename</u>,age,sex,did from <u>emp</u> where 1=1 <if test="<u>eid</u> != null"> and <u>eid</u> = #{<u>eid</u>} </if> <if test="<u>ename</u> != null and <u>ename</u> != ''"> and <u>ename</u> = #{<u>ename</u>} </if> <if test="age != null"> and age = #{age} </if> <if test="sex == '男' or sex == '女'"> and sex = #{sex} </if> </select>
<select id="getEmpsListByMoreTJ" resultType="Emp"> <!-- select <u>eid</u>,<u>ename</u>,age,sex,did from <u>emp</u> --> <include refid="empColumns"></include> <trim prefix="where" suffixOverrides="and|or"> <if test="eid != null"> <u>eid</u> = #{<u>eid</u>} and </if> <if test="ename != null and ename != ''"> <u>ename</u> = #{<u>ename</u>} and </if> <if test="age != null"> age = #{age} or </if> <if test="sex == 1 or sex == 0"> sex = #{sex} </if> </trim> </select>
choose
<select id="getEmpsListByChoose" resultType="Emp"> select <u>eid</u>,<u>ename</u>,age,sex from <u>emp</u> where <choose> <when test="eid != null"> <u>eid</u> = #{<u>eid</u>} </when> <when test="ename != null and ename != ''"> <u>ename</u> = #{<u>ename</u>} </when> <when test="age != null"> age = #{age} </when> <otherwise> sex = #{sex} </otherwise> </choose> </select>
foreach
對一個數組或集合進行遍歷
collection:指定要遍歷的集合或陣列
item:設定別名
close:設定迴圈體的結束內容
open:設定迴圈體的開始內容
separator:設定每一次迴圈之間的分隔符
index:若遍歷的是list,index代表下標;若遍歷的是map,index代表鍵
<delete id="deleteByList">
delete from <u>emp</u> where <u>eid</u> in
<foreach collection="list" item="eid"
separator="," open="(" close=")">
#{<u>eid</u>}
</foreach>
</delete>
set
主要是用於解決修改操作中SQL語句中可能多出逗號的問題
<update id="updateEmpByConditionSet">
update tbl_employee
<set>
<if test="lastName!=null && lastName!=""">
last_name = #{lastName},
</if>
<if test="email!=null and email.trim()!=''">
email = #{email} ,
</if>
<if test=""m".equals(gender) or "f".equals(gender)">
gender = #{gender}
</if>
</set>
where id =#{id}
</update>
設定公共sql
<include refid="empColumns">:訪問某個SQL片段
<sql id="empColumns">select <u>eid</u>,<u>ename</u>,age,sex,did from
<u>emp</u> </sql>
<select id="getEmpByEid"
resultType="com.atguigu.bean.Emp">
<include refid="empColumns"></include> where <u>eid</u>
= #{<u>eid</u>}
</select>