对于大批量数据查询,我们需要绕开Hibernate API,直接使用JDBC.使用Spring中JdbcTemplate的queryForList()方法也是很好的选择.当然整合好Spring,Struts和Hibernate是一门艺术,需要在实践中不断的总结和领略它们的风采.
业务说明:统计出一段时间内,全市每个缴费区域各种数据类型的记录数.在页面通过表格的形式显示出来,没有记录的通过0填充.如图
区县 |
业务1变更 |
业务2变更 |
业务3变更 |
业务4变更 |
区县1 |
0 |
0 |
0 |
0 |
区先2 |
2 |
0 |
2 |
0 |
全市 |
2 |
0 |
2 |
0 |
系统原来使用hibernate实现的代码
数组payarea存放着各个缴费区域
数组datatype存放着各个数据类型
上面方法调用的方法
上面代码的思路是通过两个for循环遍历全市下每个缴费区域的数据类型,每一次循环都要调用countReportInfo方法返回记录数,最后存放到Map中.
通过这种方式实现统计查询时间需要10秒左右,这是用户根本不能忍受的.原因是HQL查询是面向对象的查询的方法,中间有一个映射转换,这不是最重要的.最重要的是两个for循环.每次循环需要不断的调用方法,不断的和数据库交换数据.这种做法不仅需要消耗大量的资源,还和费时间.为此我们使用Spring提供的方法
使用Spring重写的代码,统计速度有本质的提升
首先使用SQL语言查询出每个缴费区域下有记录的数据类型的记录数
上面方法调用的方法
使用这种方法统计消耗的时间用户感觉不出来,原因是:通过一条sql语言直接面向数据库查询出来,然后对查询出来的数据进行了包装,这个包装有点像”适配器”,也符合软件开发的思想.在这里我们也领略到了Spring的魅力.