5 MyBatis動態sql中foreach標簽的使用


1 MyBatis動態SQL之if 語句
2 MyBatis動態sql之where標簽|轉
3 MyBatis動態SQL之set標簽|轉
4 MyBatis動態SQL之trim元素|轉
5 MyBatis動態sql中foreach標簽的使用
6 MyBatis動態SQL之choose(when、otherwise)語句
7 MyBatis動態SQL之bind標簽|轉

  關於動態SQL另外一個常用的功能就是使用foreach標簽對一個集合進行遍歷,尤其是在構建IN條件語句的時候。

  案例1 Spring Boot項目中,Dao層代碼片段如下:

    // 查詢指定ID的員工
    List<Employee> selectEmployeeIn(Long[] ids);

  xml文件代碼片段如下:

	<select id="selectEmployeeIn" resultType="cn.mybatis.domain.Employee">
		SELECT * FROM tb_employee
		<where>
			<if test="ids != null">
				<foreach item="item" index="index" collection="ids"
						 open="id in (" separator="," close=")" nullable="true">
					#{item}
				</foreach>
			</if>
		</where>
	</select>

  foreach 元素的功能非常強大,它允許你指定一個集合,聲明可以在元素體內使用的集合項(item)和索引(index)變量。它也允許你指定開頭與結尾的字符串以及集合項迭代之間的分隔符。這個元素也不會錯誤地添加多余的分隔符,看它多智能!

  溫馨提示 你可以將任何可迭代對象(如 List、Set 等)、Map 對象或者數組對象作為集合參數傳遞給 foreach。當使用可迭代對象或者數組時,index 是當前迭代的序號,item 的值是本次迭代獲取到的元素。當使用 Map 對象(或者 Map.Entry 對象的集合)時,index 是鍵,item 是值。

  假如在上述案例中,請求參數為int[] ids = {1,2,3,4,5},那么,調用selectEmployeeIn后,控制台打印的SQL如下:

SELECT * FROM tb_employee where id in (1,2,3,4,5)

  如果把請求參數封裝為map,如下:

public void selectPostIn() {
    final List<Long> ids = new ArrayList<Long>();
    ids.add(1L);
    ids.add(2L);
    ids.add(32L);
    Map<String,Long> maps = new HashMap();
    params.put("ids", ids);
    List<Employee> employeeList = employeeMapper.selectEmployeeIn(maps);
}

//---- Dao層修改 ------
 List<Employee> selectEmployeeIn(Map<String, Long> mapParam);

  則對應的xml仍然可以使用案例1中的selectEmployeeIn。

  foreach標簽的主要屬性描述如下:

  通常可以將foreach用到批量增刪改查等操作中,關於批量刪除和修改的介紹,請戳《Mybatis 批量操作-刪除、修改和查詢》。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM