hibernate少量数据查询慢

问题:hibernate 查询 TbDefectTable对象 233条数据需要5-6秒时间
此项目为公司拥有很久历史的项目
TbDefectTable对象有20个字段 + TbDefectTable关联对象 5个字段
hibernate版本:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.5.0_13-119 (Apple Inc.)
Implementation-Title: Hibernate3
Implementation-Version: 3.2.6.ga
Implementation-Vendor: hibernate.org
Hibernate-Version: 3.2.6.ga

猜测:查询语句太复杂执行慢(将hibernate打印语句放数据库直接执行速度很快 )×
猜测:每次都需要重新连接数据库或连接池资源耗尽… ×
猜测: 数据表被锁×
猜测:查询后xml与对象映射过程耗时较多 √
猜测:…


	//解决:查出来数据后自定义转化为对象的方法
	public List getFindDefectByHql(String hql){
		
		List<Map<String, Object>> list_map = new ArrayList();
		List<TbDefectTable> list = new ArrayList<TbDefectTable>();
		
		try {	
			long start = System.currentTimeMillis();
			Session session = HibernateUtil.currentSession();
			String sql = "select * " + hql.replaceAll("TbDefectTable", "Tb_Defect_Table");
			SQLQuery query = session.createSQLQuery(sql);
			query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
			//query.addEntity(TbDefectTable.class);//发现是此方法影响性能
			
			list_map = query.list();//执行查询
			
			for (int i = 0; i < list_map.size(); i++) {//将查出的数据进行处理
				TbDefectTable bean = mapToBean(list_map.get(i));//转换成对象
				list.add(bean);
			}
			
			long res = System.currentTimeMillis() - start;
			System.out.println("耗时:" + res + ",结果:" + list.size() + ",执行:" + sql);
			
		}catch(Exception e){e.printStackTrace();
		}finally{HibernateUtil.closeSession();}
		return list;
	}
	
	//将Map转换成对象
	public static TbDefectTable mapToBean(Map<String, Object> map) {
		TbDefectTable bean = new TbDefectTable();
		BeanMap beanMap = BeanMap.create(bean);
		beanMap.putAll(map);
		return bean;
	}
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

௸ೄ流年ೄ೨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值