mybitsplus

下载
链接:https://pan.baidu.com/s/18pET07q1iOQ9MTZmTmFxug?pwd=6km6
提取码:6km6

MybitsPlus快速入门

mybitsPlus->基于mybits-进行了一系列的开发

1.BaseMapper类

![84af32c461349faaa0e4f957c97a049b](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\84af32c461349faaa0e4f957c97a049b.png)

mapper->继承该方法-这些方法名也是说的非常易懂的

2.Mybits 映射Pojo

![3c3e138598f90a383add182c550745da](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\3c3e138598f90a383add182c550745da.png)

驼峰命名法是一种命名约定,其中每个单词的首字母大写,没有空格或标点符号来分隔单词,例如:camelCase。

3.注解@TableName -表名注解

![5963a7ca700c1878c285ab9ae2347046](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-05\Ori\5963a7ca700c1878c285ab9ae2347046.png)

4.主键注解 @Tableid

![ed012758973b1755cdcd1d1ddc0e991c](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\ed012758973b1755cdcd1d1ddc0e991c.png)

@TableId
private Long id;
属性

![242fd1966addaff8b3313118e48981a7](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\242fd1966addaff8b3313118e48981a7.png)

5.普通字段注解@TableField

@TableField("isMarried")
private Boolean isMarried;

![95e9bd49c3b791c708e964a2f4b15e2a](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\95e9bd49c3b791c708e964a2f4b15e2a.png)

![5fe85caf87e0fab3483354cb7fd499ad](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\5fe85caf87e0fab3483354cb7fd499ad.png)

6.常见配置

![034876e14a71af1ec8524063ba29c738](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\034876e14a71af1ec8524063ba29c738.png)


mybitspro 也支持手写sql

![7441706e396a4cab007d33e7e1dd4469](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\7441706e396a4cab007d33e7e1dd4469.png)

mybitsx+mybitsplus->可以支持跳转写-具体方法就是mybits

7.条件构造器

1.构造器了解

除了新增以外,修改、删除、查询的SQL语句都需要指定where条件。因此BaseMapper中提供的相关方法除了以id作为where条件以外,还支持更加复杂的where条件。

![52da0353c64f7992f277a55d5d69307d](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\52da0353c64f7992f277a55d5d69307d.png)

Wrapper关系

![95aa614360e41a40e6eb3aeb95743c0a](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\95aa614360e41a40e6eb3aeb95743c0a.png)

1.AbstractWrapper

提供了where中包含的所有条件构造方法

![336fb5b4722bff7397e6c30eb5dea9bf](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\336fb5b4722bff7397e6c30eb5dea9bf.png)

2.QueryWrapper

拓展了一个select方法,允许指定查询字段

![47543da4a82f7a8134c43b19b1e10502](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\47543da4a82f7a8134c43b19b1e10502.png)

3.UpdateWrapper

![c1893ba09ded9c12a23470e6000d7325](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\c1893ba09ded9c12a23470e6000d7325.png)

![99ec8027977a2561dadf41ef09a948ad](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\99ec8027977a2561dadf41ef09a948ad.png)

4.LambdaQueryWrapper

-无论是QueryWrapper还是UpdateWrapper在构造条件的时候都需要写死字段名称,会出现字符串魔法值。这在编程规范中显然是不推荐的。

![1b0ffa0bb1d852812ad294a35b8fd888](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-05\Ori\1b0ffa0bb1d852812ad294a35b8fd888.png)

![46be4929662ae5ef628b043e12c85c09](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-05\Ori\46be4929662ae5ef628b043e12c85c09.png)

自定义sql-注解

![96f49f3a8be18ed697e8915da140bed9](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\96f49f3a8be18ed697e8915da140bed9.png)

![8d725d5559e95de38132857f497800bd](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\8d725d5559e95de38132857f497800bd.png)

基于注解写sql-是mybitsplus功能

Service接口

1.Service了解

MybatisPlus不仅提供了BaseMapper,还提供了通用的Service接口及默认实现,封装了一些常用的service模板方法。

通用接口为IService,默认实现为ServiceImpl,其中封装的方法可以分为以下几类:

![3dcaf6a956fe9fe726dd0f071b0c71bc](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\3dcaf6a956fe9fe726dd0f071b0c71bc.png)

2.新增

![13c96b5cebd34752b567c130b95bf94f](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\13c96b5cebd34752b567c130b95bf94f.png)

3.删除

