 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. Flume组件source,channel,sink源码分析

    LifeCycleState: IDLE, START, STOP, ERROR [Source]: org.apache.flume.Source 继承LifeCycleAware{stop() + ...

  2. Tomcat 启动报错:No default web.xml

    原因是:tomcat 中conf 目录中的 web.xml 被无意删除掉了.从其他tomcat中复制一个过来就行了. conf 目录 没有 web.xml 导致的问题是,server.xml 中配置的 ...

  3. SQL Server性能调优系列

    这是关于SQL Server调优系列文章,以下内容基本涵盖我们日常中所写的查询运算的分解以及调优内容项,皆为原创........ 第一个基础模块注重基础内容的掌握,共分7篇文章完成,内容涵盖一系列基础 ...

  4. 两种交换机配置模式,以配置基于端口划分的VLAN为例

    关于交换机的配置模式,大体上可以分为两类:其一以CISCO交换机为代表的配置模式,其二以Huawei.H3C交换机为代表的配置模式.其实这两种配置模式并没有本质的不同,只是配置的命令名称和配置方式存在 ...

  5. Linux基础命令操作

    显示日期与时间:date date +%Y/%m/%d date +%H:%M 显示日历:cal 显示一整年(cal 2009) 显示一年中的某一个月 (cal [[month]] year) 例如 ...

  6. js中取得当前加载的js的src地址

    在很多js框架中看到过,如果要动态加载框架内部的其他js,加载的时候加载的地址经常是一个相对的地址,只能是这样了哦,因为框架根本不知道用此框架的用户,将框架js文件放的具体目录,所以框架中一般会采用如 ...

  7. kafka集群安装

    主要需要设置的是conf文件夹中的server.properties文件, broker.id,不同的机器节点,使用不同的id号,不能重复. num.network.threads=8 num.par ...

  8. 理解Docker(2):Docker 镜像

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  9. c++中this指针的用法

    1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将 ...

  10. webpack中alias别名配置

    resolve:{ alias:{ bootcss:__dirname + '/node_modules/.3.3.7@bootstrap/dist/css/bootstrap.min.css' } ...