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從入門到精通(八):MyBatis動態Sql之foreach標籤的用法MyBatisSQL
- Mybatis系列:解決foreach標籤內list為空的問題MyBatis
- mybatis 根據多個id查詢資料 foreach標籤MyBatis
- Mybatis中foreach的使用MyBatis
- Mybatis中Foreach動態SQL標籤(map和list兩種情況)MyBatisSQL
- Mybatis中常用的標籤MyBatis
- mybatis關於list的foreach的使用MyBatis
- 利用c:forEach標籤遍歷陣列陣列
- git學習——打標籤Git
- mybatis的 choose -- when test -- otherwise 標籤和 if test 標籤的區別MyBatis
- HTML標籤(基本標籤的使用)HTML
- MyBatis if 標籤的坑,居然被我踩到了。。。MyBatis
- mybatis foreach迴圈MyBatis
- marquee 標籤的使用
- 前端學習-vue影片學習007-標籤的ref屬性前端Vue
- MyBatis標籤實現的動態SQL語句MyBatisSQL
- MyBatis系列(七):MyBatis動態Sql之choose,where,set標籤的用法MyBatisSQL
- Mybatis的<if>標籤的坑,0會被過濾掉?MyBatis
- MyBatis中的<where>標籤和where子句的區別MyBatis
- HTML常用標籤的使用HTML
- <base href=““/> 標籤的使用
- mybatis中 if 標籤 test 等於判斷MyBatis
- Android原始碼學習中遇到的標籤記錄Android原始碼
- 最新綜述:多標籤學習的新趨勢
- PbootCMS可使用的列表標籤內容tags標籤呼叫boot
- html標籤使用HTML
- HTML中的標籤的使用HTML
- HTML學習記錄(2)(HTML常用標籤)HTML
- MyBatis從入門到精通(六):MyBatis動態Sql之if標籤的用法MyBatisSQL
- 裝置支援多箱號查詢,mybatis標籤MyBatis
- Mybatis學習筆記 1:一個Mybatis使用例子MyBatis筆記
- JavaScript各類標籤的使用JavaScript
- Kubernetes學習筆記(二):Pod、標籤、註解筆記
- Mybatis-plus學習(四)——MybatiPlus的Wrapper的使用MyBatisAPP
- Mybatis的Mapper對映檔案中常用標籤及作用MyBatisAPP
- Mybatis學習-初步認知與使用MyBatis
- HTML標籤練習(1)HTML