Hibernate Criteria查询
2016-03-08 17:31
351 查看
在使用Hibernate时,即使我们不了解SQL的使用与撰写,也可以使用它所提供的API来进行SQL语句查询 org.hibernate.Criteria对SQL进行封装,我们可以根据具体情况组合各种查询条件,并由Hibernate自动为您产生SQL语句,而不用特别管理SQL与资料库相依的问题。
Criteria查询采用面向对象方式封装查询条件,又称为对象查询
Criteria由HibernateSession进行创建
Criteria criteria =session.createCriteria(Dept.class);
++++++>> select * from dept;
(1)如果有条件限制,那么就使用Criteria的add()方法加入“条件实例”,条件实例是由Restrictions的各种静态方法返回的
(2)如果要查询部分字段,以及统计个数,分组,最大值等等。
dfdf
Criteria查询采用面向对象方式封装查询条件,又称为对象查询
Criteria由HibernateSession进行创建
Criteria criteria =session.createCriteria(Dept.class);
++++++>> select * from dept;
/** * (1)使用Criteria查询所有的部门 */ @Test public void test1() { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); try { // 获取当前的对象查询 Criteria criteria = session.createCriteria(Dept.class); // 返回集合对象? List<Dept> list = criteria.list(); System.out.println(list.size()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { session.close(); } }
(1)如果有条件限制,那么就使用Criteria的add()方法加入“条件实例”,条件实例是由Restrictions的各种静态方法返回的
/** /* (2)查询位置在“NEW YORK”的部门 使用Criteria的add()方法加入“条件实例”, */ @Test public void test2() { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); try { // 获取当前的对象查询 Criteria criteria = session.createCriteria(Dept.class).add( Restrictions.eq("loc", "NEW YORK")); // 条件条件等同 // 返回集合对象? List<Dept> list = criteria.list(); System.out.println(list.size()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { session.close(); } }
@Test public void test4() { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); try { // 获取当前的对象查询 Criteria criteria = session .createCriteria(Emp.class, "e") // "e"别名 .add(Restrictions.ne("e.dept.deptno", 10L)) // deptno<>10 .add(Restrictions.in("job", new Object[] { "CLERK", "ANALYST" })) // job in ("CLERK","ANALYST") .add(Restrictions.like("ename", "%S")) // ename like '%S' .add(Restrictions.lt("sal", 1000D)) // sal<1000 ; // 返回集合对象? List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp.getEname() + "\t" + emp.getJob() + "\t" + emp.getSal() + "\t" + emp.getDept().getDeptno()); } System.out.println(list.size()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { session.close(); } }结果集排序:使用org.hibernate.criterion.Order
@Te public void test5() { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); try { // 获取当前的对象查询 Criteria criteria = session.createCriteria(Emp.class, "e") // "e"别名 .add(Restrictions.ilike("ename", "S", MatchMode.ANYWHERE)) // ename // like // '%S%' // .add(Restrictions.ilike("ename", "S", MatchMode.START)) // //ename like 'S%' // .add(Restrictions.ilike("ename", "S", MatchMode.END)) // //ename like '%S' // .add(Restrictions.ilike("ename", "SCOTT", // MatchMode.EXACT)) //ename ='SCOTT' // .add(Restrictions.and(Restrictions.eq("job", "CLERK"), // Restrictions.ge("sal", 1000D))) .addOrder(Order.desc("sal")) // order by sal desc ; // 返回集合对象? List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp.getEname() + "\t" + emp.getJob() + "\t" + emp.getSal() + "\t" + emp.getDept().getDeptno()); } System.out.println(list.size()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { session.close(); } }
(2)如果要查询部分字段,以及统计个数,分组,最大值等等。
/** * 1.查询部门名称 * * select dname from dept; * */ @Test public void test1() { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); try { // 获取当前的对象查询 Criteria criteria = session.createCriteria(Dept.class) .setProjection(Projections.property("dname")); // 返回字符串 // java.lang.ClassCastException: java.lang.String cannot be cast to // com.hlx.entity.Dept List<String> list = criteria.list(); for (String dept : list) { System.out.println(dept); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { session.close(); } }
/** * * * 2.使用setProjection(),查询员工姓名和入职时间 * * select ename,hiredate from emp; * * */ @Test public void test2() { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); try { // 获取当前的对象查询 Criteria criteria = session.createCriteria(Emp.class) .setProjection( Projections.projectionList() .add(Projections.property("ename")) .add(Projections.property("hiredate")) ) ; // 返回字符串 // java.lang.ClassCastException: java.lang.String cannot be cast to // com.hlx.entity.Dept List<Object[]> list = criteria.list(); for (Object[] dept : list) { System.out.println(dept[0] + "\t" + Timestamp.valueOf(dept[1].toString())); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { session.close(); } }
/** * * * * 3.统计各个部门的平均工资、最高工资、最低工资 * * select deptno,avg(sal),max(sal),min(sal) from emp group by deptno order * by deptno desc */ @Test public void test3() { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); try { // 获取当前的对象查询 Criteria criteria = session .createCriteria(Emp.class, "e") .setProjection( Projections .projectionList() .add(Projections .groupProperty("e.dept.deptno")) .add(Projections.avg("sal")) .add(Projections.max("sal")) .add(Projections.min("sal"))) .addOrder(Order.desc("e.dept.deptno")); List<Object[]> list = criteria.list(); for (Object[] dept : list) { System.out.println(dept[0] + "\t" + dept[1] + "\t" + dept[2] + "\t" + dept[3]); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { session.close(); } }
dfdf
/** * 分页 criteria.setFirstResult() criteria.setMaxResults() */ @Test public void testPage() { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); int pageIndex = 1; // 当前页 int pageSize = 2; // 每页显示的个数 // 总个数 int pageCount = session.createCriteria(Emp.class, "e") .add(Restrictions.eq("job", "CLERK")).list().size(); // 总页数 int pageTotal = (pageCount % pageSize == 0) ? (pageCount / pageSize) : (pageCount / pageSize + 1); System.out.println(pageTotal); try { // 循环 for (int i = pageIndex; i <= pageTotal; i++) { System.out.println("第----->"+i); // 获取当前的对象查询 Criteria criteria = session.createCriteria(Emp.class, "e") .add(Restrictions.eq("job", "CLERK")) .setFirstResult((i - 1) * pageSize) .setMaxResults(pageSize); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp.getEname() + "\t" + emp.getJob() + "\t" + emp.getSal() + "\t" + emp.getDept().getDeptno()); } System.out.println("----------------------"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { session.close(); } }
相关文章推荐
- centos 安装redis php
- 精华阅读第7期|程序员职业人生规划的三点建议
- MongoDB的查询
- Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
- Android Cordova 插件开发之插件开发过程中遇到的问题
- 在团800运维工作总结之记一次lvs坑
- JS判断客户端是手机还是PC
- 处理slave(低版本)复制master(高版本)产生的error 1236
- 房屋装修该注意的事
- 怎样运行shell脚本程序
- linux 系统snmp安装
- Swift 闭包的使用(尾随闭包)
- 高性能 PHP socket 框架 Workerman
- iOS开发之BLOCK应用
- Android Checkbox详解
- 浅析AIDL的使用
- adapter
- iOS开发之富文本(oc与swift两种都有)
- Redis3.0.7 cluster/集群 安装配置教程
- textView输入中文时和高亮英文输入法时的字数统计