jpa在批量添加的时候,存储慢如何解决问题
spring.datasource.url = jdbc:mysql://xxxxxxxx:xxxx/xxxxx?useSSL=false&useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true&autoReconnect=true
入口下加@EnableTransactionManagement
@SpringBootApplication
@EnableTransactionManagement
service实现类下加
@Service
@Transactional
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTempla
1、controller层
//获取用户答题
@CrossOrigin
@RequestMapping("/saveAnswer1")
public void saveAnswer1() throws IOException, ParseException {
List<ScoreVO> listscoreVO = new ArrayList<ScoreVO>();
for(int i=0;i<=20;i++) {
ScoreVO score=new ScoreVO();
score.setTasId(UUID.randomUUID().toString().replaceAll("-", ""));
score.setQuId("1234567");
score.setSurveyId("134567890ghjk");
score.setTssId("234567890-");
score.setUserId("SFSFSFSDF");
listscoreVO.add(score);
}
long start = System.currentTimeMillis();
//改造前后代码、自行补充
int result=answerService.test(listscoreVO);
long end = System.currentTimeMillis();
System.out.println("花费时间:"+(end-start));
System.out.println("插入数据:"+result);
}
2、service层
public void test(List<ScoreVO> listscoreVO) {
//批量转数组
SqlParameterSource[] beanSources = SqlParameterSourceUtils.createBatch(listscoreVO.toArray());
String sql = "INSERT INTO t_answer_score(tas_id,user_id,survey_id,qu_id,tss_id) VALUES (:tasId,:userId,:surveyId,:quId,:tssId)";
namedParameterJdbcTemplate.batchUpdate(sql, beanSources);
return 0;
}
3、实体类
/**
* 用户答题分数表
*/
@Entity
@Getter
@Setter
@ToString
@NoArgsConstructor
@Table(name = "t_answer_score")
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
public class ScoreVO implements Serializable {
private static final long serialVersionUID = -3199317015260021676L;
@Id
@GeneratedValue(generator = "jpa-uuid")
@Column(length = 32)
private String tasId;
private String userId;
private String surveyId;
private String quId;
private Double score;
private String tssId;
}
开启数据空批量配置:rewriteBatchedStatements=true
开启事务:@EnableTransactionManagement ,@Transactional
本人测试了几种批量保存的方式 1、saveAll jpa自带方法 2、改造saveAll方法,直接不进行比对保存的与表中数据是否相同 直接使用 JPA EntityManager persist 方法进行循环保存 3、jdbcTemplate .batchUpdate 方法进行保存 都不如上述方法效率高,前提是主键值是由自己主动生成,大家可以试试
jpa在批量添加的时候,存储慢如何解决问题相关推荐
- 微信jssdk批量添加卡券接口(踩坑经验)
1)首先是官方接口文档: 1.批量添加卡券接口:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.0861973 ...
- ES-PHP向ES批量添加文档报No alive nodes found in your cluster
ES-PHP向ES批量添加文档报No alive nodes found in your cluster 2016年12月14日 12:31:40 阅读数:2668 参考文章phpcurl 请求Chu ...
- python编写arcgis脚本_ArcGis Python脚本——批量添加字段
插个广告,制作ArcGIS的Tool工具学习下面的教程就对了: 以下是正文: 先看如何增加一个字段 函数:arcpy.AddField_management 语法:AddFields_manageme ...
- 批量添加-动态拼接字符串
字符串拼接主要包括以下三类,第三种方法是今天的重点. + Sring.format() StringBuilder.Append() 一.+ 对于少量固定的字符串拼接,我们可以简单利用"+& ...
- 批量添加联系人的方法
说实话,我找了一整天的帖子,好像所有关于批量添加联系人的帖子都是复制一个人的! 然后那一个人又没说清楚. 以下是我做的,可能有不对! 实现功能就好吧.我感觉 API上,还有sample里面都有现成的, ...
- android 通讯录 编程,以编程方式批量添加数千个Android联系人
使用ContentResolver.applyBatch和ContentResolver.bulkInsert方法一次性添加数千个联系人非常慢. Android是否提供了批量添加联系人的不同方式,这种 ...
- ArcGis国土空间”一张图”填报操作技巧(四)零编程基础批量添加字段并设置字段属性
向表或要素类表.要素图层和/或带属性表的栅格添加字段并设置字段属性,是我们在数据建库或处理时常常要用到的操作,实现的方法非常多. 一.逐一添加字段的常见操作 1.打开属性表--添加字段. 2.使用字段 ...
- 用户管理(一):使用shell脚本批量添加指定数量的用户
运行环境 CentOS 6.9.Xshell 5 前言 我们在需要创建多个用户的时候,使用手工单独创建是比较耗费精力的事情,我们可以通过shell脚本实现批量添加用户,实现指定数量用户.创建用户默认名 ...
- EF 批量 添加 修改 删除
1批量添加 db.T_Investigator.AddRange(list) 2批量删除 db.T_Investigator.RemoveRange(list) 3批量修改 for 循 ...
最新文章
- 2020图灵年度好书大赏 | 15周年视频纪念版
- CSS常用菜单(三)
- Go 语言编程 — 高级数据类型 — 数组
- linux——管理系统设备之磁盘的加密、加密磁盘的挂载及磁盘阵列、配额
- geotools 读取shp属性过滤_Flink进阶之使用布隆过滤器实现UV统计
- Linux系统给进程绑核
- mysql语句优化 explai_mysql使用explain优化sql语句
- python识别数字程序_Python识别处理照片中的条形码
- php 如何生成txt文件,PHP生成TXT文件
- python 画图 线标注_Python中画图时候的线类型
- 计算机f盘的东西能删不,电脑清理文件不小心把F盘文件删除怎么办
- android 黄金颜色,金光闪闪-六款经典款黄金首饰推荐
- 最新域名防红程序源码 采用小Q防红
- Latex(1.1)——符号表
- 判断两个数运算是否越界
- 【数字工厂】通信设备制造业“数字工厂”解决方案浅析
- 帝国CMS教程:ECMS(帝国CMS)搜索伪静态
- unicode 和 GB2312 编码对应表
- Java_Web笔记汇总_火热更新中。。。
- 呼叫中心技术 -- 上篇(笔记)