 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. 思考:用开发移动app的观念来开发网站

    首先祝大家新年快乐.万事如意. 开发网站程序也有一些年头了,从最初的静态HTML+ JS,到后来的WebForm,然后过渡到现在的MVC. 由于最近做一些技术调研,也接触了很多移动开发,iOS和And ...

  2. .NET应用架构设计—服务端开发多线程使用小结(多线程使用常识)

    有一段时间没有更新博客了,最近半年都在着写书<.NET框架设计—大型企业级框架设计艺术>,很高兴这本书将于今年的10月份由图灵出版社出版,有关本书的具体介绍等书要出版的时候我在另写一篇文行 ...

  3. webapi 控制器接收POST参数时必须以对象的方式接收

    webapi    控制器接收POST参数时必须以对象的方式接收

  4. 把Tomcat注册为windows服务

    配置环境变量 JAVA_HOME=D:\java CLASSPATH=.;%JAVA_HOME%\lib; PATH=%JAVA_HOME%\bin; 提示:一般jre默认在jdk目录下%JAVA_H ...

  5. web服务器选择Apache还是Nginx

    首先我们来谈谈老朋友Apache,Apache HTTP Server(简称Apache)是世界使用排名第一的Web服务器软件,音译为阿帕奇,是Apache软件基金会的一个开放源码Web服务器,可以运 ...

  6. java中执行系统命令

    java程序中执行系统命令猛击下面的链接看看你就知道怎么用了 http://blog.csdn.net/a19881029/article/details/8063758 http://wuhongy ...

  7. 联发科发布全球首款搭载Android TV的智能电视系统芯片MT5595

    联发科发布全球首款搭载Android TV的智能电视系统芯片MT5595 admin 资讯 01-07 1 1月7日消息,联发科宣布与Google共同开发出全世界第一个搭载Android TV操作系统 ...

  8. 【Windows编程】系列第五篇:GDI图形绘制

    上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数 ...

  9. cookie实现记住密码

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  10. zookeeper原理

    Zookeeper与paxos算法:http://www.riaos.com/ria/11299 Paxos算法1:http://blog.csdn.net/chen77716/article/det ...