MyBatis-Plus(八)Mapper的CRUD接口5:增删改操作
Mapper的CRUD接口5:增删改操作
1、新增数据
- insert 方法可以将一个实体对象插入到对应的数据表中:
@RestController
public class HelloController {@Autowiredprivate AreaMapper areaMapper;@RequestMapping("/test")public void test(){Area area = new Area();area.setAreaName("重庆");areaMapper.insert(area);}
}
- 插入成功后,当前插入对象在数据库中的 id 会自动写回到该实体中。
2、删除数据
- deleteById 方法可以根据 id 删除一条记录:
// 返回删除的记录数
int i = userInfoMapper.deleteById(4);
- deleteBatchIds 方法根据 id 批量删除:
// 返回删除的记录数
int i = userInfoMapper.deleteBatchIds(Arrays.asList(4,5,6));
- deleteByMap 方法通过 Map 封装的条件删除记录:
注意:map 写的是数据表中的列名,而非实体类的属性名。比如属性名为 userName,数据表中字段为 user_name,这里应该写的是 user_name。
Map<String,Object> columnMap = new HashMap<>();
columnMap.put("user_name", "hangge");
columnMap.put("age", 22);
// 返回删除的记录数
int i = userInfoMapper.deleteByMap(columnMap);
- delete 方法使用查询构造器,删除记录:
关于查询条件构造器(QueryWrapper LambdaQueryWrapper)的详细用法可以参考我之前写的文章:
- MyBatis-Plus 4 Mapper的CRUD接口1:基本查询
- MyBatis-Plus 5 Mapper的CRUD接口2:条件构造器
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40);
// 开始删除,返回删除的记录数
int i = userInfoMapper.delete(queryWrapper);
return i;
3、修改数据
- updateById 方法根据实体对象中的 ID 进行修改:
注意:如果实体类某个属性为 null,不会更新该属性(不会把对应的数据库字段值设置为 null)
UserInfo userInfo = new UserInfo();
userInfo.setId(3);
userInfo.setUserName("hangge");
userInfo.setPassWord("123");
// 开始修改,返回影响的记录数
int i = userInfoMapper.updateById(userInfo);
- update 方法可以实体对象封装操作类进行更新操作:
- 数据更新相关的构造器(UpdateWrapper、LambdaUpdateWrapper、LambdaUpdateChainWrapper)使用方法类似于查询构造器(QueryWrapper、LambdaQueryWrapper、LambdaQueryChainWrapper),不同的是它增加了如下两个方法:
- set:设置数据库字段值
- setSql:设置 set 部分的 sql
- 关于查询构造器(QueryWrapper、LambdaQueryWrapper、LambdaQueryChainWrapper)具体用法,可以查看我之前的文章:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40);
// 将满足条件的记录密码都设置为8888
UserInfo userInfo = new UserInfo();
userInfo.setPassWord("8888");
// 开始修改,返回影响的记录数
int i = userInfoMapper.update(userInfo, updateWrapper);
- 我们也可以通过 UpdateWrapper 的 set 方法直接设置字段值,比如下面除了将密码设置为 8888 外,还将年龄设置为 null:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40).set(UserInfo::getPassWord, "8888").set(UserInfo::getAge, null);
// 开始修改,返回影响的记录数
int i = userInfoMapper.update(null, updateWrapper);/*********** 二者可以结合使用的,下面效果等效于上面的 ****************/// 查询条件:名字中包含'ha'并且年龄小于40
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40).set(UserInfo::getAge, null);
// 将满足条件的记录密码都设置为8888
UserInfo userInfo = new UserInfo();
userInfo.setPassWord("8888");
// 开始修改,返回影响的记录数
int i = userInfoMapper.update(userInfo, updateWrapper);
- 而也通过 UpdateWrapper 的 setSql 方法可以直接设置 set 部分的 sql,下面的效果同上面是一样的:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40).setSql("pass_word = '8888'").setSql("age = null");
// 开始修改,返回影响的记录数
int i = userInfoMapper.update(null, updateWrapper);/*********** 二者可以结合使用的,下面效果等效于上面的 ****************/// 查询条件:名字中包含'ha'并且年龄小于40
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40).setSql("age = null");
// 将满足条件的记录密码都设置为8888
UserInfo userInfo = new UserInfo();
userInfo.setPassWord("8888");
// 开始修改,返回影响的记录数
int i = userInfoMapper.update(userInfo, updateWrapper);
- 上面每次编写完构造语句后都要将对象传递给 mapper 的 update 方法,比较麻烦,MyBatis Plus 提供了函数式编程方式:
boolean success = new LambdaUpdateChainWrapper<>(userInfoMapper).like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40).set(UserInfo::getPassWord, "8888").set(UserInfo::getAge, null).update();/*********** 二者可以结合使用的,下面效果等效于上面的 ****************/UserInfo userInfo = new UserInfo();
userInfo.setPassWord("8888");
boolean success = new LambdaUpdateChainWrapper<>(userInfoMapper).like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40).set(UserInfo::getAge, null).update(userInfo);
- 下面是结合 setSql 使用:
boolean success = new LambdaUpdateChainWrapper<>(userInfoMapper).like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40).setSql("pass_word = '8888'").setSql("age = null").update();/*********** 二者可以结合使用的,下面效果等效于上面的 ****************/UserInfo userInfo = new UserInfo();
userInfo.setPassWord("8888");
boolean success = new LambdaUpdateChainWrapper<>(userInfoMapper).like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40).setSql("age = null").update(userInfo);
点击跳转至原文地址
--------------最后感谢大家的阅读,愿大家技术越来越流弊!--------------
--------------也希望大家给我点支持,谢谢各位大佬了!!!--------------
MyBatis-Plus(八)Mapper的CRUD接口5:增删改操作相关推荐
- 扩展Mybatis,免配XML文件自动实现增删改和随意查询
写在前面 以前有点懒,一直没有分享技术新的的习惯,这次居然有心情写点东西分享出来. 作为一个从很老很老的jdk就开始码java代码的码农,对Mybatis却一直都是一无所知,一直固守在Hibernat ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...
[声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...
- mybatis实战教程(mybatis in action)之三:实现数据的增删改查
前面已经讲到用接口的方式编程.这种方式,要注意的一个地方就是.在User.xml 的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.I ...
- mybatis的增删改操作及需要注意的问题
继上一篇文章的开发环境操作 https://blog.csdn.net/qq_43941925/article/details/114491876 Mybatis的插入操作 在UserMapper.x ...
- .net Api 接口调用 增删改查
.net Api项目搭建内容以前已经说过了,文章链接,这篇文章在已经搭建好项目基础上简单说下如何建立API增删改查接口. 在Models中建立一个实体类: namespace ApiTest.Mode ...
- MyBatis的逆向工程工具,自动生成数据库对应的POJO实体类、mapper接口、增删改查mapper.xml文件
下载MyBatis的逆向工程工具,并解压缩到一个不包含中文字符的文件夹下,我直接放到了D盘下,下载地址:MyBatis逆向工程工具下载 如何使用MyBatis的逆向工程工具 下载之后使用idea在一个 ...
- 【狂神MyBatis笔记】map作为参数传递类型进行增删改查模糊查询
接口中的参数传入map: 实现类的传入参数为map的键的名称,这个键可以自定义名称: 例:根据ID获取用户 接口: //根据ID获取用户User getUserById2(Map<String, ...
- 【敏捷开发】Node.js(nodejs)实现一个接口完成增删改查聚合接口4个功能,最大限度节省接口数量,正所谓“一口多用”(基础版、免登陆、无鉴权)
注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门Node.js(nodejs)对本地JSON文件进行增.删.改.查 ...
最新文章
- 微软肿么了?版本更新大提速。Visual Studio 2012再次更新
- Linux系统日志分析与管理(14)
- 本地连接时,通过localhost不能登陆到指定的端口
- clion修改选中行的背景颜色
- 计算机排线知识,一种计算机排线梳理装置制造方法及图纸
- 第14篇:Flowable-BPMN操作流程之任务完成
- eclipse配置tomcat,访问http://localhost:8080出现404错误
- apper安卓×××
- LoadRunner11完美破解
- 安装并使用 Wowza 发布你的 RTMP 直播流
- vmware esxi6.5安装使用教程(图文安装)
- 软件工程经济学工程认证作业整理
- Field类及相关类解读
- Go sync.Pool 浅析
- (附源码)计算机毕业设计SSM基于ETC用户的自驾游推荐系统
- Python 安装opencv-python模块
- 网络安全——渗透综合实验
- gdb+linux+查看变量,gdb查看变量值
- CEM计算电磁学 -- Lecture 2 学习笔记 (1) ---TMM 传输矩阵法(1)
- 分享30个最新的单页网站设计案例