Hibernate Criteria查询

           在使用Hibernate时,即使我们不了解SQL的使用与撰写,也可以使用它所提供的API来进行SQL语句查询 org.hibernate.Criteria对SQL进行封装,我们可以根据具体情况组合各种查询条件,并由Hibernate自动为您产生SQL语句,而不用特别管理SQL与资料库相依的问题。

     Criteria查询采用面向对象方式封装查询条件,又称为对象查询

      CriteriaHibernateSession进行创建  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)如果有条件限制,那么就使用Criteriaadd()方法加入“条件实例”,条件实例是由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();
		}

	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值