使用事务的 正确姿势,模板举例
开发过程中,经常需要对service层的方法加事务注解@Transactional,以确保数据库数据的前后一致以及数据安全。但是发现不少项目中只加了@Transactional注解,并没有rollbackFor = Exception.class这个属性,那么不加这个属性,有些异常,事务管理器是不会对此异常做回滚操作的。
同一个类的不同方法,A方法没有@Transactional,B方法有@Transactional,A调用B方法,事务不起作用
try-catch捕获异常信息后Spring事务失效处理方法
ThreadLocal提供线程局部变量,一个变量用在多个线程中分别有独立的值(副本)
MySql插入不重复的数据,当大数据量的数据需要插入值时,要判断插入是否重复,然后再插入,那么如何提高效率?解决的办法有很多种,不同的场景解决方案也不一样,数据量很小的情况下,怎么搞都行,但是数据量很大的时候,这就不是一个简单的问题了。
一个请求
过来,系统从线程池
中分配一个可用的线程
来处理当前请求的逻辑。
即某一请求的生命周期时间内,一个线程只用来处理一个请求,处理完之后,还给线程池(【特别注意】该线程还在,没被销毁,等待分配给别的页面请求用)
工作中,经常会遇到很多批量操作的需求:批量添加、批量更新、批量删除、批量导入、批量审核等等,下面这篇文章我们将一一复现,首先我们先了解一下mybatis的标签foreach循环。
由于项目是使用MyBatis-Plus开发的,用起来也确实比较方便,尤其是service层封装好的一些通用的增删改查方法,省去了不少sql语句的书写,但是在开发过程中,我也发现MyBatis-Plus的saveBatch批量插入方法针对MySQL和Oracle数据库可能会出现效率贼低的情况
IService中自带的 saveBatch
和 saveOrUpdateBatch
等方法,仔细看会发现,他们的批量执行,竟然不是 真正的(数据库级别的)批量执行