1.条件查询,动态查询

public void conditionQuery(){
Session session=null;
try {
session=HibernateUtil.currentSession();
//准备查询条件,对第三方类进行封装
ConditionEmp cm=new ConditionEmp();
cm.setJob("教员");
cm.setSalary(1400D);
cm.setHireDateBegin(ConvertDate.strToDate("2000-11-11", "yyyy-MM-dd"));
cm.setHireDateEnd(ConvertDate.strToDate("2016-11-11", "yyyy-MM-dd")); //动态添加条件
Criteria c=session.createCriteria(Emp.class);
if(cm.getJob()!=null){
//工作选项不为空
c.add(Restrictions.ilike("job", cm.getJob(), MatchMode.ANYWHERE));
}
if(cm.getSalary()!=0){
c.add(Restrictions.gt("salary", cm.getSalary()));
}
if(cm.getHireDateBegin()!=null){
c.add(Restrictions.ge("hiredate", cm.getHireDateBegin()));
}
if(cm.getHireDateEnd()!=null){
c.add(Restrictions.le("hiredate", cm.getHireDateEnd()));
}
List<Emp> list=c.list();
for (Emp emp : list) {
System.out.println(emp.getName());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}

2.排序 分页 关联

 public void show(){
Session session=null;
try {
session=HibernateUtil.currentSession();
Criteria c=session.createCriteria(Emp.class);
// //查询工资高于某个范围,结果按照升序或者降序排列
//
// //添加条件
// List<Emp> list= c.add(Restrictions.gt("salary", 1500D)).addOrder(Order.desc("salary")).list();
//
// for (Emp emp : list) {
// System.out.println(emp.getName()+" "+emp.getSalary());
// } // //工资高于某个范畴,按照工资升序,在按照编号降序
// @SuppressWarnings("unchecked")
// List<Emp> list=c.add(Restrictions.gt("salary", 1500D)).
// addOrder(Order.asc("salary")).
// addOrder(Order.desc("id")).list();
// for (Emp emp : list) {
// System.out.println(emp.getName()+"----"+emp.getSalary()+"----"+emp.getId());
// } //查出工资最高的两个人
List<Emp> list=c.add(Restrictions.isNotNull("salary")).
addOrder(Order.desc("salary")).
setFirstResult(0).setMaxResults(2).list();
for (Emp emp : list) {
System.out.println(emp.getName()+"----"+emp.getSalary()+"----"+emp.getId());
} } catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}

3.分页

 public void pageDemo(){
Session session=null;
try {
session=HibernateUtil.currentSession(); Criteria c=session.createCriteria(Emp.class); //获取总记录
Integer count=(Integer) c.setProjection(Projections.rowCount()).uniqueResult();
//设置每页显示几条记录
int pageSize=4;
//计算总页数
int totalPage=(count%pageSize==0)?(count/pageSize):(count/pageSize+1);
//清空查找总记录数时设置的投影
c.setProjection(null);
//页的索引
int pageIndex=1;
//设置从哪条记录开始,不包括输入的值
c.setFirstResult((pageIndex-1)*pageSize);
//设置查找的记录的总条数
c.setMaxResults(pageSize); List<Emp> list=c.list();
for (Emp emp : list) {
System.out.println(emp.getName());
} } catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}

4.关联查询

 public void joinDemo(){
Session session=null;
try {
session=HibernateUtil.currentSession(); // //查询包含指定字符的员工
// List<Emp> list=session.createCriteria(Emp.class).
// add(Restrictions.ilike("name", "王", MatchMode.ANYWHERE)).
// createCriteria("dept").add(Restrictions.eq("name", "开发部")).list();
// for (Emp emp : list) {
// System.out.println(emp.getName()+" "+emp.getDept().getName());
// } //查询工作所在地为某一部门的员工人数
List<Dept> list=session.createCriteria(Dept.class,"d").
setFetchMode("emps", FetchMode.JOIN).add(Restrictions.eq("d.name", "开发部")).list();
System.out.println(list.size());
} catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}

5.投影

 public void projectionDemo(){
Session session=null;
try {
session=HibernateUtil.currentSession(); // //查询员工的姓名和入职时间
// List<Object[]> list=session.createCriteria(Emp.class).
// setProjection(Projections.projectionList().
// add(Property.forName("name")).
// add(Property.forName("hiredate")))
// .list();
// for (Object[] obj : list) {
// System.out.println(obj[0]+" "+obj[1]);
// // new Date(((Timestamp)obj[1]).getTimestamp());
// } // //统计各部门的平均工资、最高工资、最低工资
// List<Object[]> list=session.createCriteria(Emp.class,"e").
// createAlias("e.dept", "d").
// setProjection(Projections.projectionList().
// add(Projections.groupProperty("d.name")).
// add(Projections.avg("salary")).
// add(Projections.max("salary")).
// add(Projections.min("salary"))).list();
// for (Object[] obj : list) {
// System.out.println(obj[0]+" "+obj[1]+" "+obj[2]+" "+obj[3]);
// } //使用DetachedCriteria
DetachedCriteria dc=DetachedCriteria.forClass(Emp.class,"e")
.createAlias("e.dept", "d").add(Restrictions.eq("d.name", "人事部"))
.add(Restrictions.ilike("e.name", "王",MatchMode.ANYWHERE)); //查询数据
List<Emp> list= dc.getExecutableCriteria(session).list();
for (Emp emp : list) {
System.out.println(emp.getName()+"---"+emp.getDept().getName());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}

Cretiria查询应用(二)的更多相关文章

  1. 第四章 MySQL高级查询(二)

    第四章 MySQL高级查询(二) 一.EXISTS子查询 在执行create 或drop语句之前,可以使用exists语句判断该数据库对像是否存在,返回值是true或false.除此之外,exists ...

  2. SQL基础--查询之二--连接查询

    SQL基础--查询之二--连接查询

  3. MySQL慢查询(二) - pt-query-digest详解慢查询日志 pt-query-digest 慢日志分析

    随笔 - 66 文章 - 0 评论 - 19 MySQL慢查询(二) - pt-query-digest详解慢查询日志 一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它 ...

  4. 每天玩转3分钟 MyBatis-Plus - 4. 高级查询(二)(条件构造器)

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一) 每天玩转 ...

  5. SQL Server-聚焦UNIOL ALL/UNION查询(二十三)

    前言 本节我们来看看有关查询中UNION和UNION ALL的问题,简短的内容,深入的理解,Always to review the basics. 初探UNION和UNION ALL 首先我们过一遍 ...

  6. solr多条件查询(二)

    由于现在的 需求很变态需要N多条件的叠加,本人就用了一天时间摸索加求助,终于参透出这个q和fq的强大之处. 需求如下图,有三种关系:并且.或.不含 1.如果是或者也就是改变的q的查询条件: 2.如果是 ...

  7. Mysql查询(笔记二)

    1.两结构相同的表数据间移植 Inset into 表一 Select 字段1,字段2,....字段n from表二 建立数据库时设置数据库编码 create database 数据库名 charse ...

  8. MySQL慢查询(二) - pt-query-digest详解慢查询日志

    一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdu ...

  9. Hibernate(十三):HQL查询(二)

    背景 基于上一章节<Hibernate(十二):HQL查询(一)>,已经学习了一部分关于HQL的用法: HQL带参数查询 HQL Order By排序查询 HQL 设置实体参数查询 本章节 ...

随机推荐

  1. php中函数不确定参数个数时获取所有参数

    func_get_arg(),func_get_args()和func_num_args()的用法 这三个函数呢,都是以func_打头的,顾名思义,是跟php的函数有关的.我们在写类的时候也经常用到这 ...

  2. C#操作Excel文件(转)

    摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...

  3. eclipse 新建servlet

    在mac下的eclipse新建servlet报错: 解决一: --------------------------------- 解决二: 在右键项目名称中,打开 Properties->jav ...

  4. 最简单的ASP动态页面生成伪静态方法

    目前网站制作中很多网站都采用生成静态页的方法,原因是这样访问速度会得到提高(服务器端CPU利用率很低),另外也容易被搜索引擎收录,但是这带来的一个问题就是需要足够大的空间存放这些静态页面,如果你的空间 ...

  5. 关于iOS上的对象映射公用方法-备

    具体的使用方法,请见下面说明,或者见工程里的单元测试代码.或者,参考原始文档: https://github.com/mystcolor/JTObjectMapping 使用方法 ======== 绝 ...

  6. Altium Designer规划电路板

           所谓规划电路板就是根据电路的规模以及用户的需求,确定所要制作电路板的物理外形尺寸和电气边界.电路板规划的原则是在满足用户要求的前提下,使板面美观而且利于后面的布线工作. 1. 定义板的外 ...

  7. 设计模式(八):Bridge桥接模式 -- 结构型模式

    1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度 ...

  8. 【转】Java 多线程(四) 多线程访问成员变量与局部变量

    原文网址:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913659.html 先看一个程序例子: public class HelloThrea ...

  9. Delphi 调试BPL包中引用另外的BPL的方法。

    在实际程序中,遇到1.bpl 引用了2.bpl中的方法,2.bpl的方法进入后又引用了3.bpl ,刚开始挺蒙,怎么调试呢,  其实bpl就是dll, 故, 1.我在Delphi的run->pa ...

  10. [Operating System Labs] 我对Linux0.00中 head.s 的理解和注释

    ?21,#  head.s contains the 32-bit startup code.#  head.s 是32位的启动代码 #  Two L3 task multitasking. The ...