锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JAVA
  4. MyBatis-plus-03

MyBatis-plus-03

0
  • JAVA
  • 发布于 2024-09-26
  • 10 次阅读
黄健
黄健

核心注解使用
MyBatis-Plus是一个基于MyBatis框架的增强工具,提供了一系列简化和增强的功能,用于加快开发人员在使用MyBatis进行数据库访问时的效率。
MyBatis-Plus提供了一种基于注解的方式来定义和映射数据库操作,其中的注解起到了重要作用。

@TableName注解

  • 描述:表名注解,标识实体类对应的表
  • 使用位置:实体类
@TableName("user")  //当数据库的表名和实体类名不同时使用(忽略大小写) 指定数据库表名
@Data
public class User {

    private Long id;
    private String name;
    private Integer age;
    private String email;
}
```prism language-yaml
mybatis-plus:
    global-config:
        db-config:
            table-prefix:  t_   #所有数据库表名前缀 可以不用逐一配置@TableName("")

@TableId 注解

  • 描述:主键注解

  • 使用位置:实体类主键字段
    在以下场景下,添加@TableId注解是必要的:

  • 实体类的字段与数据库表的主键字段不同名:如果实体类中的字段与数据库表的主键字段不一致,需要使用@TableId注解来指定实体类中表示主键的字段。

  • 主键生成策略不是默认策略:如果需要使用除了默认主键生成策略以外的策略,也需要添加@TableId注解,并通过value属性指定生成策略。

雪花算法(Snowflake Algorithm)是一种用于生成唯一ID的算法。它由Twitter公司提出,用于解决分布式系统中生成全局唯一ID的需求。

//@TableId(type= IdType.AUTO)     //主键自增长
    private Long id;
```prism language-yaml
mybatis-plus:
  global-config:
    db-config:
      id-type: auto     #全局的主键设置为自增长

@TableField

  • 描述:字段注解(非主键)
    @TableField(value="name",exist = true)
    private String name;

MyBatis-Plus高级扩展
逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为"被删除状态”,之后在数据库中仍旧能看到此条数据记录

    @TableLogic     //该属性对应的列为逻辑删除的状态字段
    private Integer deleted;
```prism language-yaml
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted   #全局设置逻辑删除字段

自定义SQL语句:
MyBatis-plus擅长构建where条件,所以用MyBatis-plus构建where条件,然后自定义SQL语句剩下的部分(在mapper文件下自定义)

返回对象与实体类属性不完全相同时,可以使用VO实体类,不用一个个复制,可以利用拷贝函数进行拷贝

分页

@Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {

        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //分页
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());  //乐观锁
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());  //防全局修改和删除
        return interceptor;
    }

乐观锁实现
乐观锁和悲观锁是在并发编程中用于处理并发访问和资源竞争的两种不同的锁机制!!
悲观锁:
悲观锁的基本思想是,在整个数据访问过程中,将共享资源锁定 ,以确保其他线程或进程不能同时访问和修改该资源。悲观锁的核心思想是"先保护,再修改”。在悲观锁的应用中,线程在访问共享资源之前会获取到锁,并在整个操作过程中保持锁的状态,阻塞其他线程的访问。只有当前线程完成操作后,才会释放锁,让其他线程继续操作资源。这种锁机制可以确保资源独占性和数据的一致性,但是在高并发环境下,悲观锁的效率相对较低。
乐观锁:
乐观锁的基本思想是,认为并发冲突的概率较低,因此不需要提前加锁 ,而是在数据更新阶段进行冲突检测和处理。乐观锁的核心思想是"先修改,后校验”。在乐观锁的应用中,线程在读取共享资源时不会加锁,而是记录特定的版本信息。当线程准备更新资源时,会先检查该资源的版本信息是否与之前读取的版本信息一致,如果一致则执行更新操作,否则说明有其他线程修改了该资源,需要进行相应的冲突处理。乐观锁通过避免加锁操作,提高了系统的并发性能和吞吐量,但是在并发冲突较为频繁的情况下,乐观锁会导致较多的冲突处理和重试操作。
理解点: 悲观锁和乐观锁是两种解决并发数据问题的思路,不是具体技术。

  1. 乐观锁实现方案和技术:
  2. 版本号/时间戳:为数据添加一个版本号或时间戳字段,每次更新数据时,比较当前版本号或时间戳与期望值是否一致,若一致则更新成功,否则表示数据已被修改,需要进行冲突处理。
  3. CAS(Compare-and-Swap):使用原子操作比较当前值与旧值是否一致,若一致则进行更新操作,否则重新尝试。
  4. 无锁数据结构:采用无锁数据结构,如无锁队列、无锁哈希表等,通过使用原子操作实现并发安全。
  5. 悲观锁实现方案和技术:
  6. 锁机制:使用传统的锁机制,如互斥锁(Mutex Lock)或读写锁(Read-Write Lock)来保证对共享资源的独占访问。
  7. 数据库锁:在数据库层面使用行级锁或表级锁来控制并发访问。
  8. 信号量(Semaphore):使用信号量来限制对资源的并发访问。
    //乐观锁版本号插件
    mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());

    @Version
    private Integer Version;        //版本号字段


    public void test(){

        User user1=userMapper.selectById(3);
        User user2=userMapper.selectById(3);
        user1.setAge(50);
        user2.setAge(51);
        userMapper.updateById(user1);
        userMapper.updateById(user2);   //乐观锁生效,修改失败

防全表更新和删除实现

        //防止全表更新和删除实现拦截器
        mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());

        //全表删除
        userMapper.delete(null);    //会报错

MyBatis-Plus代码生成器(MyBatisX插件)

原文链接: https://blog.csdn.net/qq_53568730/article/details/135688706

标签: #JAVA 991 #mybatis-plus 7
相关文章

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

SpringBoot整合异步任务执行 2024-10-08 11:24

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用 户体验 异步任务: 异步任务是在多线程中同时执行,多个任务可以并发执行,同时处理多个请求,响应快,资源

springboot kafka多数据源,通过配置动态加载发送者和消费者 2024-10-08 11:24

前言 最近做项目,需要支持kafka多数据源,实际上我们也可以通过代码固定写死多套kafka集群逻辑,但是如果需要不修改代码扩展呢,因为kafka本身不处理额外逻辑,只是起到削峰,和数据的传递,那么就需要对架构做一定的设计了。 准备test kafka本身非常容易上手,如果我们需要单元测试,引入ja

SpringBoot 集成 Redis 2024-10-08 11:24

一:SpringBoot 集成 Redis ①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list ③通过Redis客户端可以使用多种语

SpringBoot整合QQ邮箱 2024-10-08 11:24

SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件…. 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.