Mybatis--->動態SQL
阿新 • • 發佈:2020-08-20
- <if> 相當於java中的if,用於單分支的條件判斷
- <choose>、<when>、<otherwise> 相當於java中的switch...case...default,用於多分支的條件判斷,從多個選項中選擇一個
- <foreach> 迴圈,常和sql的in語句搭配使用
- <where>、<trim>、<set> 輔助元素,用於一些處理sql拼裝、特殊字元的問題
動態SQL會處理掉不需要的 ,(逗號)、AND 、OR 幫助我們完成資料庫的操作
常用的就這麼幾種
<where> 的使用
<select id="queryUser" parameterType="user" resultType="user"> SELECT * FROM user_tb <where> <if test="name!=null and name!=''"> name=#{name} </if> <if test="tel!=null and tel!=''"> AND tel=#{tel} </if> </where> </select>
<set>的使用
<select id="queryUser" parameterType="user" resultType="user"> SELECT * FROM user_tb <where> <if test="name!=null and name!=''"> name=#{name}</if> <if test="tel!=null and tel!=''"> AND tel=#{tel} </if> </where> </select>
<trim> 定製where、set的功能
<select id="queryUser" parameterType="user" resultType="user"> SELECT * FROM user_tb <trim prefix="WHERE" prefixOverrides="AND"> <if test="name!=null and name!=''"> name=#{name} </if> <if test="tel!=null and tel!=''"> AND tel=#{tel} </if> </trim> </select>
prefix會在這段字串之前加上指定的字首,如果裡面的<if>都不滿足條件,則不加字首。
prefixOverrides指定要去除的多餘的字串。
<set>同理
<choose>、<when>、<otherwise>的使用
類似於Switch Case
<select id="queryPwd" parameterType="user" resultType="string"> SELECT password FROM user_tb WHERE name=#{name} <choose> <when test="role=='admin'"> AND role='admin' </when> <when test="role=='teacher'"> AND role='teacher' </when> <when test="role=='student'"> AND role='student' </when> </choose> </select>
<foreach>的使用
<select id="queryUser" parameterType="list" resultType="user"> SELECT * FROM user_tb WHERE tel IN <foreach collection="list" index="index" item="item" open="(" separator="," close=")"> #{item}
</foreach> </select>
- collection 要迭代的資料型別,陣列=>array,List=>list,Map=>Map的key的資料型別。使用陣列容易出錯,儘量用List代替陣列。
- index 本次迭代的下標,指定一個臨時變量表示下標
- item 本次迭代的元素,指定一個臨時變量表示本次迭代的元素
- open 拼接這段字串時以什麼開頭
- close 拼接這段字串以什麼結尾
- separator 迭代的元素之間用什麼連線(分隔)
collection是必需的,其餘均可選。