mybatis学习之路----动态sql之foreach set
来源:互联网 发布:安卓便签软件 编辑:程序博客网 时间:2024/09/21 08:15
点滴记载,点滴进步,愿自己更上一层楼。
官方文档传送门
就像jsp前台展示少不了集合遍历一样,这里也支持集合遍历,生成动态sql。
像sql的in函数,批量操作都少不了集合的遍历。
foreach可以遍历所有的可以迭代的对象,集合,数组,map等等。
属性:index 当迭代对象是数组,列表时,表示的是当前迭代的次数
当对象是map之类的时候,表示的是当前map的key。
item 当迭代对象是数组,列表时,表示的是当前迭代的元素。
当对象是map之类的时候,表示的是当前map的value值。
collection 当前不要遍历的对象
separator 遍历完一次后,在末尾添加的字符等。
open 遍历的sql以什么开头
close 遍历的sql以什么结尾
示例:
1 遍历集合为list
<select id="selectUseIf" parameterType="com.soft.test.model.DynamicTestModel" resultMap="userMap"> select * from t_user <where> <foreach collection="userList" separator="," item="str" index="index" open=" id in (" close=")"> #{str.id} </foreach> </where> </select>
@Test public void dynamic() throws Exception { dynamicSqlDao = new DynamicSqlDaoImpl(); DynamicTestModel user = new DynamicTestModel(); List<User> list = new ArrayList<>(); User user1 = new User(); user1.setId(1); User user2 = new User(); user2.setId(2); User user3 = new User(); user3.setId(3); User user4 = new User(); user4.setId(4); User user5 = new User(); user5.setId(5); User user6 = new User(); user6.setId(6); User user7 = new User(); user7.setId(7); list.add(user1); list.add(user2); list.add(user3); list.add(user4); list.add(user5); list.add(user6); list.add(user7); user.setUserList(list);// Map<String,Object> map = new HashMap<>();// map.put("aaaa","xiao");// user.setMapParam(map); DynamicTest1Model dynamicTest1Model = new DynamicTest1Model(); user.setDynamicTest1Model(dynamicTest1Model); List<User> userList = dynamicSqlDao.dynamic(user); System.out.println(userList); }结果:
DEBUG [main] - ==> Preparing: select * from t_user WHERE id in ( ? , ? , ? , ? , ? , ? , ? )
DEBUG [main] - ==> Parameters: 1(Integer), 2(Integer), 3(Integer), 4(Integer), 5(Integer), 6(Integer), 7(Integer)
2 当遍历集合为map
注意这个时候的index是key item对应的是value即可。map方式case when 更新表数据
<select id="selectUseIf" parameterType="com.soft.test.model.DynamicTestModel" resultMap="userMap"> update t_user <set> <foreach collection="mapParam" separator="" item="str" index="index" open=" username = case " close="end,"> when id=#{index} then #{str} </foreach> </set> <where> <foreach collection="mapParam" separator="," item="str" index="index" open=" id in ( " close=")"> #{index} </foreach> </where> </select>
@Test public void dynamic() throws Exception { dynamicSqlDao = new DynamicSqlDaoImpl(); DynamicTestModel user = new DynamicTestModel(); Map<Object,Object> map = new HashMap<>(); map.put(1,"xiao"); map.put(2,"xiaoh"); map.put(3,"xiaoho"); map.put(4,"xiaohong"); map.put(28,"xiaohong1"); user.setMapParam(map); DynamicTest1Model dynamicTest1Model = new DynamicTest1Model(); user.setDynamicTest1Model(dynamicTest1Model); List<User> userList = dynamicSqlDao.dynamic(user); System.out.println(userList); }测试结果:
DEBUG [main] - ==> Preparing: update t_user SET username = case when id=? then ? when id=? then ? when id=? then ? when id=? then ? when id=? then ? end WHERE id in ( ? , ? , ? , ? , ? )
DEBUG [main] - ==> Parameters: 1(Integer), xiao(String), 2(Integer), xiaoh(String), 3(Integer), xiaoho(String), 4(Integer), xiaohong(String), 28(Integer), xiaohong1(String), 1(Integer), 2(Integer), 3(Integer), 4(Integer), 28(Integer)
foreach示例完毕。功能很强大,些许注意点注意下即可。
-----------------------------------------------------------set------------------------------------------------
set其实应该放到trim那一节的,但是那时候还没看这个。贴出源码
public class SetSqlNode extends TrimSqlNode { private static List<String> suffixList = Arrays.asList(","); public SetSqlNode(Configuration configuration,SqlNode contents) { super(configuration, contents, "SET", null, null, suffixList); }}看的出来他就是一个特殊的trim而已。
想在了解了解的可以看前面一节
mybatis学习之路----动态sql之trim标签源码详解,附带where标签解析
- mybatis学习之路----动态sql之foreach set
- mybatis 动态sql之foreach
- mybatis动态sql查询Dynamic SQL之if,foreach,choose,trim,where,set
- MyBatis动态SQL之foreach用法
- Mybatis动态SQL之if、choose、where、set、trim、foreach实例
- mybatis学习之动态SQL
- MyBatis参数传入集合之foreach动态sql
- MyBatis参数传入集合之foreach动态sql
- Mybatis 参数传入集合之foreach动态sql
- MyBatis参数传入集合之foreach动态sql
- MyBatis参数传入集合之foreach动态sql
- MyBatis参数传入集合之foreach动态sql
- MyBatis参数传入集合之foreach动态sql
- MyBatis参数传入集合之foreach动态sql
- MyBatis参数传入集合之foreach动态sql
- MyBatis参数传入集合之foreach动态sql
- MyBatis参数传入集合之foreach动态sql
- MyBatis参数传入集合之foreach动态sql
- 【error】No such file or directory apu-1-config apr-1-config
- 《完美Qt》之线程调用定时器
- Cookie进行自动登录
- Java使用Redis实现消息队列
- 1017. A除以B
- mybatis学习之路----动态sql之foreach set
- mysql服务器和客户端时区不同,使用jdbc得到的结果差8小时的问题
- HTTP中的表单请求的三种方式
- 合并分支到Master
- MySQL默认约束
- Codeforces Round #436 (Div. 2) A-D题解
- C语言学习笔记——前言
- 1010 radix
- Codeforces 462C C. Appleman and Toastman【贪心】