 Restrictions 类的作用是什么?
 Criteria 接口没有 iterate() 方法。
 Criteria 查询如何对查询结果排序、分页?
 Criteria 查询如何实现关联?
 Criteria 查询如何实现分组聚合?
 DetachedCriteria 有什么作用?

用代码告诉你:

package Test;

import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.List; import org.hibernate.Criteria;
import org.hibernate.Session; import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
import org.junit.Test; import entity.Dept;
import entity.Emp;
import entity.QueryCondition; import util.HibernateSessionFactory; //criteria查询
public class TestCriteria { @Test
public void Test1(){
Session session =HibernateSessionFactory.getSession();
try {
Criteria criteria = session.createCriteria(Emp.class);
Iterator<Emp> iter = criteria.list().iterator();
while(iter.hasNext()){
Emp emp=iter.next();
System.out.println(emp.getEname());
}
} catch (Exception e) {
// TODO: handle exception
}
}
/* 职位是工程师,如:job = ‘engineer’
工资大于2000元,如:salary > 2000
入职时间在2006年12月31日至2008年12月31日之间
模糊查询的时候可以使用
criteria动态查询
*/
@Test
public void Test2(){
Session session =HibernateSessionFactory.getSession();
try {
Criteria criteria = session.createCriteria(Emp.class);
QueryCondition queryCondition=new QueryCondition();
queryCondition.setStartdate(new SimpleDateFormat("yyyy-MM-dd").parse("1980-12-17"));
queryCondition.setEnddate(new SimpleDateFormat("yyyy-MM-dd").parse("1987-12-32"));
Emp emp =new Emp();
emp.setSal(2000D);
//emp.setJob("SALESMAN");
if(queryCondition.getStartdate()!=null){
criteria.add(Restrictions.gt("hiredate",queryCondition.getStartdate() ));
}
if(queryCondition.getEnddate()!=null){
criteria.add(Restrictions.lt("hiredate",queryCondition.getEnddate() ));
}
if(emp.getSal()!=null){
criteria.add(Restrictions.gt("sal", 2000D));
}
if(emp.getJob()!=null){
criteria.add(Restrictions.eq("job", "SALESMAN"));
} List<Emp> emplist = criteria.list();
for (Emp emp1 : emplist) {
System.out.println(emp1.getJob()+"\t"+emp1.getSal()+"\t"+emp1.getHiredate());
}
} catch (Exception e) {
// TODO: handle exception
}
} /* 职位是工程师,如:job = ‘engineer’
工资大于2000元,如:salary > 2000
入职时间在2006年12月31日至2008年12月31日之间
模糊查询的时候可以使用,加上分页
*/
@Test
public void Test3(){
Session session =HibernateSessionFactory.getSession();
try {
Criteria criteria = session.createCriteria(Emp.class);
QueryCondition queryCondition=new QueryCondition();
queryCondition.setStartdate(new SimpleDateFormat("yyyy-MM-dd").parse("1980-12-17"));
queryCondition.setEnddate(new SimpleDateFormat("yyyy-MM-dd").parse("1987-12-32"));
Emp emp =new Emp();
emp.setSal(2000D);
//emp.setJob("SALESMAN");
if(queryCondition.getStartdate()!=null){
criteria.add(Restrictions.gt("hiredate",queryCondition.getStartdate() ));
}
if(queryCondition.getEnddate()!=null){
criteria.add(Restrictions.lt("hiredate",queryCondition.getEnddate() ));
}
if(emp.getSal()!=null){
criteria.add(Restrictions.gt("sal", 2000D));
}
if(emp.getJob()!=null){
criteria.add(Restrictions.eq("job", "SALESMAN"));
}
//设置每页显示多少条
int pageSize=2;
int pageNo=2;//当前第几页
//得出总页数
int totalCount =(Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();
int totalPage = totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
criteria.setProjection(null);
criteria.setFirstResult((pageNo-1)*pageSize);//从第几条查询
criteria.setMaxResults(pageSize);//最多显示几条 List<Emp> emplist = criteria.list();
for (Emp emp1 : emplist) {
System.out.println(emp1.getJob()+"\t"+emp1.getSal()+"\t"+emp1.getHiredate());
}
} catch (Exception e) {
// TODO: handle exception
}
} /*criteria排序
* 按员工工资降序排列
* */
@Test
public void test4(){
Session session =HibernateSessionFactory.getSession();
try {
Criteria criteria = session.createCriteria(Emp.class,"e");
criteria.add(Restrictions.gt("sal", 2000D));
//criteria.addOrder(Order.asc("sal"));//按工资升序
criteria.addOrder(Order.desc("empno"));//按工号降序
List<Emp> emplist = criteria.list();
for (Emp emp : emplist) {
System.out.println(emp.getEmpno()+"\t"+emp.getEname()+"\t"+emp.getSal());
}
} catch (Exception e) {
e.printStackTrace();
}
} /*查询工资最高的员工*/
@Test
public void test5(){
Session session =HibernateSessionFactory.getSession();
try {
Object obj=session.createCriteria(Emp.class,"e")
.add(Restrictions.isNotEmpty("e.sal"))
.addOrder(Order.desc("e.sal"))
.setMaxResults(1)
.uniqueResult(); System.out.println(obj.toString()); } catch (Exception e) {
e.printStackTrace();
}
} /*联合查询
*
* MatchMode.START:字符串在最前面的位置.相当于"like 'key%'"
MatchMode.END:字符串在最后面的位置.相当于"like '%key'"
MatchMode.ANYWHERE:字符串在中间匹配.相当于"like '%key%'"
MatchMode.EXACT:字符串精确匹配.相当于"like 'key'"
* */
@SuppressWarnings("unchecked")
@Test
public void test6(){
Session session =HibernateSessionFactory.getSession();
try {
List<Emp> emplist=session.createCriteria(Emp.class,"e")
.add(Restrictions.ilike("e.ename", "A",MatchMode.ANYWHERE))
.createAlias("dept", "d").add(Restrictions.eq("d.dname", "SALES")).list(); for (Emp emp : emplist) {
System.out.println(emp.getEname()+"\t"+emp.getDept().getDname());
} } catch (Exception e) {
e.printStackTrace();
}
} /**
* 查询部门名称
* 投影查询:属性查询
*/
@SuppressWarnings("unchecked")
@Test
public void test7(){
Session session =HibernateSessionFactory.getSession();
try {
List<String> deptlist = session.createCriteria(Dept.class).setProjection(Property.forName("dname")).list(); for (String string : deptlist) {
System.out.println(string);
} } catch (Exception e) {
e.printStackTrace();
}
} /**
* 查询部门名称
* 投影查询:查询员工姓名、工资和部门
*/
@SuppressWarnings("unchecked")
@Test
public void test8(){
Session session =HibernateSessionFactory.getSession();
try {
List<Object[]> deptlist = session.createCriteria(Emp.class,"e")
.createAlias("e.dept", "d")
.setProjection(Projections.projectionList()
.add(Property.forName("e.ename"))
.add(Property.forName("e.sal"))
.add(Property.forName("d.dname"))).list();
System.out.println(deptlist.size());
for (Object[] obj : deptlist) {
System.out.println(obj[0] + ","+obj[1]+","+obj[2]);
} } catch (Exception e) {
e.printStackTrace();
}
} /**
* 统计各个部门的平均工资、最高工资、最低工资
*/
@SuppressWarnings("unchecked")
@Test
public void test9(){
Session session =HibernateSessionFactory.getSession();
try {
List<Object[]> deptlist = session.createCriteria(Emp.class,"e")
.createAlias("e.dept", "d")
.setProjection(Projections.projectionList()
.add(Projections.groupProperty("d.dname"))
.add(Projections.avg("e.sal"))
.add(Projections.max("e.sal"))
.add(Projections.min("e.sal"))).list();
System.out.println("各部门平均工资、最高工资、最低工资是:============");
for (Object[] obj : deptlist) { System.out.println(obj[0] + ","+obj[1]+","+obj[2]);
} } catch (Exception e) {
e.printStackTrace();
}
} /**
* 使用DetachedCriteria查询财务部的姓名包括“a”的员工
* DetachedCriteria 和 Criteria 功能类似
Criteria是由Session对象创建的,
DetachedCriteria创建时不需要Session对象
可以把DetachedCriteria作为方法参数传递来构造查
询条件
*/
@SuppressWarnings("unchecked")
@Test
public void test10(){
Session session =HibernateSessionFactory.getSession();
try {
DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Emp.class,"e")
.createAlias("e.dept", "d")
.add(Restrictions.eq("d.dname", "SALES"))
.add(Restrictions.ilike("e.ename", "a",MatchMode.ANYWHERE));
List<Emp> list = detachedCriteria.getExecutableCriteria(session).list();
System.out.println("使用DetachedCriteria查询财务部的姓名包括“a”的员工==============");
for (Emp emp : list) {
System.out.println(emp.getEname()+"\t"+emp.getDept().getDname());
} } catch (Exception e) {
e.printStackTrace();
}
} /**
* 使用DetachedCriteria作为查询条件,查询工资高于平均工资的员工
*/
@SuppressWarnings("unchecked")
@Test
public void test11(){
Session session =HibernateSessionFactory.getSession();
try {
DetachedCriteria avgsal=DetachedCriteria.forClass(Emp.class,"e")
.setProjection(Projections.avg("e.sal"));
List<Emp> list = session.createCriteria(Emp.class,"e")
.createAlias("e.dept", "d")
.add(Property.forName("e.sal").gt(avgsal)).list();
for (Emp emp : list) {
System.out.println(emp.getEname()+"\t"+emp.getSal());
} } catch (Exception e) {
e.printStackTrace();
}
}
}

