hibernate使用本地sql语句查询,解决List Object转换成List Entity

本人第一次写技术文档的博客,可能有什么语言语法问题,还有技术类的名词误解请多包涵,并予以指正方便我和大家更好的学习。废话不多说,开始进行现在的任务。

我们在使用hibernate框架时,对于程序员使用hibernate模板HibernateTemplate进行事务处理。对于增删改很方便,但是对于查可能很大的问题了。所以我们自己编写sql语句,不能依赖于Hql。在SSH框架的项目中,我是这样来处理的。如果哪个网友有更好的方法,欢迎提供!

我想到一个查询方法,sql语句是这样的

SELECT * FROM (SELECT  o.* FROM shop_goods o ORDER BY o.goods_date DESC ) e LIMIT 3;

不能翻译成Hql语句,此时要用hibernate执行本地sql语句。

public List<Object[]> findGoodsByDate() {
	final String sql = "SELECT * FROM (SELECT  o.* FROM shop_goods o ORDER BY o.goods_date DESC ) e LIMIT 3";
	//执行sql语句
	List<Object[]> list = (List<Object[]>) this.getHibernateTemplate().execute(new HibernateCallback() {
		public Object doInHibernate(Session session) throws HibernateException,
				SQLException {
			SQLQuery query = session.createSQLQuery(sql);
			return query.list();
		}
	});
	return list;
}

 

service层的interface是这样的

public List<ShopGoods> findGoodsByDate();

service层中调用dao层findGoodsByDate()方法获取的是List<Object[]>

如何将List<Object[]>转换成List<ShopGoods>呢?

 

ShopGoods的实体类是

 

private String id;//主键id,     
private String goodsName;//商品名称,           
private String goodsPrice;//商品价格,            
private String goodsStatus;	//商品状态,            
private String goodsDate;  //商品上架的日期,
private String goodsClass;

service层的方法是

 

public List<ShopGoods> findGoodsByDate() {
	List<Object[]> list = shopGoodsDao.findGoodsByDate();
	//将返回的集合封装成list集合
	List<ShopGoods> goodsList = this.shopObjectListTOPOList(list);//抽象一个方法出去
	return goodsList;
}
	
/**值转换*/
private List<ShopGoods> shopObjectListTOPOList(List<Object[]> list) {
	List<ShopGoods> shopGoodsList = new ArrayList<ShopGoods>();
	for(int i=0; list != null && i<list.size(); i++) {
		
		Object[] objects = list.get(i);
		
		if(objects.length > 0) {
			ShopGoods shopGoods = new ShopGoods();
			for(int j=0; j<objects.length; j++) {
				shopGoods.setGoodsDate((String)objects[j]);
				shopGoods.setGoodsName((String)objects[j]);
				shopGoods.setGoodsPrice((String)objects[j]);
				shopGoods.setGoodsStatus((String)objects[j]);
				shopGoods.setId((String)objects[j]);
			}
			shopGoodsList.add(shopGoods);
		}
	}
	return shopGoodsList;
}

 

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值