• 表名注解/主键注解/字段注解/乐观锁注解[MyBatis-Plus系列] - 第486篇


    悟纤:师傅,脑瓜疼~

    师傅:徒儿这是怎么了?

    悟纤:师傅,你了解冷暴力吗?

    师傅:略懂略懂。

    悟纤:那冷暴力是怎么定义的?

    师傅:冷暴力是暴力的一种,其表现形式多为通过冷淡、轻视、放任、疏远和漠不关心,致使他人精神上和心理上受到侵犯和伤害。冷暴力是目前为社会公认的会对行为相对人造成心理、精神伤害的行为。

    悟纤:有点抽象呢。

    师傅:以下是冷暴力的一些常见表现和症状:

    (1)沉默和忽视:冷暴力者会选择沉默,忽视对方的存在和感受,不回应对方的问题或需求。可能他人的存在感到无动于衷,没有表达关心和爱的行为。

    (2)拒绝交流和沟通:冷暴力者可能会故意避免与他人建立沟通和交流的联系,不与对方交谈,独自行动,不与对方分享自己的想法和感受。

    (3)贬低和轻视:冷暴力者可能使用贬低和嘲笑的方式来打击对方的自尊心和自信心。可能以轻蔑和讽刺的语气对待对方,嘲笑对方的言行或外貌。

    悟纤:师傅,那我感觉最近有点被无视了,对方不管怎么样都不愿意开口和我沟通交流问题。

    师傅:是的,这个就是冷暴力的具体的一种表现了。

    悟纤:冷暴力真的是太折磨人了。

    师傅:确实是,可能对方没有意识到这是一种冷暴力,等大家都没有情绪的时候,还是要沟通一下,把问题抛出来,然后以后碰到问题之后,使用一种更好的方式进行问题的解决。

    师傅:关注外在不可控,还是优先关注自己的内在成长,冷暴力本身也是对自身无法解决问题的一种无奈的表现。

    悟纤:学习,学习,我要学习,我要干干斯达迪。

    导读

    Hi,大家好,我是悟纤。我就是我,不一样的烟火。我就是我,与众不同的小苹果。

    在前面的小节中,对于MyBatis-Plus的使用已经有了一个基本的了解了,本文将介绍 MybatisPlus 注解包相关类详解。

    👇🏻👇🏻👇🏻EasyPoi实战系列

    01.《MyBatis-Plus是什么以及特性[MyBatis-Plus系列]》

    02.《MyBatis-Plus快速开始 [MyBatis-Plus系列]》

    03.《MyBatis-Plus快速实现增删改 [MyBatis-Plus系列]》

    04.《MyBatis-Plus实现普通查询/分页查询[MyBatis-Plus系列]》

    05.《使用LambdaQueryWrapper再也不担心字段拼写错误了 [MyBatis-Plus系列]》

    一、@TableName

    •描述:表名注解,标识实体类对应的表

    •使用位置:实体类

    @TableName("sys_user")public class User {    private Long id;    private String name;    private Integer age;    private String email;}

    可配置的属性:

    属性

    类型

    必须指定

    默认值

    描述

    value

    String

    ""

    表名

    schema

    String

    ""

    schema

    keepGlobalPrefix

    boolean

    false

    是否保持使用全局的 tablePrefix 的值(当全局 tablePrefix 生效时)

    resultMap

    String

    ""

    xml 中 resultMap 的 id(用于满足特定类型的实体类对象绑定)

    autoResultMap

    boolean

    false

    是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建与注入)

    excludeProperty

    String[]

    {}

    需要排除的属性名 @since 3.3.1

    关于 autoResultMap 的说明:

    MP 会自动构建一个 resultMap 并注入到 MyBatis 里(一般用不上),请注意以下内容:

    因为 MP 底层是 MyBatis,所以 MP 只是帮您注入了常用 CRUD 到 MyBatis 里,注入之前是动态的(根据您的 Entity 字段以及注解变化而变化),但是注入之后是静态的(等于 XML 配置中的内容)。

    而对于 typeHandler 属性,MyBatis 只支持写在 2 个地方:

    (1)定义在 resultMap 里,作用于查询结果的封装

    (2)定义在 insert 和 update 语句的 #{property} 中的 property 后面(例:#{property,typehandler=xxx.xxx.xxx}),并且只作用于当前 设置值

    除了以上两种直接指定 typeHandler 的形式,MyBatis 有一个全局扫描自定义 typeHandler 包的配置,原理是根据您的 property 类型去找其对应的 typeHandler 并使用。

    二、@TableId

    •描述:主键注解

    •使用位置:实体类主键字段

    @TableName("sys_user")public class User {    @TableId(type = IdType.AUTO)    private Long id;    private String name;    private Integer age;    private String email;}

    可配置的属性:

    属性

    类型

    必须指定

    默认值

    描述

    value

    String

    ""

    主键字段名

    type

    Enum

    IdType.NONE

    指定主键类型

    #IdType枚举值:

    描述

    AUTO

    数据库 ID 自增

    NONE

    无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)

    INPUT

    insert 前自行 set 主键值

    ASSIGN_ID

    分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)

    ASSIGN_UUID

    分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)

    ID_WORKER

    分布式全局唯一 ID 长整型类型(please use ASSIGN_ID)

    UUID

    32 位 UUID 字符串(please use ASSIGN_UUID)

    ID_WORKER_STR

    分布式全局唯一 ID 字符串类型(please use ASSIGN_ID)

    三、@TableField

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

    public class User {    @TableId(type = IdType.AUTO)    private Long id;    @TableField(value = "nickname")    private String name;    private Integer age;    private String email;}

    可配置属性:

    属性

    类型

    必须指定

    默认值

    描述

    value

    String

    ""

    数据库字段名

    exist

    boolean

    true

    是否为数据库表字段

    condition

    String

    ""

    字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s},参考(opens new window)

    update

    String

    ""

    字段 update set 部分注入,例如:当在version字段上注解update="%s+1" 表示更新时会 set version=version+1 (该属性优先级高于 el 属性)

    insertStrategy

    Enum

    FieldStrategy.DEFAULT

    举例:NOT_NULL
    insert into table_a(column) values (#{columnProperty})

    updateStrategy

    Enum

    FieldStrategy.DEFAULT

    举例:IGNORED
    update table_a set column=#{columnProperty}

    whereStrategy

    Enum

    FieldStrategy.DEFAULT

    举例:NOT_EMPTY
    where column=#{columnProperty}

    fill

    Enum

    FieldFill.DEFAULT

    字段自动填充策略

    select

    boolean

    true

    是否进行 select 查询

    keepGlobalFormat

    boolean

    false

    是否保持使用全局的 format 进行处理

    jdbcType

    JdbcType

    JdbcType.UNDEFINED

    JDBC 类型 (该默认值不代表会按照该值生效)

    typeHandler

    Class

    UnknownTypeHandler.class

    类型处理器 (该默认值不代表会按照该值生效)

    numericScale

    String

    ""

    指定小数点后保留的位数

    关于`jdbcType`和`typeHandler`以及`numericScale`的说明:

    numericScale只生效于 update 的 sql. jdbcType和typeHandler如果不配合@TableName#autoResultMap = true一起使用,也只生效于 update 的 sql. 对于typeHandler如果你的字段类型和 set 进去的类型为equals关系,则只需要让你的typeHandler让 Mybatis 加载到即可,不需要使用注解

    #FieldStrategy

    描述

    IGNORED

    忽略判断

    NOT_NULL

    非 NULL 判断

    NOT_EMPTY

    非空判断(只对字符串类型字段,其他类型字段依然为非 NULL 判断)

    DEFAULT

    追随全局配置

    NEVER

    不加入SQL

    #FieldFill

    描述

    DEFAULT

    默认不处理

    INSERT

    插入时填充字段

    UPDATE

    更新时填充字段

    INSERT_UPDATE

    插入和更新时填充字段

    四、@Version

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

    具体案例会在后面的章节进行详细讲解。

    五、@TableLogic

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

    属性

    类型

    必须指定

    默认值

    描述

    value

    String

    ""

    逻辑未删除值

    delval

    String

    ""

    逻辑删除值

    六、@OrderBy

    •描述:内置 SQL 默认指定排序,优先级低于 wrapper 条件查询

    属性

    类型

    必须指定

    默认值

    描述

    isDesc

    boolean

    true

    是否倒序查询

    sort

    short

    Short.MAX_VALUE

    数字越小越靠前

    小结

    本文主要介绍了MP中常见的注解,用到的注解主要是:

    (1)@TableName:表名注解,标识实体类对应的表

    (2)@TableId:主键注解

    (3)@TableField:字段注解

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

    1. 我就是我,是颜色不一样的烟火。
    2. 我就是我,是与众不同的小苹果。

    à悟纤学院:https://t.cn/Rg3fKJD

    学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

    SpringBoot视频:http://t.cn/A6ZagYTi

    SpringBoot交流平台:https://t.cn/R3QDhU0

    SpringSecurity5.0视频:http://t.cn/A6ZadMBe

    ShardingJDBC分库分表:http://t.cn/A6ZarrqS

    分布式事务解决方案:http://t.cn/A6ZaBnIr

    JVM内存模型调优实战:http://t.cn/A6wWMVqG

    Spring入门到精通:https://t.cn/A6bFcDh4

    大话设计模式之爱你:https://dwz.cn/wqO0MAy7

  • 相关阅读:
    PyTorch之张量的相关操作大全 ->(个人学习记录笔记)
    利用python实现逻辑回归(以鸢尾花数据为例)
    Java 设计模式之工厂模式与单例模式
    apt,yum.apk包管理工具详解
    Java高级工程师面试总结
    osg给osg::Geometry(自己绘制的几何体)添加纹理(二)
    Arm Neoverse 路线图再添新品,基于四项关键原则打造
    Python深度学习实战-基于tensorflow.keras六步法搭建神经网络(附源码和实现效果)
    8/26 网络流Dinic算法+最小割+cf
    golang: Code of Conduct
  • 原文地址:https://blog.csdn.net/linxingliang/article/details/132991889