BaseMapper的insert方法快速插入数据未提交问题

一、前言

今天测试一批日志数据插入数据库,发现通过BaseMapper的int insert(T entity);方法在大量数据进行插入的时候插入的数据变成了未提交。意思就是程序运行insert成功,但是数据库里却没有数据。当一条一条数据插入的时候却是可以的,循环快速插入却不生效。不知道为何。

二、BaseMapper insert方法

public interface BaseMapper<T> extends Mapper<T> {/*** 插入一条记录** @param entity 实体对象*/int insert(T entity);
}

调用insert方法

@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class BlockchainLogService {@Autowiredprivate BlockchainLogMapper blockchainLogMapper;public void blockchainLog(BlockchainLog blockchainLog) {try {blockchainLogMapper.insert(blockchainLog);} catch (Exception e) {log.info("保存日志异常:"+e.getMessage());}}}

这种方式发现当循环插入日志时,事务并没有提交。

我的解决办法:手动添加commit语句

@Repository
public interface BlockchainLogMapper  extends BaseMapper<BlockchainLog>{/*** 查询商户*/@Select("<script>"+ "commit "+ "</script>")public  void commit();}

在插入日志后,调用commit()方法,通过这个方式就解决了。

@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class BlockchainLogService {@Autowiredprivate BlockchainLogMapper blockchainLogMapper;public void blockchainLog(BlockchainLog blockchainLog) {try {blockchainLogMapper.insert(blockchainLog);blockchainLogMapper.commit();} catch (Exception e) {log.info("保存日志异常:"+e.getMessage());}}

 

 

三、MySQL事务隔离级别

MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,MySQL 事务隔离级别总共有以下 4 种:

  1. READ UNCOMMITTED:读未提交。
  2. READ COMMITTED:读已提交。
  3. REPEATABLE READ:可重复读。
  4. SERIALIZABLE:序列化。

1.四种事务隔离级别

 

1.1 READ UNCOMMITTED

读未提交,也叫未提交读,该隔离级别的事务可以看到其他事务中未提交的数据。该隔离级别因为可以读取到其他事务中未提交的数据,而未提交的数据可能会发生回滚,因此我们把该级别读取到的数据称之为脏数据,把这个问题称之为脏读。

1.2 READ COMMITTED

读已提交,也叫提交读,该隔离级别的事务能读取到已经提交事务的数据,因此它不会有脏读问题。但由于在事务的执行中可以读取到其他事务提交的结果,所以在不同时间的相同 SQL 查询中,可能会得到不同的结果,这种现象叫做不可重复读。

1.3 REPEATABLE READ

可重复读,MySQL 默认的事务隔离级别。可重复读可以解决“不可重复读”的问题,但还存在幻读的问题。所谓的幻读指的是,在同一事务的不同时间使用相同 SQL 查询时,会产生不同的结果。例如,一个 SELECT 被执行了两次,但是第二次返回了第一次没有返回的一行,那么这一行就是一个“幻像”行。

注意:幻读和不可重复读的侧重点是不同的,不可重复读侧重于数据修改,两次读取到的同一行数据不一样;而幻读侧重于添加或删除,两次查询返回的数据行数不同。

1.4 SERIALIZABLE

序列化,事务最高隔离级别,它会强制事务排序,使之不会发生冲突,从而解决了脏读、不可重复读和幻读问题,但因为执行效率低,所以真正使用的场景并不多。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/69796.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【实战】十一、看板页面及任务组页面开发(一) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十三)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

docker 安装elasticsearch、kibana

下载es镜像 docker pull elasticsearch 启动es容器 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -d elasticsearch 验证es界面访问 ​​​​​http://节点ip:9200/ ​…

一、window配置微软商店中的Ubuntu,及错误解决方法

&#xff08;1&#xff09;首先&#xff0c;在微软商店中搜索“Ubuntu”&#xff0c;下载你喜欢的版本(此处) &#xff08;2&#xff09;设置适用于window的Linux子系统&#xff0c;跟着红色方框走 点击“确定”之后&#xff0c;会提示你重启电脑&#xff0c;按要求重启电脑即可…

