不要循环查询数据库
2015-07-20 18:18
411 查看
在编码过程中要避免在循环中查询数据库,能一次查询的就不要多次查询。下面两个代码块是完全等效的。代码块一写起来简单,但却在循环中多次查询数据库,该代码执行时间为8毫秒。代码二写起来麻烦甚至还多了个双重循环,但只查询一次数据库,该代码执行时间为2毫秒。
代码块一:
for (Device dev : list) {
String dmi = dev.getDeviceModelId();
if (StringUtils.isBlank(dmi)){
continue;
}
DeviceModel dm = this.deviceModelManager.get(dmi);
//查询数据库
dev.setDeviceModel(dm);
}
代码块二:
List<String> deviceModelIdList = new ArrayList<String>();
for (Device dev : list) {
String dmi = dev.getDeviceModelId();
if (StringUtils.isBlank(dmi)){
continue;
}
deviceModelIdList.add(dmi);
}
List<DeviceModel> deviceModelList = this.deviceModelManager.find(new NameValuePair("id", MatchMode.IN, deviceModelIdList)); //查询数据库
for (Device dev : list) {
for(DeviceModel model : deviceModelList){
if(model.getId().equals(dev.getDeviceModelId())){
dev.setDeviceModel(model);
}
}
}
代码块一:
for (Device dev : list) {
String dmi = dev.getDeviceModelId();
if (StringUtils.isBlank(dmi)){
continue;
}
DeviceModel dm = this.deviceModelManager.get(dmi);
//查询数据库
dev.setDeviceModel(dm);
}
代码块二:
List<String> deviceModelIdList = new ArrayList<String>();
for (Device dev : list) {
String dmi = dev.getDeviceModelId();
if (StringUtils.isBlank(dmi)){
continue;
}
deviceModelIdList.add(dmi);
}
List<DeviceModel> deviceModelList = this.deviceModelManager.find(new NameValuePair("id", MatchMode.IN, deviceModelIdList)); //查询数据库
for (Device dev : list) {
for(DeviceModel model : deviceModelList){
if(model.getId().equals(dev.getDeviceModelId())){
dev.setDeviceModel(model);
}
}
}
相关文章推荐
- p/l sql developer 快捷键
- 用sql语句快速备份表数据
- oracle 10g 恢复dmp文件。
- MySQL的常用操作
- Err:error occurred at recursive SQL level 1
- 源码安装mysql出现 No curses/termcap library found 错误
- java代码实现redis分布式锁代码
- redis slowlog
- SQL 把一个数据库里面的某张表里的数据插入到另外一个数据库里面的一张表
- SQL打印全年日历
- oracle中的varchar2存放汉字的问题总结
- navicat premium 连接sqlserver 端口号配置
- 拼接SQL语句缺少“break”
- Redis常用命令
- 拼接SQL语句缺少“break”
- bugzilla如何备份数据,导入导出数据库
- MySQL存储过程中实现执行动态SQL语句的方法
- 【Oracle 集群】Oracle 11G RAC教程之集群安装(七)
- Python 模块-操作Redis
- MySQL存储过程的异常处理方法