Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第1张图片

 欢迎来到我的CSDN主页!

我是君易--鑨,一个在CSDN分享笔记的博主。

推荐给大家我的博客专栏《SpringBoot开发之Mybatis-Plus系列》。

如果感觉还不错的话请给我关注加三连吧!


 前言

        在上一期的Mybatis-Plus的博客分享中我们在官网上一起了解了关于Mybatis-Plus的一核心功能和插件,例如:自定义的Id生成器、逻辑删除、乐观锁以及分页插件,当然还有一些插件及核心功能在官网,感兴趣的宝子可自行研究。本期带来的是Mybatis-Plus的内置接口

一、内置接口简介

1. 什么是Mybatis-Plus的内置接口

        MyBatis-Plus是一个基于MyBatis的增强工具,它简化了MyBatis的开发并提供了一些强大的功能,其中包括一些内置的通用Mapper接口。这些通用Mapper接口使得开发者可以使用简单的方法进行数据库的增、删、改、查操作,而无需手动编写对应的SQL语句。

2. 内置接口的特点

MyBatis-Plus的内置接口具有以下主要特点:

  1. 通用 CRUD 方法:MyBatis-Plus的内置接口提供了通用的增、删、改、查的方法,如、、、等。这些方法封装了对数据库表的基本操作,减少了开发者需要手动编写SQL语句的工作。insertdeleteByIdupdateByIdselectById

  2. 无需XML映射文件:MyBatis-Plus采用了约定大于配置的思想,通过接口的命名规范和方法的签名,无需编写繁琐的XML映射文件,即可完成数据库操作。这简化了MyBatis的配置和使用。

  3. 支持主键策略:MyBatis-Plus提供了对多种主键策略的支持,包括自增主键、UUID、雪花算法生成的主键等。开发者可以通过配置指定主键的生成方式。

  4. 条件构造方法:MyBatis-Plus的接口提供了一些条件构造的方法,使得开发者可以通过传入条件对象来动态生成SQL条件,实现动态查询的功能。ConditionMapper

  5. SQL 注入器支持: MyBatis-Plus的接口允许开发者自定义SQL注入的逻辑,以满足一些特殊的需求。这为开发者提供了更大的灵活性。SqlInjector

  6. 支持分页查询: MyBatis-Plus内置了分页查询的功能,通过对象可以轻松地实现分页查询,无需手动编写分页SQL。Page

  7. 逻辑删除: MyBatis-Plus支持逻辑删除,通过注解或配置可以简单地实现逻辑删除的功能,而无需修改表结构。

  8. 自动填充字段: MyBatis-Plus支持通过注解或配置自动填充字段,例如创建时间、更新时间等,减少了对这些字段的手动处理。

  9. 支持乐观锁: MyBatis-Plus提供了对乐观锁的支持,通过注解或配置可以启用乐观锁机制,确保数据的一致性。

二、内置接口的使用

2.1 Service接口

Service CRUD 接口说明:

  • 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,

  • 泛型 T 为任意实体对象

  • 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类

  • 对象 Wrapper 为 条件构造器

2.1.1 Save

用法
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection entityList);
// 插入(批量)
boolean saveBatch(Collection entityList, int batchSize);

参数说明

类型 参数名 描述
T entity 实体对象
Collection entityList 实体对象集合
int batchSize 插入批次数量
测试代码
 @Test
    public void test01() {
        Faker faker = new Faker(Locale.CHINA);
        Book book = new Book()
                .setBookname(faker.book().title())
                .setPrice((float) faker.number().randomDouble(2, 100, 999));
        bookService.save(book);
        log.error("{}", book);
    }
    @Test
    public void test02() {
        Faker faker = new Faker(Locale.CHINA);
        List list = Stream.generate(
                () -> new Book()
                        .setBookname(faker.name().fullName())
                        .setPrice((float) faker.number().randomDouble(2, 100, 999))
        ).limit(10).collect(Collectors.toList());
        bookService.saveBatch(list);
    }

    @Test
    public void test03() {
        Faker faker = new Faker(Locale.CHINA);
        List list = Stream.generate(
                () -> new Book()
                        .setBookname(faker.name().fullName())
                        .setPrice((float) faker.number().randomDouble(2, 100, 999))
        ).limit(10).collect(Collectors.toList());
        bookService.saveBatch(list, 500);
    }
演示

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第2张图片

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第3张图片

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第4张图片

2.1.2 SaveOrUpdate

        执行前先进行查找,有则修改无则新增

用法格式