![223e551718256b2c4ccb496ab27fd928](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\223e551718256b2c4ccb496ab27fd928.png)

3.更新

![15250e865364a0a81ebc28c32da5d578](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\15250e865364a0a81ebc28c32da5d578.png)

4.查找单个

![4ae94dcbfb1f9c6c65304c24b0345a83](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\4ae94dcbfb1f9c6c65304c24b0345a83.png)

5.查询集合

![49306fabfb10f5443ed6af5be333fd1e](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\49306fabfb10f5443ed6af5be333fd1e.png)

6.计数

![c48dc029d0bd68c01a7dfbe8b5a6fc45](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\c48dc029d0bd68c01a7dfbe8b5a6fc45.png)

7.分页查询

![1cd184ca76dc2163ff33cff11f550075](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\1cd184ca76dc2163ff33cff11f550075.png)

Lambda

![23977048b3aead660e100eb55b7391b2](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-05\Ori\23977048b3aead660e100eb55b7391b2.png)

![c243ec58a30cfb1eaaa8fe38a934fd14](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-05\Ori\c243ec58a30cfb1eaaa8fe38a934fd14.png)

![68eda2f47849ac7f17f343f9d71147bf](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-05\Ori\68eda2f47849ac7f17f343f9d71147bf.png)

![bbffabb2a6d9fd54b8984cbe194d1457](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-05\Ori\bbffabb2a6d9fd54b8984cbe194d1457.png)

改造根据id修改用户余额的接口,要求如下

  • 如果扣减后余额为0,则将用户status修改为冻结状态(2)

![467e0f04ce771a195c18e1c64970a3ae](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\467e0f04ce771a195c18e1c64970a3ae.png)

动态sql

mybits批量处理

IService中的lambdaUpdate方法可以非常方便的实现复杂更新业务

---也就是不需要构造条件-直接可以用lambda-进行查询

Mybits批处理

逐条插入

![101b580959e40e749e63af58e1ac2bd9](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\101b580959e40e749e63af58e1ac2bd9.png)

mybits批处理

![866ee7682e72520e58686b6b1bc60e46](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\866ee7682e72520e58686b6b1bc60e46.png)

每1000条批量插入一次

为什么mybits插入速度就快

@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveBatch(Collection<T> entityList, int batchSize) {
//传入集合和集合大小
    
String sqlStatement = getSqlStatement(SqlMethod.INSERT_ONE);
获取预处理sql
    
return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));
}
->
public static <E> boolean executeBatch(Class<?> entityClass, Log log, Collection<E> list, int batchSize, BiConsumer<SqlSession, E> consumer) {
    Assert.isFalse(batchSize < 1, "batchSize must not be less than one");///断言语句
///三元运算
    return 
!CollectionUtils.isEmpty(list)//检查集合是否为空
 && executeBatch(entityClass, log, sqlSession -> {
        int size = list.size();
        int idxLimit = Math.min(batchSize, size);
        int i = 1;
        for (E element : list) {
            consumer.accept(sqlSession, element);
            if (i == idxLimit) {
                sqlSession.flushStatements();
                idxLimit = Math.min(idxLimit + batchSize, size);
            }
            i++;
        }
    });

executeBatch(entityClass, log, sqlSession -> { ... }): 这是一个方法调用,调用了名为 executeBatch 的方法,并传递了 entityClass、log 和一个 Lambda 表达式作为参数。Lambda 表达式中的代码块将会在 executeBatch 方法内部执行。

Lambda 表达式内部的逻辑:

首先,获取集合 list 的大小,并将其存储在变量 size 中。
然后,计算循环的上限索引 idxLimit,它等于批处理大小 batchSize 和集合大小 size 中的较小值。
接着,初始化变量 i 为 1,用于追踪当前处理的元素索引。
在循环中,遍历集合 list 中的每个元素 element:
    使用 consumer.accept(sqlSession, element) 方法处理当前元素,其中 consumer 是一个函数接口,用于执行特定的操作。
    如果当前处理的索引 i 等于上限索引 idxLimit,则调用 sqlSession.flushStatements() 方法来刷新 SQL 语句,并更新上限索引 idxLimit 为下一个批次的上限索引。
    最后,增加索引变量 i 的值,进入下一轮循环。

整个 Lambda 表达式的执行结果将作为 executeBatch 方法的返回值。

}

