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的注解:
mybatis-plus的介绍和使用_第1张图片
一般作用待entity上的常用注解包括:

@TableName,用value来进行标记表名

@TableId,用于标记主键。且可以指定主键的类型。官网常用的有
mybatis-plus的介绍和使用_第2张图片
@TableField(exist = false),这个标记一般用来排除那些不是数据库的字段。
定义玩vo后可以定义dao。继承BaseMapper,这种形式一般是用于单表进行操作的,如果涉及到了复杂化的多表操作还是要进行写SQL的。
这里的泛型即后面想要操作的表对应的对象

public interface EmplopyeeDao extends BaseMapper<Employee> {
}
public interface EmplopyeeService extends IBaseService<Employee> {
}

同样如果使用service来继承IBaseService,也可以使用service.方法名进行调用的
常规的一些crud操作:(直接可以用service.方法名即可进行调用)
mybatis-plus的介绍和使用_第3张图片
mybatis-plus的介绍和使用_第4张图片
mybatis-plus的介绍和使用_第5张图片
备注:这个saveOrUpdate方法是根据主键来进行判断的,即数据里面存在改对象的主键对应数据则更新,否则进行添加。
mybatis-plus的介绍和使用_第6张图片
get操作一般是用来获取单个的对象:
mybatis-plus的介绍和使用_第7张图片
mybatis-plus的介绍和使用_第8张图片
针对我们常见的page分页的问题,mp可以这样子使用:
最简单的是直接注入pageBean

@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}

然后就可以直接使用相关的API进行分页查询了。
mybatis-plus的介绍和使用_第9张图片

*四、条件构造器(EntityWrapper):

在上面的很多地方会看到相关的wrapper,可以理解在我们日常的开发工作中,很多时候写一些SQL语句是需要进行where条件来进行筛选的。这个就是mp为我们提供的wrapper来做的事情。自由构造我们需要的SQL条件。

例如:

分页查询年龄在18 - 50且gender为0、姓名为tom的用户

List<Employee> employees = emplopyeeDao.selectPage(new Page<Employee>(1,10),
new EntityWrapper<Employee>()
.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提供的乐观锁实现
mybatis-plus的介绍和使用_第10张图片

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

然后再对应的vo的某字段属性上面加上

@Version
private Integer version;

你可能感兴趣的:(java基础学习,spring,mysql,数据库)