Hibernate还可以将语句写到配置文件中。

FROM News AS n WHERE n.title LIKE ?

通过程序读取配置文件,取得这段HQL,并生成Query对象,完成查询。

Query query = HibernateSessionFactory.getSession().getNamedQuery(            "findAll");    query.setString(0, "%测试%");    return query.list();

这种方式在MyBATIS框架中普遍使用,在Hibernate中一般很少这样做。

3.1.2Criteria查询(了解)

Criteria也是Hibernate提供的一个查询对象,支持按对象的方式来完成查询。

例如:

查询全部功能

public List
testCriteria() throws Exception { // 根据传入的pojo类型,查询该类型对应的全部数据 Criteria c = HibernateSessionFactory.getSession().createCriteria( News.class); return c.list(); }

如果想加入查询条件,需要使用Restrictions的各种方法来完成条件的拼写。

public List
testCriteria() throws Exception { // 根据传入的pojo类型,查询该类型对应的全部数据 Criteria c = HibernateSessionFactory.getSession().createCriteria( News.class); // 1、WHERE id = 26 // c.add(Restrictions.eq("id", 26)); // 2、WHERE id > 26 // c.add(Restrictions.gt("id", 26)); // 3、WHERE id < 26 // c.add(Restrictions.lt("id", 26)); // 4、WHERE id >= 26 // c.add(Restrictions.ge("id", 26)); // 5、WHERE id <= 26 // c.add(Restrictions.le("id", 26)); // 6、WHERE id <> 26 // c.add(Restrictions.ne("id", 26)); // 7、WHERE title LIKE '%测试%' // c.add(Restrictions.like("title", "%测试%")); // 8、WHERE id between 23 and 27 // c.add(Restrictions.between("id", 23, 27)); // 9、WHERE id IN (23,25,27) // List
allIds = new ArrayList
(); // allIds.add(23); // allIds.add(25); // allIds.add(27); // c.add(Restrictions.in("id", allIds)); // 10、复杂条件,需要使用and或or来连接各个条件 // WHERE id = 23 OR (id <> 26 AND title LIKE '%测试%') c .add(Restrictions.or(Restrictions.eq("id", 23), Restrictions .and(Restrictions.ne("id", 26), Restrictions.like( "title", "%测试%")))); return c.list(); }

如果想加入ORDER BY排序条件,需要使用Order对象。

c.addOrder(Order.desc("id"));

如果想加入统计函数和分组函数,则需要用到Projection这个类

ProjectionList pro = Projections.projectionList();    // 加入统计函数    pro.add(Projections.rowCount());    // 还可以加入分组条件    pro.add(Projections.groupProperty("title"));    c.setProjection(pro);