// TableId 注解存在更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection entityList);
// 批量修改插入
boolean saveOrUpdateBatch(Collection entityList, int batchSize);

参数说明

类型 参数名 描述
T entity 实体对象
Wrapper updateWrapper 实体对象封装操作类 UpdateWrapper
Collection entityList 实体对象集合
int batchSize 插入批次数量
 测试代码
 @Test
    public void test04() {
        Faker faker = new Faker(Locale.CHINA);
        Book book = new Book()
                .setBookname(faker.book().title())
                .setPrice((float) faker.number().randomDouble(2, 100, 999));
        bookService.saveOrUpdate(book);
        log.error("{}", book);
    }

    @Test
    public void test05() {
        Faker faker = new Faker(Locale.CHINA);
        Book book = new Book()
                .setBookname(faker.book().title())
                .setPrice((float) faker.number().randomDouble(2, 100, 999));
        UpdateWrapper wrapper=new UpdateWrapper<>();
        wrapper.set("id",494692663555129l);
        bookService.saveOrUpdate(book,wrapper);
        log.error("{}", book);
    }

    @Test
    public void test06() {
        Faker faker = new Faker(Locale.CHINA);
        List list = Stream.generate(
                () -> new Book()
                        .setBookname(faker.name().fullName())
                        .setPrice((float) faker.number().randomDouble(2, 100, 999))
        ).limit(10).collect(Collectors.toList());
        bookService.saveOrUpdateBatch(list);
    }
    @Test
    public void test07() {
        Faker faker = new Faker(Locale.CHINA);
        List list = Stream.generate(
                () -> new Book()
                        .setBookname(faker.name().fullName())
                        .setPrice((float) faker.number().randomDouble(2, 100, 999))
        ).limit(10).collect(Collectors.toList());
        bookService.saveOrUpdateBatch(list,5);
    }
演示代码

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第5张图片

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第6张图片

 Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第7张图片

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第8张图片

 2.1.3 Remove

用法格式
// 根据 queryWrapper 设置的条件,删除记录
boolean remove(Wrapper queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection idList);

参数说明

类型 参数名 描述
Wrapper queryWrapper 实体包装类 QueryWrapper
Serializable id 主键 ID
Map columnMap 表字段 map 对象
Collection idList 主键 ID 列表
 测试代码
 @Test
    public void test08() {
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.lt("price", 500);
        wrapper.like("bookname", "陈");
        bookService.remove(wrapper);
    }

    @Test
    public void test09() {
        Map ms = new HashMap<>();
        ms.put("price", 100);
        ms.put("bookname", "陈");
        bookService.removeByMap(ms);
    }

    @Test
    public void test10() {
        List ids = bookService
                .list()
                .stream()
                .limit(5)
                .map(Book::getId)
                .collect(Collectors.toList());
        bookService.removeBatchByIds(ids);
    }

removeById根据id删除就不演示了。

 演示结果

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第9张图片

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第10张图片

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第11张图片

 因为我使用的是逻辑删除所有改变的是逻辑删除的字段状态

 2.1.4  Update

用法格式
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection entityList, int batchSize);

参数说明

类型 参数名 描述
Wrapper updateWrapper 实体对象封装操作类 UpdateWrapper
T entity 实体对象
Collection entityList 实体对象集合
int batchSize 更新批次数量
 测试代码
boolean update(Wrapper updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper whereWrapper);

这两个格式测试代码如下

 @Test
    public void test011() {
        UpdateWrapper wrapper = new UpdateWrapper<>();
        wrapper.eq("id", 493587255361727L);
        wrapper.set("bookname", "jack");
        wrapper.setSql("price=price+1");
        bookService.update(wrapper);
    }

    @Test
    public void test12() {
        Faker faker = new Faker(Locale.CHINA);
        Book goods = new Book()
                .setBookname(faker.name().fullName())
                .setPrice((float) faker.number().randomDouble(2, 100, 999));
        UpdateWrapper wrapper = new UpdateWrapper<>();
        wrapper.eq("id", 493587255361723L);
        bookService.update(goods, wrapper);
    }
 演示结果

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第12张图片

Mybatis-Plus之内置接口(一起了解Mybatis-Plus的内置接口)_第13张图片

后续的测试代码就不演示了。 

2.1.5.Get

// 根据 ID 查询
T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper queryWrapper);
// 根据 Wrapper,查询一条记录
T getOne(Wrapper queryWrapper, boolean throwEx);
// 根据 Wrapper,查询一条记录
Map getMap(Wrapper queryWrapper);
// 根据 Wrapper,查询一条记录
 V getObj(Wrapper queryWrapper, Function mapper);

