Hibernate是较为经典的JavaEE持久层框架,其设计初衷是为了减少sql语句的直接书写。目前,Hibernate有3种查询数据库的方法:HQL Query,Criteria Query,原生的sql查询。查询方式,只要懂一点sql很容易上手,而数据格式和解析方式却会给新手带来一定的困扰。日前由于公司产品迭代,需要更新升级部分后台接口,daoimpl中写的类似于
TableName = "select new com.yf.entity.Assemble_GridSumXy(j.sumMonth, p.id, p.lat, p.lon, p.weight, j.griduser) "
+ " from WorkSum j , WorkSumXY p ";
sort = " and j.gradeId = p.gradeId ";
DateTime = " where j.sumDate >= :startDate and j.sumDate < :endDate and ";
return (List) query.list();
都给代码的集成和可复用性带来了一定的困扰。楼主从后台数据查询返回的list为切入口,对代码进行重写构建。
第一种:HQL Query
在daoimpl中:
public List
此时的query.list()的返回结果是一个ListCollections和Works对象,在解析的时候,分别强转为相应的对象即可。
具体代码如下: Object[] obj=null;
for(Object item: tempList){
listMap = new HashMap();
obj = (Object[])item;
Collections c1= (Collections)obj[0];
Works w1=(Works)obj[1];
listMap.put("time", c1.getCollect_time());
listMap.put("bz", w1.getBz());
listMap.put("work_name", w1.getWorks_name());
resultList.add(listMap);
}
当然如果执意要只查询部分元素,可以采用
Object[] obj=null;
for(Object item: tempList){
listMap = new HashMap();
obj = (Object[])item;
Object c1= (Object)obj[0];
Object w1=(object)obj[1];
listMap.put("time",c1[0]);
listMap.put("oher",c1[1]);
listMap.put("bz", w1[0]);listMap.put("work_name", w1[1]);resultList.add(listMap);}
元素的顺序就是hql语句中元素的查询顺序。
第二种:Criteria Query
@Override
public List
第三种:原生sql
StringBuffer sql =new StringBuffer();
sql.append("select * from msg where user_id= ");
sql.append(user_id);
Query query = getSession().createSQLQuery(sql.toString());
return query.list();
返回的结果也是一个List水平有限,感觉没把要表达的东西充分表达出来。。。总之技术这条路还要不断的磨练,不断尝试,大家共勉!