Mybatis-plus中的DML编程控制--增删改的高级操作

这篇具有很好参考价值的文章主要介绍了Mybatis-plus中的DML编程控制--增删改的高级操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mybatis-plus中的DML编程控制–增删改的高级操作

1、Insert

1.1、id生成策略控制

  • 不同的表应用不同的id生成策略
    • 日志:自增(1,2,3,4,…)
    • 购物订单:特殊规则( FQ23948AK3843)
    • 外卖单:关联地区日期等信息(10 04 20200314 34 91)
    • 关系表:可省略id
    • ······
  • 名称:@TableId
  • 类型:属性注解
  • 位置:模型类中用于表示主键的属性定义上方
  • 作用:设置当前类中主键属性的生成策略
  • 代码段:
package com.mannor.mybatis_plus_demo.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

public class User {
    @TableId(type = IdType.AUTO) //指定Id为自增属性,不然产生一个很大的数字来作为主键
    private Long id;
}
  • 相关属性
    • value:设置数据库主键名称
    • type:设置主键属性的生成策略,值参照IdType枚举值
ID生成策略:
1. AUTO(0)︰使用数据库id自增策略控制id生成NONE(1):不设置id生成策略
2. INPUT(2):用户手工输入id
3. ASSIGN_ID(3):雪花算法生成id(可兼容数值型与字符串型)
4. ASSIGN_UUID(4):以UUID生成算法作为id生成策略

防止为了大量的实体类使用这种会显得麻烦,所以可以在配置类上进行设定:mybatis-plus.global-config.db-config.id-type: auto
同时,亦可以设置表名前缀:tableprefix:tb_(简写)

2、Delete

2.1、多记录删除

    @Test
    void testDeleteList() {
        List<Long> list = new ArrayList<>();
        list.add(1L);
        list.add(6L);
        userDao.deleteBatchIds(list);
    }

多记录查询也是类似

2.2、逻辑删除

  • 删除操作业务问题:业务数据从数据库中丢弃,关联的数据也会被删除掉
  • 逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中
  1. 在数据库中添加一个字段,设置默认值为0,1表示删除;
  2. 在对应的实体类中添加字段,并且添加@TableLogic注解
package com.mannor.mybatis_plus_demo.pojo;

import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

	private Long Id;
    //逻辑删除字段,标记当前记录是否被删除
    @TableLogic(value = "0",delval = "1")
    private Integer deleted;

}

增加此操作之后,执行delete操作,底层就会替换成update操作,将deleted字段值改为1,实现了逻辑删除。
在对该表执行查询操作的时候,也不会查询到delete为1的记录,相当于添加了where deleted=1
同理:也可以在yml文件中进行全局配置,键入logic等待提示(自行操作)。

3、Update过程中的并发现象

3.1、乐观锁

  • 业务并发现象带来的问题:秒杀(并发访问)

在MP中使用乐观锁的实现,本质上是在SQL语句上添加了version=version+1,此种方法可以解决2000以下的并发。
具体实现:

  1. 在数据库表中添加version字段,设置默认值为1;
  2. 在对应的实体类中添加version字段,并且在上面填加@Version注解;
  3. 实现一个生成拦截器的构造类;
package com.mannor.mybatis_plus_demo.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MPConfig {


    @Bean
    public MybatisPlusInterceptor mpInterceptor() {

        // 1.定义拦截器
        MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
        // 2.定义具体的拦截器
        mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());// 分页的拦截器
        // 3.添加乐观锁拦截器
        mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mpInterceptor;
    }
}

此时,控制并发的操作已经完成,所有查询的用户会拿到version的值,操作时会比对拿到的version与数据库中的version比对,操作之后Version=version+1,所以有且只有一个用户会修改到数据库(当version特定的时候,如秒杀到最后一个)。文章来源地址https://www.toymoban.com/news/detail-585969.html

