MyBatis Plus-简单使用

2022-04-29  本文已影响0人  石头耳东

零、本文纲要

  1. Dao接口被容器扫描的方式
  2. MyBatis Plus与MyBatis整合开发区别
  1. 分页查询方法
  2. 分页查询参数构造
  3. 分页拦截器配置
  1. 表字段与编码属性不同
  2. 编码中含有数据库未定义的属性
  3. 某个字段不做查询输出
  4. 表名与编码实体类名不一致
  5. @TableField注解
  6. @TableName注解
  1. @TableId
  2. ID生成策略
  3. 逻辑删除

一、MyBatis Plus

1. Dao接口被容器扫描的方式

在Dao接口上添加@Mapper注解,并且确保Dao处在引导类所在包或其子包中

在引导类上添加@MapperScan注解,其属性为所要扫描的Dao所在包

2. MyBatis Plus与MyBatis整合开发区别

基础依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

其余配置不变,Dao接口、Service接口与实现类做如下调整:

① Dao/Mapper接口继承BaseMapper<?>
② Service接口继承IService<?>
③ 实现类继承ServiceImpl<?, ?>

二、 分页拦截器

1. 分页查询方法

IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)

2. 分页查询参数构造

IPage<User> page = new Page<>(currentPage, pageSize);

该参数非必须,条件查询时使用。一般使用QueryWrapper实现类,或者LambdaQueryWrapper<?>实现类。

3. 分页拦截器配置

编写一个配置类,自定义MybatisPlusInterceptor的bean,其内部设置PaginationInnerInterceptor拦截器即可。如下:

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //1 创建MybatisPlusInterceptor拦截器对象
        MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();
        //2 添加分页拦截器
        mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mpInterceptor;
    }
}

三、 DQL映射匹配

1. 表字段与编码属性不同

假设密码,表字段为pwd,属性为password。则采用如下方法映射:

@TableField(value = "pwd")
private String password;

2. 编码中含有数据库未定义的属性

比如UserDto里面含有OrderId,但是tbl_user表不含order_id,则采用如下映射:

@TableField(exist = false)
private Long OrderId;

3. 某个字段不做查询输出

比如tbl_user表的pwd属性,限制该字段的查询输出,如下配置:

@TableField(value = "pwd", select = false)
private String password;

select属性默认值为true,改为false则查询时不输出。

4. 表名与编码实体类名不一致

比如名为tbl_user表,实体类为User,需要配置:

@TableName("tbl_user")
public class User{
    ... ...
}

各类情形整合,如下:

@Data
@TableName("tbl_user")
public class User {
    private Long id;
    private String name;
    @TableField(value="pwd",select=false)
    private String password;
    private Integer age;
    private String tel;
    @TableField(exist=false)
    private Integer online;
}

5. @TableField注解

类属性上方

value(默认):设置数据库表字段名称
exist:设置属性在数据库表字段中是否存在,默认为true,此属性不能与value合并使用
select:设置属性是否参与查询,此属性与select()映射配置不冲突

6. @TableName注解

类上方

value(默认):设置数据库表名称

四、 DML编程控制

1. @TableId

类属性上方

value(默认):设置数据库表主键名称
type:设置主键属性的生成策略,值查照IdType的枚举值

2. ID生成策略

@TableId(type = IdType.AUTO)
private Long id;

与NONE策略一致,需要手动设置ID

通过雪花算法生成ID

主键varchar类型32位

3. 逻辑删除

如果只是对单个实体设置逻辑删除,则可以如下使用:

@TableLogic(value="0",delval="1")
//value为正常数据的值,delval为删除数据的值
private Integer deleted;

注意:需要在对应表内也添加delete字段。

mybatis-plus:
  global-config:
    db-config:
      # 逻辑删除字段名
      logic-delete-field: deleted
      # 逻辑删除字面值:未删除为0
      logic-not-delete-value: 0
      # 逻辑删除字面值:删除为1
      logic-delete-value: 1

五、 乐观锁

1. 快速入门

@Version
private Integer version;

也可以与分页拦截器添加在一起,如下:

@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor() {
        //1.定义Mp拦截器
        MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
        //2.添加乐观锁拦截器
        mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mpInterceptor;
    }
}
@Test
void testUpdate(){
    //1.先通过要修改的数据id将当前数据查询出来
    User user = userDao.selectById(1L);
    //2.将要修改的属性逐一设置进去
    user.setName("Test02");
    userDao.updateById(user);
}

六、结尾

以上即为MyBatis Plus-简单使用的全部内容,感谢阅读。

上一篇下一篇

猜你喜欢

热点阅读