一起来学Mybatis Plus(五) & Mapper CRUD接口

前言

目前正在出一个Mybatis Plus系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~

之前给大家讲过Mybatis教程,而MyBatis-Plus 是一个 MyBatis 的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。大家需要注意的是它只是一个工具,大家需要掌握和重点学习的依然是Mybatis,在熟练掌握基础的情况下使用MyBatis-Plus会达到事半功倍的效果。

好了, 废话不多说直接开整吧~

Mapper & CRUD

  • 通用 CRUD 封装BaseMapper (opens new window)接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器
  • 泛型 T 为任意实体对象
  • 参数 Serializable 为任意类型主键 Mybatis-Plus 不推荐使用复合主键约定每一张表都有自己的唯一 id 主键
  • 对象Wrapper 为 条件构造器

下面一起来看下相关的方法,其实很多方法和上节讲的Service类似,有的方法名不一样,但是传参是想通的

Insert

java 复制代码
// 插入一条记录
int insert(T entity);
  • T entity 实体对象

示例:

java 复制代码
User user = new User();
user.setName("小明");
user.setAge(18);
user.setVersion(1);
userMapper.insert(user);

Delete

java 复制代码
// 根据 entity 条件,删除记录
int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
// 删除(根据ID 批量删除)
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根据 ID 删除
int deleteById(Serializable id);
// 根据 columnMap 条件,删除记录
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
  • Wrapper wrapper 实体对象封装操作类(可以为 null)
  • Collection<? extends Serializable> idList 主键 ID 列表(不能为 null 以及 empty)
  • Serializable id 主键 ID
  • Map<String, Object> columnMap 表字段 map 对象
java 复制代码
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name","小明-saveOrUpdate1");
userMapper.delete(queryWrapper);

其它方法参考上节的Service

Update

java 复制代码
// 根据 whereWrapper 条件,更新记录
int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper<T> whereWrapper);
// 根据 ID 修改
int updateById(@Param(Constants.ENTITY) T entity);
  • T entity 实体对象 (set 条件值,可为 null)
  • Wrapper updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
java 复制代码
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name","小明1");
User user1 = new User();
user1.setName("小明1-UPDATE");

userMapper.update(updateWrapper);

Select

java 复制代码
// 根据 ID 查询
T selectById(Serializable id);
// 根据 entity 条件,查询一条记录
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 查询(根据ID 批量查询)
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根据 entity 条件,查询全部记录
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 查询(根据 columnMap 条件)
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
// 根据 Wrapper 条件,查询全部记录
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 根据 entity 条件,查询全部记录(并翻页)
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录(并翻页)
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询总记录数
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  • Serializable id 主键 ID
  • Wrapper queryWrapper 实体对象封装操作类(可以为 null)
  • Collection<? extends Serializable> idList 主键 ID 列表(不能为 null 以及 empty)
  • Map<String, Object> columnMap 表字段 map 对象
  • IPage page 分页查询条件(可以为 RowBounds.DEFAULT)

就不一一演示了,大家可以自己试一下方法,看看结果

ActiveRecord 模式

该模式实体类只需继承 Model 类即可进行强大的CRUD操作,需要项目中已注入对应实体的BaseMapper

java 复制代码
public class User extends Model<User> implements Serializable {
    // ....
}

使用示例

java 复制代码
User user = new User();
user.setName("小明");
user.setAge(18);
user.setVersion(1);
user.insert();

List<User> list = user.selectAll();

User user1 = new User();
user1.setId(1731552348470849545L);
user1.setName("小明hhh");
user1.setAge(18);
user1.setVersion(1);
user1.updateById();

user1.deleteById();
user1.deleteById(1731552348470849545L);

使用起来非常的方便,大家可以根据自己的项目需求选择合适crud方法

结束语

下节给大家讲解条件构造器,这个注意用查询条件构造

本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~

MybatisPlus教程相关文章

往期Nginx教程相关文章

往期Docker教程相关文章

往前Shell脚本编程相关文章

往期Linux相关文章

往期面试题相关文章

项目源码(源码已更新 欢迎star⭐️)

往期设计模式相关文章

设计模式项目源码(源码已更新 欢迎star⭐️)

Kafka 专题学习

项目源码(源码已更新 欢迎star⭐️)

ElasticSearch 专题学习

项目源码(源码已更新 欢迎star⭐️)

往期并发编程内容推荐

推荐 SpringBoot & SpringCloud (源码已更新 欢迎star⭐️)

博客(阅读体验较佳)

相关推荐
luckdewei6 分钟前
那个用 passlib 做认证的新同事,上线第一天就把用户密码写进了日志
后端
ping某1 小时前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
JustHappy1 小时前
我汇总了身边朋友的经历才发现,其实第一份实习是最难找的......
前端·后端·面试
uhakadotcom2 小时前
在python 的 工程化架构中 ,什么是 薄包装器层?
后端·面试·github
用户1474853079746 小时前
CodeX使用Skill生成游戏美术和音乐资源,一分钟入门
后端
Melody1236 小时前
用 abort 中断 AI 流式请求,我之前做错了
后端
onething3656 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 5 —— SSE 流式输出 + 打字机效果
人工智能·后端·全栈
一个做软件开发的牛马7 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
码事漫谈7 小时前
AI 编程的「三体」架构:OpenSpec + Superpowers + GStack 如何让一个开发者撑起整个研发团队
后端
吃饱了得干活7 小时前
深入解析 OpenFeign:从重试、拦截到负载均衡的全维度实践
后端