使用mybatis的時候常常會用到一些sql ,記錄以下:java
1. foreach的使用sql
foreach元素的屬性主要有 item,index,collection,open,separator,close。數組
item表示集合中每個元素進行迭代時的別名,mybatis
index指 定一個名字,用於表示在迭代過程當中,每次迭代到的位置,app
open表示該語句以什麼開始,函數
separator表示在每次進行迭代之間以什麼符號做爲分隔 符,測試
close表示以什麼結束。code
1.單參數List的類型:blog
Java接口: 接口
List<Map<String, Object>> listRemarkCountByResumeIds(@Param("resumeIds") List<String> resumeIds);
mapper文件中:
<select id="listRemarkCountByResumeIds" parameterType="map" resultType="map"> SELECT COUNT(1) count, RESUME_ID resumeId FROM T_CV_REMARK WHERE RESUME_ID IN <foreach collection="resumeIds" open="(" close=")" item="resumeId" separator=","> #{resumeId} </foreach> AND DEFUNCT = 0 GROUP BY RESUME_ID </select>
2.單參數array數組的類型:
java 接口:
public List dynamicForeach2Test(int[] ids);
mapper文件:
<select id="dynamicForeach2Test" parameterType="java.util.ArrayList" resultType="Blog"> select * from t_blog where id in <foreach collection="array" index="index" item="item" open="(" separator="," close=")"> #{item} </foreach> </select>
3.本身把參數封裝成Map的類型
Java 接口:
測試例子: List ids = new ArrayList(); ids.add(1); ids.add(2); ids.add(3); Map params = new HashMap(); params.put("ids", ids); params.put("title", "中國"); List blogs = blogMapper.dynamicForeach3Test(params);
public List dynamicForeach3Test(Map params);
mapper文件:
<select id="dynamicForeach3Test" parameterType="java.util.HashMap" resultType="Blog"> select * from t_blog where title like "%"#{title}"%" and id in <foreach collection="ids" index="index" item="item" open="(" separator="," close=")"> #{item} </foreach> </select>
2. like模糊查詢
<!-- ******************** 模糊查詢的經常使用的3種方式:********************* --> <select id="getUsersByFuzzyQuery" parameterType="User" resultType="User"> select <include refid="columns"/> from users <where> <!-- 方法一: 直接使用 % 拼接字符串 注意:此處不能寫成 "%#{name}%" ,#{name}就成了字符串的一部分, 會發生這樣一個異常: The error occurred while setting parameters, 應該寫成: "%"#{name}"%",即#{name}是一個總體,先後加上% --> <if test="name != null"> name like "%"#{name}"%" </if> <!--方法二: 使用concat(str1,str2)函數將兩個參數鏈接 --> <if test="phone != null"> and phone like concat(concat("%",#{phone}),"%") </if> <!--方法三: 使用 bind 標籤,對字符串進行綁定,而後對綁定後的字符串使用 like 關鍵字進行模糊查詢 --> <if test="email != null"> <bind name="pattern" value="'%'+email+'%'"/> and email like #{pattern} </if> </where> </select>
3. find_in_set
Java接口:
int countHhByCondition(@Param(value = "queryParam") Map<String, Object> queryParam);
其中 queryParam參數中 positions 是一個List 集合
mapper文件:
<if test="queryParam.positions != null and queryParam.positions.size() >0"> <foreach collection="queryParam.positions" item="id" open="(" close=")" separator="OR"> FIND_IN_SET(#{id} ,expert.EXPERT_POSITION) </foreach> </if>
4. if 條件的判斷
在進行if條件判斷 等於的時候要注意使用下面這種: 【 x == 'A'.toString() 】
<if test="grade!= null and grade!= '' and grade == '1'.toString()"> name = #{grade} </if>