LabVIEW对并行机器人结构进行建模仿真

LabVIEW对并行机器人结构进行建模仿真 为了对复杂机器人结构的数学模型进行建模、搜索、动画和验证&#xff0c;在工业机器人动态行为实验室中&#xff0c;设计并实现了具有五个自由度的单臂型机器人。在研究台上可以区分以下元素&#xff1a;带有直流电机和编码器的机器人;稳…

揭秘热门工作秘籍:ChatGPT大显身手!轻松提升工作效率的高效Prompt技巧曝光!

目录 01 背景 福利&#xff1a;文末有chat-gpt纯分享&#xff0c;无魔法&#xff0c;无限制 02 AI 可以帮助程序员做什么&#xff1f; 2.1 技术知识总结 2.2 拆解任务 2.3 阅读代码/优化代码 2.4 代码生成 2.5 生成单测 2.6 更多 AI 应用/插件 AIPRM Voice Control for Ch…

存算分离实践:构建轻量、云中立的大数据平台

今天我们将分享社区用户多点 DMALL 的案例。多点 DMALL 是亚洲领先的全渠道数字零售解决方案服务商&#xff0c;目前已与 380 家零售企业达成合作&#xff0c;覆盖 6 个国家和地区。 面对 B 端客户日益增长的企业数据&#xff0c;存算一体的架构显得力不从心。计算资源冗余浪费…

小白到运维工程师自学之路 第七十三集 (kubernetes应用部署)

一、安装部署 1、以Deployment YAML方式创建Nginx服务 这个yaml文件在网上可以下载 cat nginx-deployment.yaml apiVersion: apps/v1 #apiVersion是当前配置格式的版本 kind: Deployment #kind是要创建的资源类型&#xff0c;这里是Deploymnet metadata: #metadata是该资源…

PyTorch翻译官网教程-LANGUAGE MODELING WITH NN.TRANSFORMER AND TORCHTEXT

官网链接 Language Modeling with nn.Transformer and torchtext — PyTorch Tutorials 2.0.1cu117 documentation 使用 NN.TRANSFORMER 和 TORCHTEXT进行语言建模 这是一个关于训练模型使用nn.Transformer来预测序列中的下一个单词的教程。 PyTorch 1.2版本包含了一个基于论…

【注解使用】使用@Autowired后提示:Field injection is not recommended(Spring团队不推荐使用Field注入)

问题发生场景&#xff1a; 在使用 IDEA 开发 SpringBoot 项目时&#xff0c;在 Controller 类中使用注解 Autowired 注入一个依赖出现了警告提示&#xff0c;查看其他使用该注解的地方同样出现了警告提示。这是怎么回事&#xff1f;由于先去使用了SpringBoot并没有对Spring进行…

Linux基本知识及常用命令(超全面,超详细)

Linux系统是一种基于UNIX的开放源码的操作系统&#xff0c;本部分所叙述的Linux更多的是指Linux的内核&#xff0c;其主要职责是对底层硬件的管理控制&#xff0c;内核除对下层硬件进行管理还要对上层的应用提供接口。 接口既包括命令也包括相应的接口函数&#xff0c;命令可以…

【tool】快捷操作

最近在弄材料然后文件太深了&#xff0c;交流起来很不方便&#xff0c;做了记录 复制文件路径 复制文件路径步骤&#xff1a; 1、首先按住Shift 鼠标右键单击&#xff0c;弹出&#xff1a;复制为路径 2、快捷键黏贴路径&#xff0c;即可

Apache Maven:从构建到部署,一站式解决方案

目录 一、Maven介绍 1. Maven是什么&#xff1f; 2.Maven的作用&#xff1f; 二、Maven仓库介绍 2.1 库的分类 三、Maven安装与配置 3.1 Maven安装 3.2 Maven环境配置 3.3 仓库配置 四、Eclipse与Maven配置 五、Maven项目测试 5.1 新建Maven项目步骤及注意事项 5.…