您的位置:首页 > 数据库

hibernate的sql查询

2014-05-14 21:32 99 查看
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的那种连接查询
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: