• MyBatis-Plus(二、常用注解)


    作者:大三的土狗

    专栏:MyBatis-Plus

    在这里插入图片描述

    前言


      现如今注解开发变得非常方便,代码简洁,开发速度大大提高,成为开发的潮流,当然MyBatis-Plus提供了也很多注解,来简化我们的开发,提高我们的开发效率,本文将介绍mybatis-plus常见的注解及使用方法。


    1、@TableName

    @TableName
    描述:表名注解,标识实体类对应的表
    使用位置:实体类

    用法:映射数据库的表名,如果数据库表名与实体类名不一致,用@TableName来映射。

    package com.example.mybatisplus.entiy;
    
    import com.baomidou.mybatisplus.annotation.TableName;
    import lombok.Data;
    
    @Data
    @TableName("mp")        //表名
    public class User {
        private String id;
        private String name;
        private String age;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    当数据库表名与实体类名不一致,报错如下:
    在这里插入图片描述

    2、@TableId

    @TableId
    描述:主键注解
    使用位置:实体类主键字段

    设置主键映射

    1)value

    • value 映射主键字段名

    在这里插入图片描述

    2)type

    • type 设置主键类型,主键的生成策略
    AUTO(0),
    NONE(1),
    INPUT(2),
    ASSIGN_ID(3),
    ASSIGN_UUID(4),
    
    /** @deprecated */
    @Deprecated				#已不推荐
    ID_WORKER(3),
    /** @deprecated */
    @Deprecated				#已不推荐
    ID_WORKER_STR(3),
    /** @deprecated */
    @Deprecated				#已不推荐
    UUID(4);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    描述
    AUTO数据库自增
    NONEMP set 主键,雪花算法实现
    INPUT需要开发者手动赋值
    ASSIGN_IDMP 分配 ID,Long、Integer、String
    ASSIGN_UUID分配 UUID,Strinig
    • INPUT 如果开发者没有手动赋值,则数据库通过自增的方式给主键赋值,如果开发者手动赋值,则存入该值。

    • AUTO 默认就是数据库自增,开发者无需赋值。

    • ASSIGN_ID MP 自动赋值,雪花算法。

    • ASSIGN_UUID 主键的数据类型必须是 String ,自动生成 UUID 进行赋值。

    例如:

    在这里插入图片描述

    编写测试类

    	@Test
        void save(){
            User user = new User();
            user.setName("张三");
            user.setAge(20);
            userMapper.insert(user);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Id成功按策略插入成功

    在这里插入图片描述

    3、@TableField

    @TableField
    描述:字段注解(非主键)

    映射非主键字段,value 映射字段名

    例如:

    当字段名与数据库字段名不一致时,报错如下:
    在这里插入图片描述

    正确写法:
    在这里插入图片描述

    1)exist

    • exist 表示是否为数据库字段 false,如果实体类中的成员变量在数据库中没有对应的字段,则可以使用 exist,VO、DTO

    当添加数据库没有的字段时,报错如下:

    在这里插入图片描述

    加上@TableField(exist = false),表示在数据库中没有对应的字段,即可查询成功。

    在这里插入图片描述

    2)select

    • select 表示是否查询该字段
      在这里插入图片描述

    3)fill

    • fill 表示是否自动填充,如create_time、update_time

    1、增加字段

    在这里插入图片描述

    2、扩充实体类

    	@TableField(fill = FieldFill.INSERT)        //填充字段
        private Date createTime;
    
        @TableField(fill = FieldFill.INSERT_UPDATE)         //填充字段
        private Date updateTime;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、MetaObjectHandler

    创建MyMetaObjectHandler类 implements MetaObjectHandler,重写两个方法。

    package com.example.mybatisplus.handle;
    
    import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    import org.apache.ibatis.reflection.MetaObject;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
        @Override
        public void insertFill(MetaObject metaObject) {
            this.setFieldValByName("createTime", System.currentTimeMillis(), metaObject);   // 创建时间 或者new Date()
            this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject);   // 更新时间
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject);   // 更新时间
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4、Test

    在这里插入图片描述

    4、@Version

    @Version
    描述:乐观锁注解、标记 @Verison 在字段上

    标记乐观锁,通过 version 字段来保证数据的安全性,当修改数据的时候,会以 version 作为条件,当条件成立的时候才会修改成功。

    1、数据库表添加 version 字段,默认值为 1

    在这里插入图片描述

    2、实体类添加 version 成员变量,并且添加 @Version

      
        @Version
        private Integer version;                //乐观锁
    
    
    • 1
    • 2
    • 3
    • 4

    3、配置类

    package com.example.mybatisplus.config;
    
    import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration      // 声明为配置类
    public class MyConfig {
    
        @Bean
        public OptimisticLockerInterceptor optimisticLockerInterceptor(){
            return new OptimisticLockerInterceptor();                       // 创建一个 OptimisticLockerInterceptor 对象
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    测试:version 1–>2
    在这里插入图片描述

    5、@EnumValue

    @EnumValue
    描述:普通枚举类注解(注解在枚举字段上)

    1)枚举类注解实现

    通用枚举类注解,将数据库字段映射成实体类的枚举类型成员变量

    1、设计表
    在这里插入图片描述

    2、实体类添加字段

    private StatusEnum status;              //状态    枚举类型
    
    • 1

    3、创建枚举类

    package com.example.mybatisplus.enums;
    
    import com.baomidou.mybatisplus.annotation.EnumValue;
    
    public enum StatusEnum {        //枚举类   enum类型的类
    
        //奖励1  惩罚0
        reward(1,"奖励"),punishment(0,"惩罚");
    
        @EnumValue
        private Integer code;
        private String msg;
    
        StatusEnum(Integer code, String msg) {
            this.code = code;
            this.msg = msg;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4、application.yml

    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl     # 日志实现类  -->打印sql
    
      type-enums-package:
        com.example.mybatisplus.enums        # 实现类所在的包		这里
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5、测试

    查询id为1、2,其对应status分别为1、0

    在这里插入图片描述

    2)接口实现

    import com.baomidou.mybatisplus.core.enums.IEnum;
    
    public enum SexEnum implements IEnum<Integer> {
        
        ONE(1,"男"),
        TWO(0,"女"),
    
        private Integer code;
        private String msg;
    
        AgeEnum(Integer code, String msg) {
            this.code = code;
            this.msg = msg;
        }
    
        @Override
        public Integer getValue() {
            return this.code;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    6、@TableLogic

    @TableLogic
    描述:表字段逻辑处理注解(逻辑删除)

    映射逻辑删除

    1、数据表添加 identification字段

    在这里插入图片描述

    2、实体类添加注解

    	@TableLogic
        private Integer identification;         //是否删除标识
    
    • 1
    • 2

    3、application.yml 添加配置

    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl     # 日志实现类  -->打印sql
    
      type-enums-package:
        com.example.mybatisplus.enums        # 实现类所在的包
      global-config:
        db-config:
          logic-not-delete-value: 0     # 逻辑删除的值
          logic-delete-value: 1         # 逻辑删除的值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4、测试

    删除id为2的User,identification标识 0–>1

    在这里插入图片描述

    再次查询数据库,查不到id为2的User,逻辑删除实现。

    在这里插入图片描述

    7、@SqlParser

    描述:序列主键策略 oracle
    属性:value、resultMap

    8、@InterceptorIgnore

    see 插件主体

    9、@OrderBy(opens new window)

    描述:内置 SQL 默认指定排序,优先级低于 wrapper 条件查询
    属性 类型 必须指定 默认值 描述


    总结

       以上就是MyBatis-Plus的常用注解,其中1-6最为常见,使用频率较高,很符合开发某些场景,注解开发可以大大节省我们的时间,简化不必要的开发,因此学好注解开发是大势所趋。

  • 相关阅读:
    重学JavaSE 第19章 : Java9新特性、Java10新特性、Java11新特性
    港科夜闻|香港科技大学校长叶玉如教授,新加坡国立大学曾运雄博士:发现阿尔茨海默病新疗法...
    如何在Git中修改远程仓库地址
    Gmail邮箱注册情况及最新动态
    云计算发展
    什么是MES(Manufacturing Execution System)
    MySql操作
    SQL语法基础-其他函数V
    LeetCode --- 1356. Sort Integers by The Number of 1 Bits 解题报告
    使用VNA(Vector Network Analyzer)对S参数进行去嵌(一)
  • 原文地址:https://blog.csdn.net/qq_53463544/article/details/126335836