【HQL】分页查询 、对象导航查询、外置命名查询、连接查询、查询过滤器、统计查询...

本文介绍了使用Hibernate进行各种查询的方法,包括分页查询、对象导航查询、外置命名查询、连接查询、查询过滤器及统计查询等。通过具体示例展示了如何灵活运用这些查询方式来满足不同的业务需求。

分页查询

List students = session.createQuery("from Student")
                        .setFirstResult(1)
                        .setMaxResults(2)
                        .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Student student = (Student)iter.next();
                System.out.println(student.getName());
            }

 

对象导航查询

session = HibernateUtils.getSession();
            session.beginTransaction();
            List students = session.createQuery("from Student s where s.classes.name like '%2%'")
                        .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Student student = (Student)iter.next();
                System.out.println(student.getName());
            }

 

外置命名查询

List students = session.getNamedQuery("queryStudent")
                                    .setParameter(0, 10)
                                    .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Student student = (Student)iter.next();
                System.out.println(student.getName());
            }

 

连接查询

List students = session.createQuery("select c.name, s.name from Student s join s.classes c")
                        .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }
List students = session.createQuery("select c.name, s.name from Student s left join s.classes c")
                        .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }
List students = session.createQuery("select c.name, s.name from Student s right join s.classes c")
                        .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }

 

查询过滤器

session.enableFilter("testFilter")
                    .setParameter("myid", 10);
            List students = session.createQuery("from Student").list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Student student = (Student)iter.next();
                System.out.println(student.getName());
            }

 

统计查询

List list = session.createQuery("select count(*) from Student").list();
//            Long count = (Long)list.get(0);
            
            Long count = (Long)session.createQuery("select count(*) from Student").uniqueResult();
//            Long count = (Long)session.createQuery("select count(*) from Student")
//                    .setMaxResults(1)
//                    .uniqueResult();
            System.out.println("count=" + count);
String hql = "select c.name, count(s) from Classes c join c.students s group by c.name order by c.name";
            List students = session.createQuery(hql).list();
            for (int i=0; i<students.size(); i++) {
                Object[] obj = (Object[])students.get(i);
                System.out.println(obj[0] + ", " + obj[1]);
            }

 

转载于:https://www.cnblogs.com/yinweitao/p/6006108.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值