JAVA语言之SpringBoot JdbcTemplate批量操作的示例代码
龚超 2018-06-25 来源 : 阅读 958 评论 0

摘要:本文主要向大家介绍了JAVA语言的SpringBoot JdbcTemplate批量操作的示例代码,通过具体的代码向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言的SpringBoot JdbcTemplate批量操作的示例代码,通过具体的代码向大家展示,希望对大家学习JAVA语言有所帮助。

在我们做后端服务Dao层开发,特别是大数据批量插入的时候,这时候普通的ORM框架(Mybatis、hibernate、JPA)就无法满足程序对性能的要求了。当然我们又不可能使用原生的JDBC进行操作,那样尽管效率会高,但是复杂度会上升。

综合考虑我们使用Spring中的JdbcTemplate和具名参数namedParameterJdbcTemplate来进行批量操作。

改造前

在开始讲解之前,我们首先来看下之前的JPA是如何批量操作的。

实体类User:


public class AppStudent {
private Integer id;
private Integer classId;
private String name;
private Integer age;
//伪代码、省略构造和get、set方法
}
复制代码
DynamicQuery伪代码:
@Repository
public class DynamicQueryImpl implements DynamicQuery {
@PersistenceContext
private EntityManager em;
public EntityManager getEntityManager() {
return em;
}
//其实就是for循环、使用EntityManager的persist方法循环保存而已
@Override
publicvoid saveList(ListresultList) {
for (int i = 0; i < resultList.size(); i++) {
T t = resultList.get(i);
em.persist(t);
}
}
}


复制代码

改造后

JdbcTemplate

JdbcTemplate提供的主要方法:

execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

query方法及queryForXXX方法:用于执行查询相关语句;

call方法:用于执行存储过程、函数相关语句。

我们只需要在使用jdbcTemplate类中使用@Autowired进行注入即可:


@Autowired

private JdbcTemplate jdbcTemplate;

复制代码

批量插入操作:


public void batchSave(){
ListbatchArgs=new ArrayList();
batchArgs.add(new Object[]{1,"小明",21});
batchArgs.add(new Object[]{2,"小红",22});
batchArgs.add(new Object[]{3,"露西",23});
String sql = "insert into user (username,password) values (?,?)";
jdbcTemplate.batchUpdate(sql, batchArgs);
}


复制代码

以上基本实现了批量插入功能,但是当数据库字段比较多的时候,再以?占位符的形式编码的话就可能不是那么好一 一对应了,这里spring还提供了SimpleJdbcTemplate(Spring3.1+ 以后被标记为过时,到Spring 4.3则被完全移除,后面这个完全能满足需求)和NamedParameterJdbcTemplate模板引擎。

NamedParameterJdbcTemplate

相信使用过Hibernate的同学都知道,HQL中可以使用?或者:*的方式在外部配置查询参数。在 Spring JDBC 框架中,也提供了一种绑定 SQL 参数的方式,使用具名参数(named parameter)。

我们只需要在使用NamedParameterJdbcTemplate类中使用@Autowired进行注入即可:


@Autowired

private NamedParameterJdbcTemplate namedParameterJdbcTemplate;


复制代码

批量插入操作:


public void batchSave(){
Listlist = new ArrayList();
//新增用户
list.add(new AppStudent(1,"张三",21));
list.add(new AppStudent(1,"李四",22));
list.add(new AppStudent(1,"王二麻子",23));
//批量转数组
SqlParameterSource[] beanSources = SqlParameterSourceUtils.createBatch(list.toArray());
String sql = "INSERT INTO app_student(class_id,name,age) VALUES (:classId,:name,:age)";
namedParameterJdbcTemplate.batchUpdate(sql, beanSources);
}


复制代码

最后我们使用System.currentTimeMillis()来对比打印一下具体改造前后的执行时间。


long start = System.currentTimeMillis();
//改造前后代码、自行补充
long end = System.currentTimeMillis();
System.out.println("花费时间:"+(end-start));


复制代码

快肯定是快了,至于快多少,那就要根据数据量以及机器配置来做相关的对比了。

项目源码:https://gitee.com/52itstyle/spring-data-jpa

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @职坐标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
本文作者 联系TA

擅长针对企业软件开发的产品设计及开发的细节与流程设计课程内容。座右铭:大道至简!

  • 370
    文章
  • 23058
    人气
  • 87%
    受欢迎度

已有23人表明态度,87%喜欢该老师!

进入TA的空间
求职秘籍 直通车
  • 索取资料 索取资料 索取资料
  • 答疑解惑 答疑解惑 答疑解惑
  • 技术交流 技术交流 技术交流
  • 职业测评 职业测评 职业测评
  • 面试技巧 面试技巧 面试技巧
  • 高薪秘笈 高薪秘笈 高薪秘笈
TA的其他文章 更多>>
WEB前端必须会的基本知识题目
经验技巧 93% 的用户喜欢
Java语言中四种遍历List的方法总结(推荐)
经验技巧 91% 的用户喜欢
Java语言之SHA-256加密的两种实现方法详解
经验技巧 75% 的用户喜欢
java语言实现把两个有序数组合并到一个数组的实例
经验技巧 75% 的用户喜欢
通过Java语言代码来创建view的方法
经验技巧 80% 的用户喜欢
其他海同师资 更多>>
吕益平
吕益平 联系TA
熟悉企业软件开发的产品设计及开发
孔庆琦
孔庆琦 联系TA
对MVC模式和三层架构有深入的研究
周鸣君
周鸣君 联系TA
擅长Hadoop/Spark大数据技术
范佺菁
范佺菁 联系TA
擅长Java语言,只有合理的安排和管理时间你才能做得更多,行得更远!
金延鑫
金延鑫 联系TA
擅长与学生或家长及时有效沟通
经验技巧30天热搜词 更多>>

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程