当前位置: 首页 > news >正文

MyBatis-Plus笔记(下)

注解

@tablename注解

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

- 使用位置:实体类

代码举例:

@TableName//可以不加,使用实体类的名字作为表名!忽略大小写

//BaseMapper->User实体类-》实体类名-》表名数据库操作

//当数据库的表名和实体类命名不同(忽略大小写),使用@TableName注解指定表名

public class User {

    private Long id;

    private String name;

    private Integer age;

    private String email;

}

@TableId注解

应用场景:①当主键的列名与属性名不一致时,②主键生成策略不是默认策略

- 描述:主键注解

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

例如

@TableName("sys_user")

/**

*默认使用雪花算法:

*①数据库的主键是bigint/varchar64)类型

*②对应实体类的属性是Long类型

*③随机生成一个数字,给与主键值(不重复)

*Auto

mysql数据库创建表的主键列的时候,类型为数字,还要加上auto_increment

②插入数据自动增长。

*/

public class User {

    @TableId(value="主键列名",type=主键策略)

    private Long id;

    private String name;

    private Integer age;

    private String email;

}

|属性|

类型

|必须指定

|默认值|

描述|

|value|

String|

|""|

主键字段名|

|type

Enum

|否

dType.NONE|

指定主键类型

IdType属性可选值:

|值

|描述|

|AUTO

|数据库 ID 自增 (mysql配置主键自增长)|

|ASSIGN_ID(默认)

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

雪花算法:随机生成一个long类型不重复的数字

全局配置修改主键策略:

mybatis-plus:

  configuration:

    # 配置MyBatis日志

    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

  global-config:

    db-config:

      # 配置MyBatis-Plus操作表的默认前缀

      table-prefix: t_

      # 配置MyBatis-Plus的主键策略,全局件主键设置为自增长策略

      id-type: auto

@TableFiled使用

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

举例:

@TableName("sys_user")

public class User {

    @TableId

    private Long id;

    private String name;

    private Integer age;

    private String email;

   @TableField(value="password",exist="false")

    private int password;//在数据库中没有对应的列

}

TableField中的属性

类型

必须指定

默认值

描述

Value

String

""

数据库字段名

Exist

 boolean

 

 true

 是否为数据库表字段

**MyBatis-Plus会自动开启驼峰命名风格映射!!!**

逻辑删除的实现

步骤:

①数据库和实体类添加逻辑删除字段(约定字段值为1时逻辑删除,为0时未逻辑删除)

②在对应删除字段的属性上加一个@TableLogic注解(添加该注解后,我们在做删除操作时mybatis会自定将删除语句改为修改逻辑删除字段的修改语句)

每个表都会有逻辑删除,那么对应的每个表的实体类都会有一个deleted(逻辑删除字段);所以我们可以全局指定,这样就不用在每个表的逻辑删除字段上加@TableLogic注解了

mybatis-plus:

  global-config:

    db-config:

      logic-delete-field: deleted # 全局逻辑删除的实体字段名(属性名)(since 3.3.0,配置后可以忽略不配置步骤2)

      logic-delete-value: 1 # 逻辑已删除值(默认为 1)

      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

代码举例:

public class User {

    private Long id;

    private String name;

    private Integer age;

    private String email;

    /**

     * 当前属性对应的列就是逻辑删除的状态字段,

     * 当删除数据时,自动变为修改此列的属性值,默认0未删除;1删除

     * 当你查询数据的时候,默认只查询delete=0的数据

     */

    //逻辑删除字段

    @TableLogic

    private Integer deleted;

}

乐观锁

思想

乐观锁的基本思想是,认为并发冲突的概率较低,因此不需要提前加锁,而是在数据更新阶段进行冲突检测和处理。乐观锁的核心思想是"先修改,后校验"。在乐观锁的应用中,线程在读取共享资源时不会加锁,而是记录特定的版本信息。

悲观锁的基本思想是,在整个数据访问过程中,将共享资源锁定,以确保其他线程或进程不能同时访问和修改该资源。悲观锁的核心思想是"先保护,再修改"。在悲观锁的应用中,线程在访问共享资源之前会获取到锁,并在整个操作过程中保持锁的状态,阻塞其他线程的访问。

