写点什么

MyBatis-Plus(二、常用注解)

作者:
  • 2022 年 9 月 16 日
    河南
  • 本文字数:3047 字

    阅读完需:约 10 分钟

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;}
复制代码



当数据库表名与实体类名不一致,报错如下:



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);
复制代码




  • INPUT 如果开发者没有手动赋值,则数据库通过自增的方式给主键赋值,如果开发者手动赋值,则存入该值。

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

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

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


例如:


编写测试类


  @Test    void save(){        User user = new User();        user.setName("张三");        user.setAge(20);        userMapper.insert(user);    }
复制代码


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;
复制代码


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;
@Componentpublic 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); // 更新时间 }}
复制代码


4、Test



4、@Version

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


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


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



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


      @Version    private Integer version;                //乐观锁
复制代码


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 对象 }
}
复制代码


测试:version 1-->2



5、@EnumValue

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

1)枚举类注解实现

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


1、设计表



2、实体类添加字段


private StatusEnum status;              //状态    枚举类型
复制代码


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; }}
复制代码


4、application.yml


mybatis-plus:  configuration:    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl     # 日志实现类  -->打印sql
type-enums-package: com.example.mybatisplus.enums # 实现类所在的包 这里
复制代码


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; }}
复制代码

6、@TableLogic

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


映射逻辑删除


1、数据表添加 identification 字段



2、实体类添加注解


  @TableLogic    private Integer identification;         //是否删除标识
复制代码


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 # 逻辑删除的值
复制代码


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 最为常见,使用频率较高,很符合开发某些场景,注解开发可以大大节省我们的时间,简化不必要的开发,因此学好注解开发是大势所趋。

发布于: 刚刚阅读数: 5
用户头像

关注

在校大三学生一枚 2022.08.02 加入

喜欢学习编程,擅长技术栈JAVA

评论

发布
暂无评论
MyBatis-Plus(二、常用注解)_注解_斯_InfoQ写作社区