1. 程式人生 > >hibernate使用本地sql語句查詢,解決List Object轉換成List Entity

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;
}