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