mybatis 經常使用sql

使用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>
相關文章
相關標籤/搜索