Mapper的CRUD接口5:增删改操作

1、新增数据

  1. insert 方法可以将一个实体对象插入到对应的数据表中:
@RestController
public class HelloController {@Autowiredprivate AreaMapper areaMapper;@RequestMapping("/test")public void test(){Area area = new Area();area.setAreaName("重庆");areaMapper.insert(area);}
}
  1. 插入成功后,当前插入对象在数据库中的 id 会自动写回到该实体中。

2、删除数据

  1. deleteById 方法可以根据 id 删除一条记录:
// 返回删除的记录数
int i = userInfoMapper.deleteById(4);
  1. deleteBatchIds 方法根据 id 批量删除:
// 返回删除的记录数
int i = userInfoMapper.deleteBatchIds(Arrays.asList(4,5,6));
  1. 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);
  1. 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、修改数据

  1. updateById 方法根据实体对象中的 ID 进行修改:

注意:如果实体类某个属性为 null,不会更新该属性(不会把对应的数据库字段值设置为 null

UserInfo userInfo = new UserInfo();
userInfo.setId(3);
userInfo.setUserName("hangge");
userInfo.setPassWord("123");
// 开始修改,返回影响的记录数
int i = userInfoMapper.updateById(userInfo);
  1. update 方法可以实体对象封装操作类进行更新操作:
  1. 数据更新相关的构造器(UpdateWrapperLambdaUpdateWrapperLambdaUpdateChainWrapper)使用方法类似于查询构造器(QueryWrapperLambdaQueryWrapperLambdaQueryChainWrapper),不同的是它增加了如下两个方法:
  • set:设置数据库字段值
  • setSql:设置 set 部分的 sql
  1. 关于查询构造器(QueryWrapperLambdaQueryWrapperLambdaQueryChainWrapper)具体用法,可以查看我之前的文章:
// 查询条件:名字中包含'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);
  • 我们也可以通过 UpdateWrapperset 方法直接设置字段值,比如下面除了将密码设置为 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);
  • 而也通过 UpdateWrappersetSql 方法可以直接设置 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);
  1. 上面每次编写完构造语句后都要将对象传递给 mapperupdate 方法,比较麻烦,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:增删改操作相关推荐

  1. 扩展Mybatis,免配XML文件自动实现增删改和随意查询

    写在前面 以前有点懒,一直没有分享技术新的的习惯,这次居然有心情写点东西分享出来. 作为一个从很老很老的jdk就开始码java代码的码农,对Mybatis却一直都是一无所知,一直固守在Hibernat ...

  2. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...

  4. mybatis实战教程(mybatis in action)之三:实现数据的增删改查

    前面已经讲到用接口的方式编程.这种方式,要注意的一个地方就是.在User.xml  的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.I ...

  5. mybatis的增删改操作及需要注意的问题

    继上一篇文章的开发环境操作 https://blog.csdn.net/qq_43941925/article/details/114491876 Mybatis的插入操作 在UserMapper.x ...

  6. .net Api 接口调用 增删改查

    .net Api项目搭建内容以前已经说过了,文章链接,这篇文章在已经搭建好项目基础上简单说下如何建立API增删改查接口. 在Models中建立一个实体类: namespace ApiTest.Mode ...

  7. MyBatis的逆向工程工具,自动生成数据库对应的POJO实体类、mapper接口、增删改查mapper.xml文件

    下载MyBatis的逆向工程工具,并解压缩到一个不包含中文字符的文件夹下,我直接放到了D盘下,下载地址:MyBatis逆向工程工具下载 如何使用MyBatis的逆向工程工具 下载之后使用idea在一个 ...

  8. 【狂神MyBatis笔记】map作为参数传递类型进行增删改查模糊查询

    接口中的参数传入map: 实现类的传入参数为map的键的名称,这个键可以自定义名称: 例:根据ID获取用户 接口: //根据ID获取用户User getUserById2(Map<String, ...

  9. 【敏捷开发】Node.js(nodejs)实现一个接口完成增删改查聚合接口4个功能,最大限度节省接口数量,正所谓“一口多用”(基础版、免登陆、无鉴权)

    注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门Node.js(nodejs)对本地JSON文件进行增.删.改.查 ...

最新文章

  1. 微软肿么了?版本更新大提速。Visual Studio 2012再次更新
  2. Linux系统日志分析与管理(14)
  3. 本地连接时,通过localhost不能登陆到指定的端口
  4. clion修改选中行的背景颜色
  5. 计算机排线知识,一种计算机排线梳理装置制造方法及图纸
  6. 第14篇:Flowable-BPMN操作流程之任务完成
  7. eclipse配置tomcat,访问http://localhost:8080出现404错误
  8. apper安卓×××
  9. LoadRunner11完美破解
  10. 安装并使用 Wowza 发布你的 RTMP 直播流
  11. vmware esxi6.5安装使用教程(图文安装)
  12. 软件工程经济学工程认证作业整理
  13. Field类及相关类解读
  14. Go sync.Pool 浅析
  15. (附源码)计算机毕业设计SSM基于ETC用户的自驾游推荐系统
  16. Python 安装opencv-python模块
  17. 网络安全——渗透综合实验
  18. gdb+linux+查看变量,gdb查看变量值
  19. CEM计算电磁学 -- Lecture 2 学习笔记 (1) ---TMM 传输矩阵法(1)
  20. 分享30个最新的单页网站设计案例

热门文章

  1. 2022年施工升降机司机(建筑特殊工种)考试试题及在线模拟考试
  2. 操作系统-操作系统简介
  3. 每月碎碎念 | 2019.7
  4. 初中计算机考试难吗,教师资格信息技术笔试(初级中学)难吗?
  5. 东芝推出TXZ+TM族高级系列新型M4N组Arm(R) Cortex(R)-M4微控制器
  6. 理解JavaScript中部分设计模式
  7. 计算机视觉-猫狗大战
  8. 如何在你的C/C++代码中避免、发现(修复)内存错误
  9. 重庆自考和成人高考有何区别?哪个含金量更高?
  10. Outlook如何定时发邮件