mybaits批量插入
2016-04-05 15:10
471 查看
对数据库的查询往往会消耗比较大的资源,因此我们在写代码的时候会侧重于在代码里去完成实体类的聚合而不是通过不断的查询。
最近在review code的时候发现了在遍历列表的循环查询数据库是十分消耗资源的。因此来考虑用更高效的方式去解决这个问题。
下面是问题:
这样对数据库插入的太频繁,因此需要改进。我们找到能够批量插入的mybaits支持,定义mapper:listCRUDMapper,当中定义接口:
sqlmap:
优化后的代码:
这样不用遍历的每次都去操纵数据库。提高了效率。
最近在review code的时候发现了在遍历列表的循环查询数据库是十分消耗资源的。因此来考虑用更高效的方式去解决这个问题。
下面是问题:
List<Long> locationList = locationGroupInfo.getLocationList(); if(locationList != null && locationList.size() != 0) { Long groupId = adLocationGroup.getId(); List<AdLocationAdLocationGroup> adLocationAdLocationGroupList = new ArrayList<AdLocationAdLocationGroup>(); for(Long id : locationList) { AdLocationAdLocationGroup adLocationAdLocatioGroup = new AdLocationAdLocationGroup(); adLocationAdLocatioGroup.setAdId(id); adLocationAdLocatioGroup.setLocationGroupId(groupId); adLocationAdLocationGroupMapper.insertSelective(adLocationAdLocationGroup); } }
这样对数据库插入的太频繁,因此需要改进。我们找到能够批量插入的mybaits支持,定义mapper:listCRUDMapper,当中定义接口:
// 批量插入AdLocationAdLocationGroup public int insertAdLocationAdLocationGroupList(List<AdLocationAdLocationGroup> adLocationAdLocationGroupList);
sqlmap:
<insert id="insertAdLocationAdLocationGroupList" parameterType="java.util.List"> <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> insert into ad_location_ad_location_group (id, ad_id, location_group_id ) values <foreach collection="list" item="adLocationAdLocationGroup" index="index" separator=","> (#{adLocationAdLocationGroup.id,jdbcType=BIGINT}, #{adLocationAdLocationGroup.adId,jdbcType=BIGINT}, #{adLocationAdLocationGroup.locationGroupId,jdbcType=BIGINT} ) </foreach> </insert>
优化后的代码:
List<Long> locationList = locationGroupInfo.getLocationList(); if(locationList != null && locationList.size() != 0) { Long groupId = adLocationGroup.getId(); List<AdLocationAdLocationGroup> adLocationAdLocationGroupList = new ArrayList<AdLocationAdLocationGroup>(); for(Long id : locationList) { AdLocationAdLocationGroup adLocationAdLocatioGroup = new AdLocationAdLocationGroup(); adLocationAdLocatioGroup.setAdId(id); adLocationAdLocatioGroup.setLocationGroupId(groupId); adLocationAdLocationGroupList.add(adLocationAdLocatioGroup); } listCRUDMapper.insertAdLocationAdLocationGroupList(adLocationAdLocationGroupList); }
这样不用遍历的每次都去操纵数据库。提高了效率。
相关文章推荐
- lightoj 1223 - Testing Mailboxes 区间DP
- Gradle sync failed: Out of memory: PermGen space
- AFNetworking的报错Error Domain=NSURLErrorDomain Code=-1012 解决问题
- 56 RAII实现智能指针
- gdb在运行maintenance info program-spaces命令时coredump
- 移动诊疗和人工智能序言
- intellij创建安卓项目时Crunching cruncher ***.png failed的解决
- [z] 人工智能和图形学、图像处理方面的各种会议的评级
- Light OJ 1252 Maintaining Communities (树形DP)
- Daily Sentence
- VirtualBox installation failure on Windows
- raid0
- 数据一致性(consistency)、服务可用性(availability)、分区容错性(partition-tolerance)
- USACO 1.3-Barn Repair
- How Browsers Work<二>渲染引擎--painting
- 根据慕课网Daisy老师教程写的 爱心鱼 网页小游戏
- UltraISO制作U盘启动盘安装Win7系统攻略
- uva 10245 The Closest Pair Problem
- ubuntu14.04启动提示set_sw_state failed
- Freeswitch 高级主题之用kamailio负载均衡