到了这里,关于Mybatis-plus中的DML编程控制--增删改的高级操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot+Mybatis-Plus实现增删改查(配视频讲解)--项目阶段1

    目录 一、介绍 视频讲解 二、前期准备工作 (一) 创建springboot项目和创建数据库 三、项目配置 (一)pom.xl导入相关依赖  1.导入依赖 (二)yml文件中配置连接数据库 2.配置yml文件  四、代码的编写 数据库展示 项目提前展示!!! (三)MySQL表绑定到spring boot(实体层)

    2024年02月11日
    浏览(29)
  • springBoot + mybatis-plus 实现监听 mysql的数据增删改的监听

    在Spring Boot + MyBatis-Plus中实现MySQL数据增删改的监听,可以通过以下步骤: 1. 添加MyBatis-Plus依赖,在pom.xml文件中添加以下依赖:   2. 配置MyBatis-Plus,通常在application.yml文件中进行配置: 3. 创建监听器类,实现com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor接口。  4. 在My

    2024年02月15日
    浏览(114)
  • Mybatis-Plus高级查询LambdaQueryWrapper&QueryWrapper

    目录 前言 Wrapper 查询构造器 查询条件 前期准备 查询条件 allEq eq ne gt ge lt le between,notBetween like,notLike likeLeft likeRight isNull 空值查询 isNotNull 非空值查询 in notIn inSql、notInSql groupBy orderBy、orderByAsc、orderByDesc or、and 解决方法 last exists、notExists 总结 附加MySQL语句执行顺序 我刚刚毕

    2024年02月04日
    浏览(59)
  • Mybatis-Plus id生成策略控制

    目录 id生成策略控制 不同的表应用不同的id生成策略 名称 @TableId AUTO策略 除了AUTO这个策略以外,还有如下几种生成策略: 分布式ID是什么? INPUT策略 ASSIGN_ID策略 ASSIGN_UUID策略 雪花算法 ID生成策略对比 不同的表应用不同的id生成策略 日志:自增(1,2,3,4,……) 购物订单:特殊

    2024年02月22日
    浏览(46)
  • mybatis-plus控制台打印sql(mybatis-Log)

    配置了mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl;但是mybatis执行的sql没有输出 需要检查点: 1、日志级别设置:请确保你的日志级别配置正确。如果日志级别设置得太低,可能导致SQL语句不会被打印出来。你可以尝试将日志级别调整为DEBUG或更高级别,以确

    2024年02月03日
    浏览(52)
  • mybatis-plus在实际开发中的应用

    最近的项目是使用mybatis-plus作为持久层框架,前面也记录过mybatis-plus的基本使用,此次记录一下本次项目中的一些使用要点 基本的导入依赖和代码自动生成器,可以去看以前的文章,本次不再赘述。 以项目中的一个实体类为例 实体类上mybatis-plus的注解有两个, @TableName(“

    2024年02月09日
    浏览(56)
  • 【SpringBoot】MyBatis与MyBatis-Plus分页查询 & github中的PageHelper

            笔者写这篇博客是因为近期遇到的关于两者之间的分页代码差距,其实之前也遇见过但是没有去整理这篇博客,但由于还是被困扰了小一会儿时间,所以还是需要 加深记忆 。其实会看前后端传参解决这个问题很快、不麻烦。关于这两个框架的分页代码问题主要就

    2024年02月03日
    浏览(55)
  • Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页,前后端分离式开发)

    MyBatis-Plus(opens new window) (简称MP) 是一个MyBatis(opens new window)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。想查看官网相关内容的化我这里提供了官网地址:https://baomidou.com/ 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般

    2024年02月04日
    浏览(68)
  • 实现 MyBatis-Plus 中的配置加密功能(使用 AES 算法)

    在项目开发过程中,为了增强数据安全性,我们常常需要对敏感信息进行加密处理。MyBatis-Plus 提供了方便的配置加密功能,使我们能够对配置文件中的敏感信息进行加密和解密操作。本文将详细介绍如何实现 MyBatis-Plus 中的配置加密功能,并给出相应的代码示例。 首先,我们

    2024年02月07日
    浏览(40)
  • MyBatis-Plus中的更新操作(通过id更新和条件更新)

    目录 前言 一、通过id更新 二、条件更新 2.1 使用QueryWrapper进行条件更新 2.2 使用UpdateWrapper进行条件更新 总结  本文学习MP中的更新操作方法,带大家一起查看源码,了解更新操作的方法。学会熟练地去运用更新方法解决自己在项目中的问题。 Mybatis-Plus知识点[MyBatis+MyBatis-Pl

    2024年02月06日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包