Hibernate与数据库交互的三种方式及数据解析
2016-09-07 09:58
435 查看
Hibernate是较为经典的JavaEE持久层框架,其设计初衷是为了减少sql语句的直接书写。目前,Hibernate有3种查询数据库的方法:HQL Query,Criteria Query,原生的sql查询。查询方式,只要懂一点sql很容易上手,而数据格式和解析方式却会给新手带来一定的困扰。日前由于公司产品迭代,需要更新升级部分后台接口,daoimpl中写的类似于
<pre name="code" class="java">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 ";
以及
第一种:HQL Query
在daoimpl中:public List<Object> getCollections(int collect_id) {
// TODO Auto-generated method stub
StringBuffer hql = new StringBuffer();
hql.append(" from Collections p, Works j where p.user_id = j.user_id and p.collect_id= :collect_id ");
Query query = getSession().createQuery(hql.toString());
query.setParameter("collect_id", collect_id);
return query.list();
}
listMap.put("bz", w1[0]);listMap.put("work_name", w1[1]);resultList.add(listMap);}
元素的顺序就是hql语句中元素的查询顺序。
第二种:Criteria Query
<pre name="code" class="java"> @Override
public List<Object> getWorks(int work_id) {
// TODO Auto-generated method stub
Criteria creteria = getSession().createCriteria(Works.class);
creteria.add(Restrictions.eq("work_id", work_id));
return (List<Object>) creteria.list();
}
Criteria查询类似,只是在形式上有所差别。
第三种:原生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<Object>形式,结构和解析方式跟hql中查询部分元素类似。
水平有限,感觉没把要表达的东西充分表达出来。。。总之技术这条路还要不断的磨练,不断尝试,大家共勉!
<pre name="code" class="java">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<WorkSum>) query.list();
都给代码的集成和可复用性带来了一定的困扰。楼主从后台数据查询返回的list为切入口,对代码进行重写构建。
第一种:HQL Query
在daoimpl中:public List<Object> getCollections(int collect_id) {
// TODO Auto-generated method stub
StringBuffer hql = new StringBuffer();
hql.append(" from Collections p, Works j where p.user_id = j.user_id and p.collect_id= :collect_id ");
Query query = getSession().createQuery(hql.toString());
query.setParameter("collect_id", collect_id);
return query.list();
}
此时的<span style="font-family: Arial, Helvetica, sans-serif;">query.list()的返回结果是一个List<Object>的形式,深入的分析可知,List的每一个节点都是一个Object数组,该数组包含两个元素,分别是</span><span style="font-family: Arial, Helvetica, sans-serif;">Collections和</span><span style="font-family: Arial, Helvetica, sans-serif;">Works对象,在解析的时候,分别强转为相应的对象即可。</span>
<span style="font-family: Arial, Helvetica, sans-serif;">具体代码如下:</span><pre name="code" class="java"> Object[] obj=null; for(Object item: tempList){ listMap = new HashMap<String, Object>(); 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); }当然如果执意要只查询部分元素,可以采用
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="java">Object[] obj=null; for(Object item: tempList){ listMap = new HashMap<String, Object>(); obj = (Object[])item; Object c1= (Object)obj[0]; Object w1=(object)obj[1]; listMap.put("time",c1[0]);
<pre name="code" class="java"><span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="java"> listMap.put("oher",c1[1]);
listMap.put("bz", w1[0]);listMap.put("work_name", w1[1]);resultList.add(listMap);}
元素的顺序就是hql语句中元素的查询顺序。
第二种:Criteria Query
<pre name="code" class="java"> @Override
public List<Object> getWorks(int work_id) {
// TODO Auto-generated method stub
Criteria creteria = getSession().createCriteria(Works.class);
creteria.add(Restrictions.eq("work_id", work_id));
return (List<Object>) creteria.list();
}
Criteria查询类似,只是在形式上有所差别。
第三种:原生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<Object>形式,结构和解析方式跟hql中查询部分元素类似。
水平有限,感觉没把要表达的东西充分表达出来。。。总之技术这条路还要不断的磨练,不断尝试,大家共勉!
相关文章推荐
- android sqlite使用之模糊查询数据库数据的三种方式
- android sqlite使用之模糊查询数据库数据的三种方式
- Android与web后台进行数据交互的三种方式
- XML数据的三种解析方式
- Android基础—XML数据解析的三种方式
- Android应用开发之sqlite使用模糊查询数据库数据的三种方式
- Hibernate三种数据操作方式HQL-Criteria-Sql
- Hibernate根据主键读取持久化数据的三种方式
- JSON数据解析的三种情况+pjson的方式
- UI网络笔记(四):UI网络之解析XML数据的三种方式
- android sqlite使用之模糊查询数据库数据的三种方式
- android学习之路6:xml数据解析的三种方式
- 数据类型转换的三种方式 Convert,parse和TryParse的解析
- XML数据的三种解析(JSON方式 , DOM方式 , Sax方式)
- Android基础——XML数据的三种解析方式
- Hibernate与数据库交互方式和Hibernate常用的几个方法
- Hibernate查询数据库的三种方式
- iOS- JSon和Xml解析,与服务器交互数据的解析详解与使用,各种解析方式详解
- Android解析json数据示例代码(三种方式)
- Android XML数据的三种解析方式