美文网首页
MyBatis Plus-简单使用

MyBatis Plus-简单使用

作者: 石头耳东 | 来源:发表于2022-04-29 15:15 被阅读0次

    零、本文纲要

    • 一、MyBatis Plus
    1. Dao接口被容器扫描的方式
    2. MyBatis Plus与MyBatis整合开发区别
    • 二、 分页拦截器
    1. 分页查询方法
    2. 分页查询参数构造
    3. 分页拦截器配置
    • 三、 DQL映射匹配
    1. 表字段与编码属性不同
    2. 编码中含有数据库未定义的属性
    3. 某个字段不做查询输出
    4. 表名与编码实体类名不一致
    5. @TableField注解
    6. @TableName注解
    • 四、 DML编程控制
    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<T>参数
    IPage<User> page = new Page<>(currentPage, pageSize);
    
    • ② Wrapper<T>参数

    该参数非必须,条件查询时使用。一般使用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生成策略

    • ① AUTO数据库自增策略
    @TableId(type = IdType.AUTO)
    private Long id;
    
    • ② INPUT手动设置ID策略

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

    • ③ ASSIGN_ID策略

    通过雪花算法生成ID

    • ④ ASSIGN_UUID策略

    主键varchar类型32位

    3. 逻辑删除

    • ① @TableLogic注解

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

    @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字段

    • ② 实体类添加version属性

    @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;
        }
    }
    
    • ④ 执行DML
    @Test
    void testUpdate(){
        //1.先通过要修改的数据id将当前数据查询出来
        User user = userDao.selectById(1L);
        //2.将要修改的属性逐一设置进去
        user.setName("Test02");
        userDao.updateById(user);
    }
    

    六、结尾

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

    相关文章

      网友评论

          本文标题:MyBatis Plus-简单使用

          本文链接:https://www.haomeiwen.com/subject/pbysyrtx.html