hibernate单表查询总结(下)
本博客接着hibernate单表查询总结(上)继续就Hibernate的单表查询进行总结
一、分页查询
public void testQuerySingleTable_HQL_PagingPuery() { Session session = HbnUtils.getSession(); try { session.beginTransaction(); String hql = "from Student"; int pageNo = 2;//当前页码 int pageSize = 3;//每页记录数 int firstResult =(pageNo - 1) * pageSize;//起始处 List<Student> list = session.createQuery(hql) .setFirstResult(firstResult) .setMaxResults(pageSize) .list(); for (Student stu : list) { System.out.println(stu); } session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } }
二、模糊查询
public void testQuerySingleTable_HQL_Vague() { Session session = HbnUtils.getSession(); try { session.beginTransaction(); String hql = "from Student where name like:name"; List<Student> list = session.createQuery(hql) .setString("name", "%张%") .list(); for (Student stu : list) { System.out.println(stu); } session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } }
三、聚合函数查询
public void testQuerySingleTable_HQL_AggregateFunction() { Session session = HbnUtils.getSession(); try { session.beginTransaction(); String hql = "select count(id) from Student"; Long count = (Long) session.createQuery(hql).uniqueResult(); System.out.println("一共有:"+count+"条数据"); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } }
四、映射查询
(只取某几个字段)
public void testQuerySingleTable_HQL_Mapping() { Session session = HbnUtils.getSession(); try { session.beginTransaction(); String hql = "select new Student(name,age) from Student"; // 执行操作 List<Student> list = session.createQuery(hql) .list(); for (Student stu : list) { System.out.println(stu); } session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } }
五、分组查询
public void testQuerySingleTable_HQL_Group() { Session session = HbnUtils.getSession(); try { session.beginTransaction(); //查询有几个年龄段 String hql = "select age from Student gruoup by age"; // 执行操作 List<Integer> list = session.createQuery(hql).list(); // 执行操作 for (Integer age : list) { System.out.println(age); } session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } }
六、命名查询
命名查询是将HQL语句配置到xml文件中,从而提高代码的可维护性,HQL语句可以配置到当前应用的任一xxx.hbm.xml文件中
具体位置是在class标签后面
public void testQuerySingleTable_HQL_NamedQuery() { Session session = HbnUtils.getSession(); try { session.beginTransaction(); //getNamedQuery("selectById")参数为配置文件里写的名字 Student stu = (Student) session.getNamedQuery("selectById").setInteger("id", 3).uniqueResult(); System.out.println(stu); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } }
七、关于单表查询的效率问题
在Query接口的List方法和Iterate方法总结一文中有详细讲述