更新
mybatis-plus更新:
-
单个更新updateById(),如果将 name设置为null,不会更新数据库,但是如果updateTime 和 creatTime 数据库里设置了自动更新,设置为null也是会更新的。
-
批量更新,service层 继承 ServiceImpl ,其中的 updateBatchById 是批量更新(它里面还是一条一条更新)。
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getAge, 3); List<User> userList = userMapper.selectList(wrapper); userList.forEach(user -> { System.out.println(user); user.setName("testWlw1131-4"); user.setUpdateTime(null); user.setCreateTime(null); //userMapper.updateById(user); }); //mybatis-plus 自带的批量更新 //userService.updateBatchById(userList,2); userService.updateBatchById(userList); Execute SQL: UPDATE user SET name='testWlw1131-4', age=3, email='1903202403@qq.com', version=8, update_time='2021-11-13 20:12:49.602' WHERE id=1413764856826785803 AND version=7 AND deleted=0
- 如果自己写批量更新:有多种方式,可参考:https://segmentfault.com/a/1190000018084851、 https://www.cnblogs.com/personsiglewine/p/12889619.html
jdbc连接加 :&allowMultiQueries=true @Test public void testBatchUpdate() { LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getAge, 3); List<User> userList = userMapper.selectList(wrapper); userList.forEach(user -> { System.out.println(user); user.setName("testWlw1131-4"); user.setUpdateTime(null); user.setCreateTime(null); //userMapper.updateById(user); }); userMapper.batchUpdate(userList); } <update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" separator=";" open="" close=""> update user <set> `name` = #{item.name}, age = #{item.age}, email = #{item.email} </set> where id = #{item.id} </foreach> </update> Execute SQL: update user SET `name` = 'testWlw1131-4', age = 3, email = '1903202403@qq.com' where id = 1413764856826785795 ; update user SET `name` = 'testWlw1131-4', age = 3, email = '1903202403@qq.com' where id = 1413764856826785797 ; update user SET `name` = 'testWlw1131-4', age = 3, email = '1903202403@qq.com' where id = 1413764856826785803
新增
mybatis-plus 新增:
-
单个新增,不用测试
-
批量插入:service层 继承 ServiceImpl ,其中的 saveBatch 是批量插入(它里面还是一条一条插入)。
List<User> users = new ArrayList<>(); User user = new User(); //注意 并没设置id user.setName("test-wlw"); user.setAge(3); user.setEmail("1903202403@qq.com"); User user1 = new User(); //注意 并没设置id user1.setName("wlw1-1113-2"); user1.setAge(4); user1.setEmail("2903202403@qq.com"); users.add(user); users.add(user1); users.forEach(user2 -> System.out.println(user2)); //userMapper.batchInsert(users); userService.saveBatch(users); Execute SQL: INSERT INTO user ( name, age, email, create_time, update_time ) VALUES ( 'wlw1-1113-2', 4, '2903202403@qq.com', '2021-11-13 19:30:26.574', '2021-11-13 19:30:26.574' )
- 如果要是自己写批量插入,注意:遍历时< foreach> 不要用open,close标签
<insert id="batchInsert"> insert into user (id, `name`, age, email) values <foreach collection="list" item="item" separator=","> (#{item.id}, #{item.name}, #{item.age}, #{item.email}) </foreach> </insert>