MyBatis學習——foreach標籤的使用
一、foreach標籤屬性解讀
MyBatis的foreach標籤應用於多引數的互動如:多引數(相同引數)查詢、迴圈插入資料等,foreach標籤包含collection、item、open、close、index、separator,MyBatis的foreach標籤與jstl標籤的使用非常相似,以下為幾個屬性的意思解釋:
collection:引數名稱,根據Mapper介面的引數名確定,也可以使用@Param註解指定引數名
item:引數呼叫名稱,通過此屬性來獲取集合單項的值
open:相當於prefix,即在迴圈前新增字首
close:相當於suffix,即在迴圈後新增字尾
index:索引、下標
separator:分隔符,每次迴圈完成後新增此分隔符
二、foreach標籤應用
1.多引數查詢
場景描述:傳入多個使用者ID,獲取使用者的結果集
Junit業務方法呼叫
/**
* 動態sql學習---foreach標籤使用(查詢)
* @throws IOException
*
*/
@Test
public void dynamicSQLToForeach() throws IOException {
SqlSessionFactory sessionFactory = getSessionFactory();
SqlSession sqlSession = sessionFactory.openSession();
try {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUsersByListParam(Arrays.asList(1,2,3,4));
for(User user:users) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
mapper介面(指定引數名稱)
/**
* 多個引數查詢user集合
*
* @param list
* @return
*/
@SuppressWarnings("unchecked")
List<User> getUsersByListParam(@Param("list") List list);
XML實現:
<!-- 使用foreach接收list引數 -->
<select id="getUsersByListParam" resultType="com.xuyong.entity.User">
select * from user
<foreach collection="list" item="item" open="where user_id in(" close=")" separator=",">
#{item}
</foreach>
</select>
SQL列印:
[com.xuyong.dao.UserMapper.getUsersByListParam]-==> Preparing: select * from user where user_id in( ? , ? , ? , ? )
[com.xuyong.dao.UserMapper.getUsersByListParam]-==> Parameters: 1(Integer), 2(Integer), 3(Integer), 4(Integer)
[com.xuyong.dao.UserMapper.getUsersByListParam]-<== Columns: user_id, user_name, gender, email, address, dept_id
[com.xuyong.dao.UserMapper.getUsersByListParam]-<== Row: 1, t1heluosh1, 0, t1heluosh1@163.com, 安徽省合肥市, 1
[com.xuyong.dao.UserMapper.getUsersByListParam]-<== Row: 2, 王亞飛, 0, wangyafei@163.com, 安徽省合肥市, 1
[com.xuyong.dao.UserMapper.getUsersByListParam]-<== Row: 3, 張傑, 1, zhangjie@163.com, 安徽省黃山市, 3
[com.xuyong.dao.UserMapper.getUsersByListParam]-<== Row: 4, Lucy, 1, lucy@126.com, 美利堅合眾國舊金山, 2
[com.xuyong.dao.UserMapper.getUsersByListParam]-<== Total: 4
2.迴圈插入資料
Junit業務方法呼叫
/**
* 動態sql學習---foreach標籤使用(新增)
* @throws IOException
*
*/
@Test
public void insertMultiUsers() throws IOException {
SqlSessionFactory sessionFactory = getSessionFactory();
SqlSession sqlSession = sessionFactory.openSession();
try {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = new ArrayList<User>();
users.add(new User("HanMeimei",1,"HanMeimei@163.com","江蘇省南京市",2));
users.add(new User("李雷",0,"LiLei@163.com","北京市",1));
users.add(new User("QQ小冰",1,"xiaobing@163.com","深圳市",2));
int count = mapper.insertMultiUsers(users);
sqlSession.commit();
System.out.println(count);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
Mapper介面
/**
* 使用foreach批量插入
*
* @param users
* @return
*/
int insertMultiUsers(@Param("users") List<User> users);
XML實現
<!-- 使用foreach批量插入使用者-->
<insert id="insertMultiUsers">
insert into user(user_name,gender,email,address,dept_id)
values
<foreach collection="users" item="user" separator=",">
(#{user.userName},#{user.gender},#{user.email},#{user.address},#{user.deptId})
</foreach>
</insert>
SQL列印
[com.xuyong.dao.UserMapper.insertMultiUsers]-==> Preparing: insert into user(user_name,gender,email,address,dept_id) values (?,?,?,?,?) , (?,?,?,?,?) , (?,?,?,?,?)
[com.xuyong.dao.UserMapper.insertMultiUsers]-==> Parameters: HanMeimei(String), 1(Integer), HanMeimei@163.com(String), 江蘇省南京市(String), 2(Integer), 李雷(String), 0(Integer), LiLei@163.com(String), 北京市(String), 1(Integer), QQ小冰(String), 1(Integer), xiaobing@163.com(String), 深圳市(String), 2(Integer)
[com.xuyong.dao.UserMapper.insertMultiUsers]-<== Updates: 3
3
相關文章
- MyBatis foreach標籤MyBatis
- Mybatis的 foreach 標籤使用方法.MyBatis
- mybatis中foreach標籤詳解MyBatis
- mybatis foreach標籤的解釋 與常用之處MyBatis
- MyBatis從入門到精通(八):MyBatis動態Sql之foreach標籤的用法MyBatisSQL
- Mybatis系列:解決foreach標籤內list為空的問題MyBatis
- mybatis 根據多個id查詢資料 foreach標籤MyBatis
- Mybatis中Foreach動態SQL標籤(map和list兩種情況)MyBatisSQL
- Mybatis中常用的標籤MyBatis
- git學習——打標籤Git
- mybatis關於list的foreach的使用MyBatis
- mybatis的 choose -- when test -- otherwise 標籤和 if test 標籤的區別MyBatis
- 利用c:forEach標籤遍歷陣列陣列
- HTML標籤(基本標籤的使用)HTML
- java <%!%>標籤和<%%>標籤的使用Java
- MyBatis if 標籤的坑,居然被我踩到了。。。MyBatis
- JQ選擇器(標籤)學習
- HTML 標籤的使用HTML
- mybatis foreach迴圈MyBatis
- jQuery基礎學習(3)(獲取標籤屬性,動態新增標籤)jQuery
- 前端學習-vue影片學習007-標籤的ref屬性前端Vue
- MyBatis系列(七):MyBatis動態Sql之choose,where,set標籤的用法MyBatisSQL
- MyBatis標籤實現的動態SQL語句MyBatisSQL
- 最新綜述:多標籤學習的新趨勢
- MyBatis中的<where>標籤和where子句的區別MyBatis
- Html標籤知識點學習筆記HTML筆記
- html學習筆記(1)——基礎標籤HTML筆記
- HTML 標籤 和 JQuery線上學習網址HTMLjQuery
- HTML學習記錄(2)(HTML常用標籤)HTML
- IOS 學習筆記(4) 控制元件 標籤(UILabel)的使用方法iOS筆記控制元件UI
- HTML常用標籤的使用HTML
- s:iterator標籤的使用
- html標籤使用HTML
- MyBatis從入門到精通(六):MyBatis動態Sql之if標籤的用法MyBatisSQL
- Mybatis學習筆記 1:一個Mybatis使用例子MyBatis筆記
- HTML中的標籤的使用HTML
- MyBatis Batch Update Exception使用foreach批量update出錯MyBatisException
- 裝置支援多箱號查詢,mybatis標籤MyBatis