hibernate的sql查询
hibernate有的时候用起来貌似不是那么顺手,像sql查询在hibernate中就是一大缺陷,稍微复杂点的查询hibernate几乎做不到。这次整理了一些关于hibernate使用sql语句查询的知识,就拿出来分享给大家吧
1.map结果类型的sql查询
public void queryBySql() {
Transaction tx=null;
Session ses=null;
try {
ses = HibernateUtil.getSession();
tx = ses.beginTransaction();
String sql="select name from student where sno='2009010502'";
Query q=ses.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List list = q.list();
for(int i=0;i<list.size();i++){
Map m=(Map)list.get(i);
System.out.println(m.get("NAME"));
}
tx.commit();
} catch (HibernateException e) {
throw e;
}finally{
if(ses!=null){
ses.close();
}
}
}
这种查询还算OK,只不过拿来分页的话就麻烦了
2.addEntity的方式
这种方法我觉得比较适合连接查询的情况,但是无论怎样,hibernate的sql查询就是麻烦
public void queryByEntitySql() {
Transaction tx=null;
Session ses=null;
try {
ses = HibernateUtil.getSession();
tx = ses.beginTransaction();
String sql="select d.*,s.* from dept d,Student s where d.deptno=s.deptno";
Query q=ses.createSQLQuery(sql)
.addEntity("d",Depart.class)
.addEntity("s",Student.class);
List list = q.list();
Iterator it=list.iterator();
while(it.hasNext()){
Object[] obj=(Object[])it.next();
Depart d=(Depart)obj[0];
System.out.println(d.getDname());
}
tx.commit();
} catch (HibernateException e) {
throw e;
}finally{
if(ses!=null){
ses.close();
}
}
}
这种方式的查询有点类似Ibatis的那种连接查询
还没有评论,来说两句吧...