MybatisPlus-注解

news/2025/2/24 11:29:28

@TableName设定表名

1. MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决 定,且默认操作的表名和实体类型的类名一致

2. 若实体类类型的类名和要操作的表的表名不一致,访问数据库表将会报错

3. 在实体类上添加@TableName("表名"),标识实体类对应的表解决

4. 在全局配置中为实体类所对应的表名设置默认的前缀,那么就不需要在每个实体类上通过@TableName标识实体类对应的表

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  # 设置MyBatis-Plus的全局配置
  global-config:
    db-config:
      # 设置实体类所对应的表的统一前缀
      table-prefix: t_

@TableId设定主键

1. MyBatis-Plus在实现CRUD时,会默认将id作为主键列,并在插入数据时,默认基于雪花算法的策略生成id

2. 若实体类或表中表示主键的不是id,而是其他字段例如uid,此时将报错

3. 在实体类中uid属性上通过@TableId将其标识为主键

4. @TableId的value属性

  • 若实体类中主键对应的属性为id,而表中表示主键的字段为uid,此时若只在属性id上添加注解 @TableId,则抛出异常Unknown column 'id' in 'field list',即MyBatis-Plus仍然会将id作为表的 主键操作,而表中表示主键的是字段uid
  • 此时需要通过@TableId注解的value属性,指定表中的主键字段,@TableId("uid")或 @TableId(value="uid")

5. @TableId的type属性

  • 用来定义主键策略
  • 常用的主键策略
描述
IdType.ASSIGN_ID(默 认)基于雪花算法的策略生成数据id,与数据库id是否设置自增无关
IdType.AUTO使用数据库的自增策略,注意,该类型请确保数据库设置了id自增, 否则无效
  • 全局配置主键策略
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  # 设置MyBatis-Plus的全局配置
  global-config:
    db-config:
      # 设置实体类所对应的表的统一前缀
      table-prefix: t_
      # 设置统一的主键生成策略
      id-type: auto

雪花算法

1. 雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表主键的有序性

2. 整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞,并且效率较高

3. 长度共64bit(一个long型)

  • 1bit标识符号位,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0。
  • 41bit时间截(毫秒级),存储的是时间截的差值(当前时间截-开始时间截),结果约等于69.73年
  • 10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID,可以部署在1024个节点)
  • 12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID)

@TableField设定表字段

设置实体类的属性所对应表的字段名

@TableLogic设定逻辑删除

1. 逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库 中仍旧能看到此条数据记录

2. 数据库中创建逻辑删除状态列,设置默认值为0

3. 实体类中添加逻辑删除属性

@Version设定表数据版本号

1. 乐观锁版本号,每次修改后自动version+1

2. 配置乐观锁插件

java">@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    //添加分页插件
    interceptor.addInnerInterceptor(new
    PaginationInnerInterceptor(DbType.MYSQL));
   
    //添加乐观锁插件
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}

@EnumValue设定枚举类型插入数据库的值

1. 枚举类定义

2. 配置扫描通用枚举

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  # 扫描通用枚举的包
  type-enums-package: com.my.mybatisplus.enums

3. 测试

java">@Test
public void testSexEnum(){
    User user = new User();
    user.setName("Enum");
    user.setAge(20);
    //设置性别信息为枚举项,会将@EnumValue注解所标识的属性值存储到数据库
    user.setSex(SexEnum.MALE);
    //INSERT INTO t_user ( username, age, sex ) VALUES ( ?, ?, ? )
    //Parameters: Enum(String), 20(Integer), 1(Integer)
    userMapper.insert(user);
}

@DS设定操作的数据源

1. 引入多数据源依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.0</version>
</dependency>

2. 数据源配置

spring:
  # 配置数据源信息
  datasource:
    dynamic:
      # 设置默认的数据源或者数据源组,默认值即为master
      primary: master
      # 严格匹配数据源,默认false.true未匹配到指定数据源时抛异常,false使用默认数据源
      strict: false
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: 123456
        slave_1:
          url: jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf-8&useSSL=false
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: 123456

3. service层指定访问数据源

java">@DS("master") //指定所操作的数据源
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements
UserService {
}

http://www.niftyadmin.cn/n/5864269.html

相关文章

链表和STL —— list 【复习笔记】

1. 链表 1.1 链表的定义和类型 和顺序表一样&#xff0c;链表也是一种线性表&#xff0c;线性表存储结构为链式存储就是链表 链式存储不仅要保存数据元素&#xff0c;还要保存数据元素间的关系&#xff0c;这两个部分信息形成了结点。结点有两个域&#xff1a;数据域&#x…

mysql系列9—mysql的MVCC机制

背景 mysql提供了读未提交、读已提交、可重复读、串行化四种隔离级别&#xff0c;默认的隔离界别为可重复读。其中&#xff0c;不可重复度场景下&#xff0c;每次直接读取最新记录(即使事务未提交)&#xff1b;串行化对于所有的读写都加锁&#xff0c;因此&#xff0c;对二者不…

hive开窗函数边界值ROWS BETWEEN 和 RANGE BETWEEN区别

目录 一、概念 1.rows between ... and ... 2.range between ... and ... 二、语法 1.关键词含义 一、概念 1.rows between ... and ... rows&#xff1a;指以行号来决定frame的范围&#xff0c;是物理意义上的行。 2.range between ... and ... range&#xff1a;指以当…

DeepSeek从入门到精通

1_DeepSeek从入门到精通 (1).pdf官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供1_DeepSeek从入门到精通 (1).pdf最新版正式版官方版绿色版下载,1_DeepSeek从入门到精通 (1).pdf安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123…

生活教练项目_Trae

XMXALifeCoach - 个人成长辅导网站 网址: https://github.com/zhangxiaomeng1/XMXALifeCoach 项目简介 这是一个基于DeepSeek R1 API开发的个人成长辅导网站。通过与AI进行对话&#xff0c;用户可以获得个性化的建议和指导&#xff0c;帮助个人成长。 技术架构 前端&#xff1a…

使用MyCAT实现分布式MySQL双主架构

Mycat是一个开源的分布式数据库中间件&#xff0c;主要用于提供数据库的分库分表、读写分离、负载均衡等功能。以下是Mycat的几个主要作用&#xff1a; 分库分表&#xff1a;Mycat可以将单个数据库拆分成多个小数据库&#xff0c;并将数据分布在不同的节点上&#xff0c;以提高…

《Mycat核心技术》第17章:实现MySQL的读写分离

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

全星FMEA软件系统:赋能企业研发管理,打造可靠产品

全星FMEA软件系统&#xff1a;赋能企业研发管理&#xff0c;打造可靠产品 在当今竞争激烈的市场环境中&#xff0c;产品质量和可靠性已成为企业立足之本。然而&#xff0c;传统的FMEA分析方式往往耗时耗力&#xff0c;效率低下&#xff0c;难以满足企业快速迭代和降本增效的需求…