 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. INITIAL参数设置导致TRUNCATE TABLE不能降低高水位线案例

    在一个数据库使用下面SQL找出了一批需要降低高水位线的表,其中有几个表没有数据,于是我打算用TRUNCATE来降低高水位线HWM SELECT a.owner,        a.segment_na ...

  2. SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)

    在SSMS(Microsoft SQL Server Management Studio)里面,查看数据库对应的表的时候,会遇到"Lock Request time out period e ...

  3. js获取浏览器内核、类型、版本以及系统类型

    正则表达式: var rsys = /\b(windows|win32|macintosh|mac os x|adobeair|linux|unix)\b/; var rkn = /\b(opera| ...

  4. SQL Server 2008 R2——以特定符号出现的次数来判断当前内容所在的层次

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  5. MongoDB入门安装

    一.基础信息 系统环境:Linux MongoDB最新版下载:https://codeload.github.com/mongodb/mongo/zip/r3.2.0 二.安装过程 1.将MongoD ...

  6. Unity贴图锯齿

    之前在做一个Unity视频插件,发现渲染上去的贴图锯齿十分明显,开了抗锯齿也没用.最后在一次偶然的机会,发现了原来是贴图FilterMode设置有问题 之前用的是FilterMode.Point,后来 ...

  7. 交叉编译总结 libosscore.a libcurl.a libmysqlclient.a

    把工程文件交叉编译到arm上运行,着实花费了一番功夫. 首先遇到的错误是 X uses VFP register arguments, B does not 百度了一下,发现是硬浮点和软浮点的问题,原 ...

  8. VS2015 + OpenCV 2.4.X 配置环境

    VS2015的内部编号是VC14,但现在opencv 2.4.X和最新的3.0版本只有vc12的库文件,所以这里主要简单讲如何针对vs2015配置环境. 首先按照下面的文章把环境配置好: [OpenC ...

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

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

  10. POJ1703Find them, Catch them[种类并查集]

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42416   Accepted: ...