Hibernate查询技术(2)

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

<query name="findAll">
        FROM News AS n WHERE n.title LIKE ?
    </query>

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

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

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

3.1.2Criteria查询(了解)

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

例如:

查询全部功能

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

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

public List<News> 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<Integer> allIds = new ArrayList<Integer>();
        // 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);


你可能感兴趣的:(return,技术,程序,配置文件)