MyBatis-Plus使用技巧

/ 1评 / 0

最近在用 Mybatis-Plus,嗯,是真他妈香!!!今天就来说说 Mybatis-Plus 的那些使用技巧

创建user表

注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)

导入依赖

创建application.yml

业务代码

实体类

mapper接口

注意点,我们需要在主启动类上去扫描我们的mapper包下的所有接口 @MapperScan(value = "com.glj.securitydemo.mapper")

测试

配置日志

application.yml文件添加日志配置:

Mybatis-plus的CRUD

插入操作

看到id会自动填充。数据库插入的id的默认值为:全局的唯一id

主键生成策略

1)主键自增 1、实体类字段上 @TableId(type = IdType.AUTO)

@Tableid

属性 类型 必须指定 默认值 描述
value String "" 主键字段名
type Enum IdType.NONE 主键类型

IdType

描述
AUTO 数据库ID自增
NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
INPUT insert前自行set主键值
ASSIGN_ID 分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
ASSIGN_UUID 分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认default方法)
ID_WORKER 分布式全局唯一ID 长整型类型(please use ASSIGN_ID)
UUID 32位UUID字符串(please use ASSIGN_UUID)
ID_WORKER_STR 分布式全局唯一ID 字符串类型(please use ASSIGN_ID)

具体注解到:https://mp.baomidou.com/guide/annotation.html#tablename

2、数据库id字段设置为自增!

3、再次测试(可以看到id值比上次插入的大1)id的生成策略源码解释

更新操作

自动填充

创建时间、修改时间!这两个字段操作都是自动化完成的,我们不希望手动更新!阿里巴巴开发手册:所有的数据库表都要配置上gmt_create、gmt_modified!而且需要自动化!

1、在表中新增字段 gmt_create, gmt_modified

2、实体类字段属性上需要增加注解

3.编写处理器来处理这个注解

乐观锁

乐观锁 : 顾名思义,十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题, 再次更新值测试 悲观锁:顾名思义,十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!

乐观锁实现方式:

取出记录时,获取当前version 更新时,带上这个version 执行更新时, set version = newVersion where version = oldVersion 如果version不对,就更新失败

乐观锁测试:

1.给数据库中增加version字段

2.实体类加对应的字段

3.配置类

4.测试

查询操作
普通查询

条件查询(QueryWrapper)

如果说,我们需要查询的 SQL 语句如下:

那么对应的代码可以为:

条件查询(QueryWrapper lambda)

普通分页查询

1、配置拦截器组件

2、直接使用Page对象

分页查询(联表)

当我们需要关联表格分页查询时,普通分页查询已经满足不了我们的需求了,那么我们需要进行联表分页查询

假设我们需要的 SQL 语句如下:

那么我们需要进行如下操作

1、新建 UserVO.java

2.UserMapper.java 中新增:

3.编写代码

以上就是分页查询(联表)时的操作,这个应该是用的比较多的

AND 和 OR深入

queryWrapper 默认是按照 and 来连接的,但是在我们业务需求中,肯定会用到 or 来写 SQL

1.刚使用

假设我们需要的 SQL 语句如下:

那么我们可以这样写

以上就完成了初级的 and 和 or 联用的情况

2.咱们开始进阶了~

假设我们需要的 SQL 语句如下:

那么我们可以这样写:

以上就完成了复杂的 and 和 or 联用的情况

那么以后遇见更复杂的,可以按此规则继续进行拼接 SQL

具体查看官网API:https://mp.baomidou.com/guide/wrapper.html#abstractwrapper

 

指定查询字段(select)

当我们只需要查询表格中的某几个字段,如果表格数据很大的话,我们不应该查询表格的所有字段,假如,我们需要的 SQL 如下:

我们只需要查询年龄等于24的用户的 id、name、age,所以,可以这样写:

 

删除操作
物理删除

逻辑删除

物理删除 :从数据库中直接移除

逻辑删除 :在数据库中没有被移除,而是通过一个变量来让它失效!

deleted = 0 => deleted = 1 管理员可以查看被删除的记录!防止数据的丢失,类似于回收站!

1、在数据表中增加一个 deleted 字段

2、实体类中增加属性

3、配置文件:

4、测试删除

注意:自己在 xml 文件中写的 SQL 不会自动加上逻辑删除条件

最后更多技巧请参考官网:https://mp.baomidou.com/

一条回应:“MyBatis-Plus使用技巧”

  1. 速卖通刷单说道:

    总结得太好了!大长见识!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注