目录
MybatisPlus顾名思义就是Mybatis的plus版本,但是他并不是要取代Mybatis,而是希望能成为Mybatis最好的搭档。
MybatisPlus具有很多能够帮助我们日常开发的功能,比如引入其不会对我们的工程造成任何影响,我们依旧可以使用Mybatis,只做增强不做改变;
只需要简单的配置就可以快速的进行单表的增删改查操作;
内置许多丰富的功能,代码生成、自动分页、逻辑删除、自动填充等;
一.快速入门
1.1 入门案例
通过一个入门案例感受MybatisPlus进行单表的增删改查。
现在写了一个小案例,其中的功能有新增用户、根据id查询用户、根据id批量查询用户、根据id更新用户、根据id删除用户这些简单的crud功能。
这是对应数据库中的数据。
如果是使用mybatis我们的写法是这样的。
但是如果我们使用MybatisPlus呢?
首先我们需要进行配置。
接着在mapper接口中继承BaseMapper,并指定对应的实体类。
准备好这两步之后我们的开发就变成了下图这些效果。
并且测试这些方法也是没问题的。
使用MybatisPlus很简单,只需要注入对应的好赖,Mapper接口继承BaseMapper即可。
1.2 常用注解
- @TableName:用来指定表名
当在实体类名与数据库名称不一致时,需要使用@TableName指定表名,如果没有注解那么默认是驼峰转下划线的方式定义表名;
- @TableId:用来指定表中的主键字段信息
这个注解是用来指定表中的主键字段信息的,还可以定义除了名称外的其他参数,比如type:idType枚举,AUTO表示数据库自增长,INPUT表示通过set方法自行输入.....
- @TableField:用来指定表中的普遍字段信息
这个主键是指定普通字段信息,当成员变量名与数据库字段不一致那么需要使用该注解进行修正,当成员变量名以is开头,并且是布尔类型的,那么默认在数据库中会将is去掉,所以我们也需要加上该注解,当成员变量名与数据库关键字冲突时,需要使用转义字符例如"`order`",当成员变量不是数据库中的字段也需要使用。
这里需要注意如果主键id为自增,那么需要指定自增类型(type= IdType.AUTO),否则默认是雪花算法生成的。
1.3 常用配置
二.核心功能
2.1 条件构造器
2.1.1 基于QueryWrapper的查询
我们平时写的sql,就算是增删改查,但是也常涉及到条件判断,所以简单自带的sql可能无法满足我们的需求,所以我们就需要使用条件构造器。
这就是一个查询对应字段,条件为名字有带"o",且账户余额大于等于1000的用户。
接下来再写一个更新语句,更新"jack"的账户余额为2000。
2.1.2 基于UpdateWrapper的更新
有一个需求为更新用户id为1,2,4的用户账户余额扣200,我们需要怎么做,在上方因为是只需要变更一个用户的,所以我们直接set进对象。
如果正常写sql,应该是这样的 update user blance = blance-200 where id in(1,2,4)
接下来我们看看使用条件构造器如何编写。
但是我们可以看到如上方QueryWrapper的查询语句,我们的字段都是写死的,这样会导致硬编码,为了避免硬编码,尽量使用LambadQueryWrapper和LambadUpdateWrapper。
2.2 自定义SQL
这里的自定义SQL是什么意思呢?
mp不是帮我们构建好了SQL吗?
在企业编码规范中,在业务层编写sql是不被允许的,那么我们就需要使用自定义SQL。
我们可以利用mp的wrapper来构建复杂的where条件,然后自定义SQL语句中剩下的部分。
接下来我们就来看看写法。
2.3 Service接口
自定义的接口可以继承Service接口,其中有许多增删改查的方法,但是继承了Service接口后,对应的实现类也需要继承ServiceImpl,这里面就是Service方法的实现。
接下来让我们来看看使用IService接口开发一些业务接口。
下面是对应的实现
我们也可以到对应简单的业务我们甚至都只需要编写controller里的代码即可,但是实际的开发也是都这么简单的业务的,对应比较复杂的业务就需要我们自定义sql,比如这里的第五个接口:扣减用户余额我们需要先根据id来找到对应的用户,再查看其状态是否可用,最后判断其余额是否充足才能进行扣减。
接下来我们来看看IService的Lambda方法。
需求是这样的:实现一个根据复杂条件查询用户的接口,查询条件如下
- name:用户名关键字,可以为空
- status:用户状态,可以为空
- minBalance:最小余额,可以为空
- maxBalance:最大余额,可以为空
我们用Mybatis写sql的时候应该是这样写的
接下来就看看使用IService的Lambda方法如何编写。
除了查询,Lambda还提供了更新方法。
需求为:改造根据id修改用户余额的接口,要求为,完成用户状态校验,完成用户余额校验,如果扣减后余额为0,则用户status修改为冻结状态(2)。
看这个我们可以发现这与我们之前写的更新很像,无法是加入了用户状态的修改,让我们看看之前的写法。
这里我们使用Lambda的更新方法改造一下。
这样就实现了我们的需求了。
至于MyBatisPlus的扩展功能和插件功能有兴趣的可以去看看b站黑马的MybatisPlus课程。
自我感觉使用MybatisPlus有一定程度上,让代码变得混乱,所以我还是比较偏向于继续使用myabtis。