使用乐观锁

启动类

@SpringBootApplication

@MapperScan("com.atguigu.mapper")

public class Main {

    public static void main(String[] args) {

        SpringApplication.run(Main.class,args);

    }

    /**

     * 将mybatis-plus插件导入到ioc容器步骤:

     * ①创建一个方法,在该方法中创建一个装所有插件的对象mybatisPlusInterceptor

     *          在方法中通过该对象添加想要的插件

     * ②返回该对象,同时将该对象加入到ioc容器中

     *

     * 使用乐观锁的步骤:

     * ①导入乐观锁插件(在启动类中)

     * ②在实体类对应乐观锁字段的属性上添加@Version注解

     *     注意:是实体类对应的数据库表也要添加一个乐观锁列

     * ③正常更新使用

     */

    //将mybatis-plus插件导入到ioc容器

    @Bean

    public MybatisPlusInterceptor plusInterceptor(){

        //创建一个mybatis-plus插件集合,所有的插件都集中在此(分页插件,乐观锁插件...)

        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();

        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

        //添加乐观锁(版本号)插件;mybatis-plus会在更新的时候,每次帮我们对比版本号字段和让版本号加1

        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());

        return mybatisPlusInterceptor;

    }

}

实体类

@TableName//可以不加,使用实体类的名字作为表名!忽略大小写

//BaseMapper->User实体类-》实体类名-》表名数据库操作

//当数据库的表名和实体类命名不同(忽略大小写),使用@TableName注解指定表名

public class User {

    private Long id;

    private String name;

    private Integer age;

    private String email;

    /**

     * 当前属性对应的列就是逻辑删除的状态字段,

     * 当删除数据时,自动变为修改此列的属性值,默认0未删除;1删除

     * 当你查询数据的时候,默认只查询delete=0的数据

     */

    //逻辑删除字段

    @TableLogic

    private Integer deleted;

    @Version

    private Integer version;

}

防止全表数据伤处删除与更新 

针对 update delete 语句 作用: 阻止恶意的全表更新删除

添加一个防止全表更新删除的拦截器(也是一个插件)

@Bean

public MybatisPlusInterceptor mybatisPlusInterceptor() {

  MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

  interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());

  return interceptor;

}

}

相关文章:

  • 龙虎榜——20250414
  • TLS协议四次握手原理详解,密钥套件采用DH密钥交换算法
  • Video Encoder:多模态大模型如何看懂视频
  • 【HFP】蓝牙 HFP 协议状态通知机制研究
  • 数据结构初阶:双向链表
  • 常见的 14 个 HTTP 状态码详解
  • MySQL函数
  • 鸿蒙开发-布局
  • CTF-SQL注入
  • Go:接口
  • 大风频繁,疾风气象大模型竞速:AI如何提前10天预测极端天气?
  • Spark SQL
  • C++ 用红黑树封装map/set
  • PD-1 功能性抗体知多少
  • 静态代码扫描概述
  • 【数据标准】数据标准化-现状分析及评估
  • 信息系统项目管理工程师备考计算类真题讲解二
  • 【补题】Codeforces Round 857 (Div. 1) A. The Very Beautiful Blanket
  • 如何开发一套场外个股期权交易系统?个股期权交易软件包含:询价,报价,交易,持仓,行权,账户盈亏统计等
  • 金融行业 AI 报告自动化:Word+PPT 双引擎生成方案
  • 五一假期出行预订进入高潮:酒店搜索热度翻倍,“请4休11”拼假带动长线游
  • 西安旅游:2024年营业收入约5.82亿元,同比增长5.88%
  • 沈辛成评《主动出击》丨科学普及,究竟需要靠谁主动出击
  • 寒武纪一季度营收猛增42倍,净利3.55亿元,连续两个季度盈利
  • 鲜花妆上海,花香荟申城!2025上海国际花展开幕,龚正出席并启动花展
  • 嵩山少林风景区女游客进男厕:不能止步于批评