参数说明

类型 参数名 描述
Serializable id 主键 ID
Wrapper queryWrapper 实体对象封装操作类 QueryWrapper
boolean throwEx 有多个 result 是否抛出异常
T entity 实体对象
Function mapper 转换函数

2.1.6.List

// 查询所有
List list();
// 查询列表
List list(Wrapper queryWrapper);
// 查询(根据ID 批量查询)
Collection listByIds(Collection idList);
// 查询(根据 columnMap 条件)
Collection listByMap(Map columnMap);
// 查询所有列表
List> listMaps();
// 查询列表
List> listMaps(Wrapper queryWrapper);
// 查询全部记录
List listObjs();
// 查询全部记录
 List listObjs(Function mapper);
// 根据 Wrapper 条件,查询全部记录
List listObjs(Wrapper queryWrapper);
// 根据 Wrapper 条件,查询全部记录
 List listObjs(Wrapper queryWrapper, Function mapper);
参数说明 
  
类型 参数名 描述
Wrapper queryWrapper 实体对象封装操作类 QueryWrapper
Collection idList 主键 ID 列表
Map columnMap 表字段 map 对象
Function mapper 转换函数

2.3 Mapper接口

Mapper CRUD接口说明:

  • 通用 CRUD 封装BaseMapper (opens new window)接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器

  • 泛型 T 为任意实体对象

  • 参数 Serializable 为任意类型主键 Mybatis-Plus 不推荐使用复合主键约定每一张表都有自己的唯一 id 主键

  • 对象 Wrapper 为 条件构造器

 Mapper接口的一些使用方法的格式都和Service接口的参数一样的,可以借鉴官网进行查看。我下面是简单介绍

2.3.1Insert

// 插入一条记录
int insert(T entity);
参数说明
类型 参数名 描述
T entity 实体对象

2.3.2Delete

// 根据 entity 条件,删除记录
int delete(@Param(Constants.WRAPPER) Wrapper wrapper);
// 删除(根据ID 批量删除)
int deleteBatchIds(@Param(Constants.COLLECTION) Collection idList);
// 根据 ID 删除
int deleteById(Serializable id);
// 根据 columnMap 条件,删除记录
int deleteByMap(@Param(Constants.COLUMN_MAP) Map columnMap);

参数说明

类型 参数名 描述
Wrapper wrapper 实体对象封装操作类(可以为 null)
Collection idList 主键 ID 列表(不能为 null 以及 empty)
Serializable id 主键 ID
Map columnMap 表字段 map 对象

2.3.3Update

// 根据 whereWrapper 条件,更新记录
int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper whereWrapper);
// 根据 ID 修改
int updateById(@Param(Constants.ENTITY) T entity);

使用提示:在调用updateById方法前,需要在T entity(对应的实体类)中的主键属性上加上@TableId注解。

参数说明

类型 参数名 描述
T entity 实体对象 (set 条件值,可为 null)
Wrapper updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)

2.3.4Select

// 根据 ID 查询
T selectById(Serializable id);
// 根据 entity 条件,查询一条记录
T selectOne(@Param(Constants.WRAPPER) Wrapper queryWrapper);
​
// 查询(根据ID 批量查询)
List selectBatchIds(@Param(Constants.COLLECTION) Collection idList);
// 根据 entity 条件,查询全部记录
List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
// 查询(根据 columnMap 条件)
List selectByMap(@Param(Constants.COLUMN_MAP) Map columnMap);
// 根据 Wrapper 条件,查询全部记录
List> selectMaps(@Param(Constants.WRAPPER) Wrapper queryWrapper);
// 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
List selectObjs(@Param(Constants.WRAPPER) Wrapper queryWrapper);
​
// 根据 entity 条件,查询全部记录(并翻页)
IPage selectPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
// 根据 Wrapper 条件,查询全部记录(并翻页)
IPage> selectMapsPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
// 根据 Wrapper 条件,查询总记录数
Integer selectCount(@Param(Constants.WRAPPER) Wrapper queryWrapper); 
  

参数说明

类型 参数名 描述
Serializable id 主键 ID
Wrapper queryWrapper 实体对象封装操作类(可以为 null)
Collection idList 主键 ID 列表(不能为 null 以及 empty)
Map columnMap 表字段 map 对象
IPage page 分页查询条件(可以为 RowBounds.DEFAULT)

本期的博客分享到此结束

各位老铁慢慢消化

下期博客博主会带来新货

三连加关注,阅读不迷路 !

你可能感兴趣的:(Spring,mybatis,java,spring,boot)