少女祈祷中...

1.MyBatisPlus简介

1.1概念

MyBatisPlus 是基于 MyBatis 框架基础上开发的增强工具,简化开发,提高效率

  1. 无侵入:只做增强不做改变,不会对现有工程产生影响 强大的 CRUD
  2. 操作:内置通用 Mapper,少量配置即可实现表单 CRUD 操作
  3. 支持 Lambda:编写查询条件无需担心写错字段
  4. 支持主键自动生成
  5. 内置分页插件

2.标准数据层开发

标准数据层CRUD功能

功能 自定义接口 MP接口
新增 boolean sane(T t) int insert(T t)
删除 boolean delete(int id) int deleteById(Serializable id)
修改 boolean update(T t) int updateById(T t)
根据id查询 T getById(int id) T selectById(Serializable id)
查询全部 List<T> getAll() List<T> selectList()
分页查询 PageInfo<T> getAll(int page,int size) IPage<T> selectPage(Ipage<T> page)
按条件查询 List<T> getAll(Condition condition) Ipage<T> selectPage(Wrapper<T> queryWrapper)

3.DQL编程控制

3.1条件查询方式

3.1.1lambda格式

1
2
3
4
QueryWrapper<User> qw = new QueryWrapper<User>();
qw.lambda().lt(User::getAge,65).ge(USer::getAge,18);
List<User> userList = userDao.selectList(qw);
System.out.println(userList)

3.1.2lambda格式

1
2
3
4
LambdaQueryWarpper<User> lqw = LambdaQueryWrapper<User>();
lqw.lt(User::getAge, 65).ge(User::getAge,18);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);

3.2条件查询-null值处理

1
2
3
LambdaQueryWrapper lqw = new LambdaQueryWrapper<User>();
lqw.lt(user.getAge != null, User::getAge);
List<User> list = userDao.selectList(lqw);

3.3查询条件设置

1
2
3
LambdaQueryWrapper lqw = new LambdaQueryWrapper<User>();
lqw.eq(User.getName, user.getName());
List<User> list = userDao.selectList(lqw);

3.4字段映射与表名映射

3.4.1字段映射

  1. 名称:@TableFiled
  2. 类型:属性注解
  3. 位置:模型类属性定义上方
  4. 作用:设置当前属性对应的数据库表中的字段关系
  5. 相关属性:

​ value:设置数据库表字段名称

​ exist:设置属性在数据库表字段中是否存在,默认为true。此属性无法与value合并使用

​ select:设置属性是否参与查询,此属性与select()映射配置不冲突

1
2
3
4
5
6
public class User {
@TableField(value = "pwd",select = false)
private String password;
@TableField(existt = false)
private Integer online;
}

3.4.2表名映射

  1. 名称: TableName
  2. 类型:类注解
  3. 位置:模型类定义上方
  4. 作用:设置当前类对应与数据库表关系
  5. 相关属性:

​ value:设置数据库表名称

1
2
3
4
@TableName("tbl_user")
public class User {
private Long id;
}

3.5id生成策略控制

3.5.1不同id生成策略

  1. AUTO (0):使用数据库 id 自增策略控制 id 生成
  2. NONE (1):不设置 id 生成策略
  3. INPUT (2):用户手工输入 id
  4. ASSIGN (3):雪花算法生成 id(可兼容数值型与字符串型)
  5. ASSIGN_UUID (4):以 UUID 生成算法作为 id 生成策略

3.5.2id生成策略注解

  1. 名称:@TableId
  2. 类型:属性注解
  3. 位置:模型类中用于表示主键的属性定义上方
  4. 作用:设置当前类中主键属性的生成策略
  5. 相关属性:

​ value:设置数据库表字段名称

​ type:设置主键属性的生成策略,值参照IdType枚举值

1
2
3
4
5
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
}

3.5.3全局配置 id 生成策略

1
2
3
4
5
mybatis-plus:
golbal-config:
db-config:
id-Type: aoto
table-prefix: tbl_

3.6逻辑删除

3.6.1概述

  1. 删除操作业务问题:业务数据从数据库中丢弃
  2. 逻辑删除:为了数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中

3.6.2实现步骤

3.6.2.1数据库添加逻辑删除标记字段

3.6.2.2乐观锁

  1. 数据库表中添加锁标记字段
  2. 实体类中添加对应字段,并设定当前字段为逻辑删除标记字段@version
  3. 配置乐观锁拦截器实现锁机制对应的动态SQL语句拼装
1
2
3
4
5
6
7
8
9
@Configuration
public class MpConfig {
@Bean
public MyBatisPlusInterceptor mpInterceptor() {
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mpInterceptor;
}
}