24_Hibernate查询语言HQL

来源:互联网 发布:java list 线程安全类 编辑:程序博客网 时间:2024/06/06 03:29

24.1 HQL基础查询

24.1.1 HQL语法

Query query = session.createQuery(" from Cat ");List<Cat> catList = query.list();

24.1.2 HQL大小写不敏感

但是涉及java的敏感

24.1.3 使用Package名


24.2 返回类型

24.2.1 查询单个的对象

使用unique()方法,常用来查询记录总数

Query q = session.createQuery(" select count(c) from Cat c ");Number num = (Number)q.uniqueResult();int count = num.intValue();

24.2.2 返回集合属性

list()方法可以返回实体对象,也可以返回实体对象的属性等

        List<Cat> catList = session.createQuery(" select c from Cat c ").list();        List<String> nameList = session.createQuery(" select c.name from Cat c ").list();        List<String[]> nameList2 = session.createQuery(" select c.name,c.mother.name from Cat c ").list();


24.3 同时返回多个对象

24.3.1 返回Object[]数组

List<Object[]> list = session.createQuery(" select c.name, c.mother, c.createDate from Cat c ").list();

24.3.2 返回List类型

List<List> list = session.createQuery(" select new List(c.name, c.mother, c.createDate) from Cat c ").list();

24.3.3 返回Map类型

List listMap = session.createQuery(" select new map(c.name as name, c.mother as mother, c.createDate as createDate) from Cat c ").list();

24.4 返回Java实体对象

这种使用最简单,但是需要有相应的构造器

List<Cat> catList = session.createQuery(" select new Cat(cat.name, cat.createDate) from Cat cat ").list();


24.4 条件查询

24.4.1 where子句语法

session.createQuery(" select c from Cat c where c.mother.name = null and c.createDate < :createDate ").setParameter("createDate", new Date()).list();

24.4.2 HQL支持的运算符


24.5 统计函数

Number num = (Number)session.createQuery(" select count(c) from Cat c where c.mother != null").uniqueResult();


24.6 HQL分页显示

long count = (Long)session.createQuery(" select count(c) from Cat c ").uniqueResult();List<Cat> list = session.createQuery(" from Cat c ").setFirstResult(0).setMaxResults(10).list();


24.7 HQL级联查询

24.7.1 跨表查询

List<Event> list = session.createQuery(" select e from Event e where e.cat.name = 'kitty' ").list();

24.7.2 级联查询

List<Cat> list = session.createQuery(" select c from Cat c left join c.events e where e.description like :description ").setParameter("description","%吃饭%").list();


24.8 使用SQL数据库

24.8.1 使用SQLQuery

24.8.2 返回实体类型

SQLQuery sql = session.createSQLQuery(" select * from tb_cat ");sql.addEntity(Cat.class);List<Cat> list = sql.list();


24.9 命名常用的查询

24.9.1 @配置命名查询

@NamedQuer(name = "all cat", query = " select c from Cat c ")@NamedNativeQuery(name = "all cat", query = " select * from tb_cat ")

24.9.2 设置查询扩展

@NamedQuery(name = "cat by name", query = " select c from Cat c where c.name = :name ", hints = { @QueryHint(name = "org.hibernate.callable", value="true")})

24.9.3 设置多个命名查询

@NamedQueries(value = {@NamedQuery(name = "all cat", query = " select c from Cat c "),@NamedQuery(name = "cat by name", query = " select c from Cat c where c.name = :name")})

使用命名查询:

Query q = session.getNamedQuery("cat by name").setParameter("name", "Kitty");

24.9.4 XML配置命名查询


24.10 本章小结