您的位置:首页 > 其它

Hibernate HQL 单表查询

2015-10-02 23:24 302 查看
hql语句分三种情况考虑:

单表;

一对多 & 多对多;

多表结合

需求:查询所有班级信息

public class HQLDao extends HiberanteUtils{
/**
* 单表
*/
public List<Classes> queryAllClasses(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes").list();	//HQL 语句
session.close();
return cList;
}

// 工厂模式
public  static  HQLDao  getInstance(){
return  new  HQLDao();
}
}

结果:cname的值列表 description的值列表

=======================================================

需求:带属性的查询

public List queryClasses_Properties(){
Session session = sessionFactory.openSession();
List cList = session.createQuery("select cid, cname from Classes").list();	// 带属性cid, cname的查询
session.close();
return cList;
}


上面两个查询的结论:带 select 的查询和不带select 的查询结果完全不同。

带select的:查出来的是“对象”;

不带 select 的:查出来的是“数组”。

========================================================

需求:希望在 List 中包含有 JavaBean 的形式的查询

在HQLDao.java 中

public  List<Classes>  queryClasses_Constructor(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("select  new  cn.google.hiberate.sh.domain.Classes(cname, description)  from Classes").list();
session.close();
return cList;
}
必要条件: 在 Classes.java 中添加带参数的构造函数

public  Classes(String  cname, String description){
this.cname = cname;
this.description = description;
}


======================================================

需求:按条件查询班级,where id= ?

public Classes queryClasses_Condition(){
Session session = sessionFactory.openSession();
Query query = session.createQuery("select new cn.google.hiberate.sh.domain.Classes(cname,description) from Classes where cid=:cid");
query.setLong("cid", 1L);
Classes classes = (Classes)query.uniqueResult();	//返回唯一的结果集
System.out.println(classes.getCname());
session.close();
return classes;
}

==========================================

需求:查询 cid=1,2,3 的班级

public void queryClasses_SubSelect(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from  Classes  where  cid  in(select cid  from Classes where  cid  in(1,2,3))").list();
session.close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: