java基础学习|mybatis-plus的介绍和使用

**
一、mybatis-plus简介: **
Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。这是官方给的定义,关于mybatis-plus的更多介绍及特性,可以参考mybatis-plus官网。那么它是怎么增强的呢?其实就是它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA。在这里的是基于mp3.0版本来进行讲解的,2.0和3.0的使用差不多,只是一些API的名字不同而已。
二、spring整合mybatis-plus:

com.baomidou mybatis-plus 3.0.3

com.baomidou mybatis-plus-boot-starter 3.3.1.tmp

以及相关数据库的环境配置,和mybatis整合springboot是一样的
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///数据库名?useUnicode=true&characterEncoding=utf8
jdbc.username=#
jdbc.password=#
三、mp示例 构造一个对象,加上相关的mp的注解:
java基础学习|mybatis-plus的介绍和使用
文章图片

一般作用待entity上的常用注解包括:
@TableName,用value来进行标记表名
@TableId,用于标记主键。且可以指定主键的类型。官网常用的有
java基础学习|mybatis-plus的介绍和使用
文章图片

@TableField(exist = false),这个标记一般用来排除那些不是数据库的字段。
定义玩vo后可以定义dao。继承BaseMapper,这种形式一般是用于单表进行操作的,如果涉及到了复杂化的多表操作还是要进行写SQL的。
这里的泛型即后面想要操作的表对应的对象
public interface EmplopyeeDao extends BaseMapper { } public interface EmplopyeeService extends IBaseService { }

同样如果使用service来继承IBaseService,也可以使用service.方法名进行调用的
常规的一些crud操作:(直接可以用service.方法名即可进行调用)
java基础学习|mybatis-plus的介绍和使用
文章图片

java基础学习|mybatis-plus的介绍和使用
文章图片

java基础学习|mybatis-plus的介绍和使用
文章图片

备注:这个saveOrUpdate方法是根据主键来进行判断的,即数据里面存在改对象的主键对应数据则更新,否则进行添加。
java基础学习|mybatis-plus的介绍和使用
文章图片

get操作一般是用来获取单个的对象:
java基础学习|mybatis-plus的介绍和使用
文章图片

java基础学习|mybatis-plus的介绍和使用
文章图片

针对我们常见的page分页的问题,mp可以这样子使用:
最简单的是直接注入pageBean
@Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); }

然后就可以直接使用相关的API进行分页查询了。
java基础学习|mybatis-plus的介绍和使用
文章图片

*四、条件构造器(EntityWrapper):
在上面的很多地方会看到相关的wrapper,可以理解在我们日常的开发工作中,很多时候写一些SQL语句是需要进行where条件来进行筛选的。这个就是mp为我们提供的wrapper来做的事情。自由构造我们需要的SQL条件。
例如:
分页查询年龄在18 - 50且gender为0、姓名为tom的用户
List employees = emplopyeeDao.selectPage(new Page(1,10), new EntityWrapper() .between("age",18,50) .eq("gender",0) .eq("last_name","tom") );

一些常用的wrapper有:(使用方式类似于上面示例,直接调用API就行了)
eq:等于 ne:不等于 between:A,B之间 like:"%值%"
likeLeft:"%值" likeRight:“值%”(用这个主要是为了避免索引失效时) isNull isNotNull
groupBy orderBy
这里重点说一下他的or,and。
例: eq(“id”,1).or().eq(“name”,“老王”)—>id = 1 or name = ‘老王’
例:or(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))—>or (name = ‘李白’ and status <> ‘活着’)
这里就对应在某些SQL中,会需要加or部分进行包装,这里一般在写的时候也会要多加注意的。在2.0版本中是用or()和orNew()的方式来进行SQL的动态拼接
例 :and(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))—>and (name = ‘李白’ and status <> ‘活着’),默认情况下调用多个API的时候,是会在SQL语句中直接加上and的,如果像这种情况需要将某一块进行包裹就要采用这种方式。
五、额外补充: 针对某些情况下,我们希望通过数据库乐观锁的方式来对数据进行操作,就可以使用到mp提供的乐观锁实现
java基础学习|mybatis-plus的介绍和使用
文章图片

@Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; }

然后再对应的vo的某字段属性上面加上
【java基础学习|mybatis-plus的介绍和使用】@Version
private Integer version;

    推荐阅读