以发现其实MybatisPlus的批处理是基于PrepareStatement的预编译模式,然后批量提交,最终在数据库执行时还是会有多条insert语句,逐条插入数据。SQL类似这样:

![0d893a2bdab9ed10ad0c7284e6823446](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\0d893a2bdab9ed10ad0c7284e6823446.png)

-------开启重新批处理

![e5d8dd6fc91bf3b8183f433d705a8485](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-05\Ori\e5d8dd6fc91bf3b8183f433d705a8485.png)****

![accd1ecdecd550e717eaffb8a07860cc](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\accd1ecdecd550e717eaffb8a07860cc.png)

mybitsplus->代码生成

在使用MybatisPlus以后,基础的Mapper、Service、PO代码相对固定,重复编写也比较麻烦

![640804c8b4ef9653c763c7c457d5c1e9](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\640804c8b4ef9653c763c7c457d5c1e9.png)

![8be53fe79baa68053e1013376f8ea342](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\8be53fe79baa68053e1013376f8ea342.png)

![42bb2850b64b4a5daa22cf5a3e19e92a](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\42bb2850b64b4a5daa22cf5a3e19e92a.png)

![465db4382ca68f36c25c79a80bbce054](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\465db4382ca68f36c25c79a80bbce054.png)

MybitsPlus静态

有的时候Service之间也会相互调用,为了避免出现循环依赖问题,MybatisPlus提供一个静态工具类:Db,其中的一些静态方法与IService中方法签名基本一致,也可以帮助我们实现CRUD功能

![c1f46709369d86eee7c03df671545992](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\c1f46709369d86eee7c03df671545992.png)

![59a15e1243bd819dbc3e3d4869dd7b79](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\59a15e1243bd819dbc3e3d4869dd7b79.png)

案例

改造根据id用户查询的接口,查询用户的同时返回用户收货地址列表

![c9982422351f6ecc277ededc0e803296](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\c9982422351f6ecc277ededc0e803296.png)

逻辑删除优化

![edb312802503c8139e9606f8ae74f0d8](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\edb312802503c8139e9606f8ae74f0d8.png)

确实
比如云盘项目-就是要过滤这些条件

![c7bda4e8f8266db45e4908e922627b8a](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\c7bda4e8f8266db45e4908e922627b8a.png)

配置逻辑删除

![0dd9aceaa2940ed98150df3ea6b48312](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\0dd9aceaa2940ed98150df3ea6b48312.png)

查询测试

![64779cb8ce59b7e93069adc874ce93ed](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-05\Ori\64779cb8ce59b7e93069adc874ce93ed.png)

通用枚举

![60a018a6f80a6f46b6c5c4f5bf7fb176](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\60a018a6f80a6f46b6c5c4f5bf7fb176.png)

mybits->提供枚举类型与数据库类型自动转换

![cb75a3b930d23430174c125921d14601](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\cb75a3b930d23430174c125921d14601.png)


![c4934929e1a9c7b79d79f04adf975105](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\c4934929e1a9c7b79d79f04adf975105.png)

同时,为了使页面查询结果也是枚举格式,我们需要修改UserVO中的status属性:

![28cfbac5f5fa1ffc563eb851a3f65f25](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\28cfbac5f5fa1ffc563eb851a3f65f25.png)

0---会自动根据数字-对应正常或者冻结

json类型处理器

数据库的user表中有一个info字段,是JSON类型
而目前User实体类中却是String类型
无法快捷拿出

info的类型最好是一个Map或者实体类。

而一旦我们把info改为对象类型,就需要在写入数据库时手动转为String,

再读取数据库时-json,手动转换为对象,这会非常麻烦。

因此MybatisPlus提供了很多特殊类型字段的类型处理器,解决特殊字段类型与数据库类型转换的问题。例如处理JSON就可以使用JacksonTypeHandler处理器。

![6d0855f286d0ffdb19096463987947fb](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\6d0855f286d0ffdb19096463987947fb.png)

--自动将json->对象

对象->转json

分页查询

1.配置分页插件

![12944f422088ff0097b7beb2b0d835d3](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\12944f422088ff0097b7beb2b0d835d3.png)

2.分页api

![5ff54336615930e257c9488448fbf8da](G:\360MoveData\Users\nixg\Documents\Tencent Files\2760045743\nt_qq\nt_data\Pic\2024-04\Ori\5ff54336615930e257c9488448fbf8da.png)

posted @ 2024-05-11 10:38  逆向狗  阅读(108)  评论(0)    收藏  举报