hibernate-criteria查询(二)的更多相关文章

  1. Hibernate Criteria 查询使用

    转载 http://blog.csdn.net/woshisap/article/details/6747466 Hibernate 设计了 CriteriaSpecification 作为 Crit ...

  2. hibernate Criteria查询多对多(Set集合)条件筛选

    PO public class UserPO implements java.io.Serializable { /** 用户唯一标识ID */ private String id; /** 状态(在 ...

  3. hibernate Criteria查询 2.3

    Criteria对象提供了一种面向对象的方式查询数据库.Criteria对象需要使用Session对象来获得一个Criteria对象表示对一个持久化类的查询 查询所有 Session session ...

  4. Hibernate(十二)Criteria查询

    一.简述 Criteria是一种比hql更面向对象的查询方式.Criteria 可使用 Criterion 和 Projection 设置查询条件.可以设置 FetchMode(联合查询抓取的模式 ) ...

  5. Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)

    写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...

  6. Hibernate框架之Criteria查询

    首先给大家说说Hibernate检索方式 Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象 2.OID检索方式:按照对象的OID来检索对象 3.HQ ...

  7. Hibernate criteria 混合sql语句多表关联时查询注意事项

    直接进入正题 假设有一个实体类 /** * 产品分类 */ public class ProductType{ @Id private String no;//编号 private String na ...

  8. Hibernate-ORM:15.Hibernate中的Criteria查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲师Hibernate中的Criteria查询! 一,Criteria简介: 刚接触Hibernate ...

  9. 第六讲(二) Hibernate HQL查询

    HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibe ...

  10. Hibernate查询之Criteria查询

    转自:http://www.cnblogs.com/Laupaul/archive/2012/02/15/2353194.html Criteria是一种比hql更面向对象的查询方式.Criteria ...

随机推荐

  1. SQL Server 复制快照执行错误 错误代码 14068

    问题描述: 使用基于快照初始化的事务复制,在上次发布的时候,添加项,执行快照agent,报错,错误信息: Error messages:Message: The subscription status ...

  2. 聊下 git 使用前的一些注意事项

    连接方式https.ssh 在使用git的时候,不管你的服务器是开源平台github还是私服gitlab,你都需要clone仓库到本地,这个clone的时候就需要你选择连接方式.这个连接方式决定了你与 ...

  3. 【转】70个经典的 Shell 脚本面试问题

    我们为你的面试准备选择了 70 个你可能遇到的 shell 脚面问题及解答.了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务.在过去的几年里,我们注意到所有 ...

  4. 打开Application Data

    1.建后缀名为reg的新文件,复制以下代码后点击运行. Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\runas]@=& ...

  5. linux特殊权限SUID、SGID、SBIT

    对于linux中文件或目录的权限,应该都知道普通的rwx权限(关于linux中rwx权限的看我的这篇博文http://www.cnblogs.com/javaee6/p/3994750.html).我 ...

  6. BI cube的前世今生:商业智能BI为什么需要cube技术

    企业中常常会出现这样一幕幕尴尬的场景: 企业的决策人员需要从不同的角度来审视业务,协助他们分析业务,例如分析销售数据,可能会综合时间周期.产品类别.地理分布.客户群类等多种因素来考量.IT人员在每一个 ...

  7. java报表工具FineReport常用函数的用法总结(文本和日期函数)

    文本函数 CHAR CHAR(number):根据指定数字返回对应的字符.CHAR函数可将计算机其他类型的数字代码转换为字符. Number:用于指定字符的数字,介于1Number:用于指定字符的数字 ...

  8. #essay 161218# 自己的markdown笔记(日记)方法

    写在前面 本文可能极度无聊--自己markdown笔记方法 我的工具 1. computer 2. samsung mobile phone(自己的小S3) 3. markdownpad 2 4. p ...

  9. Android原生游戏开发:使用JustWeEngine开发微信打飞机

    使用JustWeEngine开发微信打飞机: 作者博客: 博客园 引擎地址:JustWeEngine 示例代码:EngineDemo JustWeEngine? JustWeEngine是托管在Git ...

  10. js实现九九乘法表

    <script type="text/javascript"> var sum=0; var wite; for (var i = 1; i < 10; i++) ...