hibernate11--Criteria查询

public class EmpTest {
Session session =null;
Transaction transaction=null;
@Before
public void before(){
session = HibernateSessionUtil.getCurrentSession();
transaction= session.beginTransaction();
}
/**
* Criteria 查询接口:完全是面向对象的思想来 操作数据库!
* 看不到sql看不到hql!
* 01.查询所有的部门信息
*/
@Test
public void test01(){
Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept");
List<Dept>list = criteria.list();
for (Dept dept : list) {
System.out.println(dept);
}
}
/**
* 02.查询指定的部门信息 eq(属性名,属性值)
* Restrictions:给我们的查询增加条件
* 001.Restrictions中的方法都是静态的
* 002.方法的返回是都是 Criterion或者其实现类
*/
@Test
public void test02(){
Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept");
criteria.add(Restrictions.eq("deptName", "研发部")); //给查询增加条件
Dept dept = (Dept) criteria.uniqueResult();
System.out.println(dept);
}
/**
* 03.查询员工薪水大于10k的 gt(属性名,属性值)
*/
@Test
public void test03(){
Criteria criteria=session.createCriteria(Emp.class);
criteria.add(Restrictions.gt("salary", 10000d)); //给查询增加条件
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 04.查询员工薪水大于5k的 小于100k bw(属性名,属性值1,属性值2)
*/
@Test
public void test04(){
Criteria criteria=session.createCriteria(Emp.class);
criteria.add(Restrictions.between("salary", 5000d, 100000d)); //给查询增加条件
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 05.查询没有部门的员工 dept是我们Emp类中的一个域属性 对象为null 使用 isNull
*/
@Test
public void test05(){
Criteria criteria=session.createCriteria(Emp.class);
criteria.add(Restrictions.isNull("dept")); //给查询增加条件
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 06.查询没有员工的 部门 emps是我们Dept类中的一个集合 集合的size=0 使用 isEmpty
*/
@Test
public void test06(){
Criteria criteria=session.createCriteria(Dept.class);
criteria.add(Restrictions.isEmpty("emps")); //给查询增加条件
List<Dept> list = criteria.list();
for (Dept dept : list) {
System.out.println(dept);
}
}
/**
* 07.查询 员工姓名是 员工1 或者 员工2的信息
* 两种情况 使用or
*/
@Test
public void test07(){
Criteria criteria=session.createCriteria(Emp.class);
//给查询增加条件
criteria.add(Restrictions.or
(Restrictions.eq("empName", "员工1"),
Restrictions.eq("empName", "员工2")));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 08.查询 员工姓名是 员工1 或者 员工2的信息
* 两种情况 使用in(属性名,集合)
*/
@Test
public void test08(){
Criteria criteria=session.createCriteria(Emp.class);
List<String> names=new ArrayList<>();
names.add("员工1");
names.add("员工2");
//给查询增加条件
criteria.add(Restrictions.in("empName", names));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 09.查询 员工姓名是 员工1 或者 员工2 ,员工3 员工4 的信息
* 两种情况 使用in(属性名,集合)
*/
@Test
public void test09(){
Criteria criteria=session.createCriteria(Emp.class);
List<String> names=new ArrayList<>();
names.add("员工1");
names.add("员工2");
names.add("员工3");
names.add("员工4");
//给查询增加条件
criteria.add(Restrictions.in("empName", names));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 10.查询 员工姓名是 员工1 或者 员工2 ,员工3 员工4 的信息
*
* Restrictions.disjunction()返回一个Disjunction对象
* Disjunction 继承了Junction
* Junction中有一个add()
* 底层代码
* public Junction add(Criterion criterion) {
criteria.add(criterion);
return this;
}
*/
@Test
public void test10(){
Criteria criteria=session.createCriteria(Emp.class);
//给查询增加条件
criteria.add(Restrictions.disjunction()
.add(Restrictions.eq("empName", "员工1"))
.add(Restrictions.eq("empName", "员工2"))
.add(Restrictions.eq("empName", "员工3"))
.add(Restrictions.eq("empName", "员工4"))
);
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 11.查询 员工姓名包含 A 的员工信息
* like 模糊查询
*/
@Test
public void test11(){
Criteria criteria=session.createCriteria(Emp.class);
//给查询增加条件
criteria.add(Restrictions.like("empName", "%A%"));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 12.查询 员工姓名包含 A/a 的员工信息
* ilike 模糊查询 忽略大小写
*/
@Test
public void test12(){
Criteria criteria=session.createCriteria(Emp.class);
//给查询增加条件
criteria.add(Restrictions.ilike("empName", "%A%"));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 13.查询 员工姓名包含 A 的员工信息
* like 模糊查询
* MatchMode: 我们value值出现的位置 可以替换%
* MatchMode.ANYWHERE:前后
* MatchMode.END:后
* MatchMode.START:前
*/
@Test
public void test13(){
Criteria criteria=session.createCriteria(Emp.class);
//给查询增加条件
criteria.add(Restrictions.like("empName", "A",MatchMode.ANYWHERE));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 14.聚合函数 和 投影查询 Projections
*
* 查询 薪水的最大值 最小值 总薪水 和平均薪水
* criteria.setProjection 是赋值操作
* 如果不清空Projection
* 之前给的值 会带入下次的查询
*/
@Test
public void test14(){
Criteria criteria = session.createCriteria(Emp.class);
criteria.setProjection(
Projections.projectionList()
.add(Projections.max("salary"))
.add(Projections.min("salary"))
.add(Projections.sum("salary"))
.add(Projections.avg("salary"))
);
//criteria.setProjection(null); 清空所有的约束
List<Object[]> list = criteria.list();
for (Object[] objects : list) {
System.out.println("最大薪水:"+objects[0]);
System.out.println("最小薪水:"+objects[1]);
System.out.println("总薪水:"+objects[2]);
System.out.println("平均薪水:"+objects[3]);
}
}
/**
* 15. 分页查询
* 查询姓名中 包含 "员工" 的 并且 按照 薪水 降序排列
*/
@Test
public void test15(){
//查询总记录数
int count=((Long)session.createCriteria(Emp.class)
.add(Restrictions.like("empName", "员工",MatchMode.ANYWHERE))
.setProjection(Projections.count("empName")).uniqueResult()).intValue();
System.out.println("总记录数是:"+count);
//当前页
int pageIndex=1;
//页大小
int pageSize=4;
//总页数
int totalPageSize=(count%pageSize==0)?(count/pageSize):(count/pageSize+1);
//进行薪水的降序排列
Criteria criteria= session.createCriteria(Emp.class)
.add(Restrictions.like("empName", "员工",MatchMode.ANYWHERE))
.addOrder(Order.desc("salary"));
//设置 当前页 以及页大小
List<Emp> list = criteria.setFirstResult((pageIndex-1)*pageSize).setMaxResults(pageSize).list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 16:面试题
* DetachedCriteria和 Criteria的区别
* 相同点:都能用来 做查询操作
* 不同点:
* 01.DetachedCriteria在创建的时候 不需要session!
* 02.真正执行查询的时候getExecutableCriteria(session)才使用session
* 03.DetachedCriteria自身可以作为一个参数
*
* 薪水 大于 平均值的员工信息
*/
@Test
public void test16(){
//得到DetachedCriteria对象
DetachedCriteria criteria= DetachedCriteria.forClass(Emp.class)
.setProjection(Projections.avg("salary"));
//执行查询
double avg=(double) criteria.getExecutableCriteria(session).uniqueResult();
System.out.println("薪水的平均值是:"+avg);
//薪水 大于 平均值的员工信息
List<Emp> list = session.createCriteria(Emp.class).add(
Property.forName("salary").gt(criteria)).list();
for (Emp emp : list) {
System.out.println(emp);
}
}
}
public class EmpTest { Session session =null; Transaction transaction=null; @Before public void before(){ session = HibernateSessionUtil.getCurrentSession(); transaction= session.beginTransaction(); } /** * Criteria 查询接口:完全是面向对象的思想来 操作数据库! * 看不到sql看不到hql! * 01.查询所有的部门信息 */ @Test public void test01(){ Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept");
List<Dept>list = criteria.list();
for (Dept dept : list) {
System.out.println(dept);
}
}
/**
* 02.查询指定的部门信息 eq(属性名,属性值)
* Restrictions:给我们的查询增加条件
* 001.Restrictions中的方法都是静态的
* 002.方法的返回是都是 Criterion或者其实现类
*/
@Test
public void test02(){
Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept");
criteria.add(Restrictions.eq("deptName", "研发部")); //给查询增加条件
Dept dept = (Dept) criteria.uniqueResult();
System.out.println(dept);
}
/**
* 03.查询员工薪水大于10k的 gt(属性名,属性值)
*/
@Test
public void test03(){
Criteria criteria=session.createCriteria(Emp.class);
criteria.add(Restrictions.gt("salary", 10000d)); //给查询增加条件
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 04.查询员工薪水大于5k的 小于100k bw(属性名,属性值1,属性值2)
*/
@Test
public void test04(){
Criteria criteria=session.createCriteria(Emp.class);
criteria.add(Restrictions.between("salary", 5000d, 100000d)); //给查询增加条件
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 05.查询没有部门的员工 dept是我们Emp类中的一个域属性 对象为null 使用 isNull
*/
@Test
public void test05(){
Criteria criteria=session.createCriteria(Emp.class);
criteria.add(Restrictions.isNull("dept")); //给查询增加条件
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 06.查询没有员工的 部门 emps是我们Dept类中的一个集合 集合的size=0 使用 isEmpty
*/
@Test
public void test06(){
Criteria criteria=session.createCriteria(Dept.class);
criteria.add(Restrictions.isEmpty("emps")); //给查询增加条件
List<Dept> list = criteria.list();
for (Dept dept : list) {
System.out.println(dept);
}
}
/**
* 07.查询 员工姓名是 员工1 或者 员工2的信息
* 两种情况 使用or
*/
@Test
public void test07(){
Criteria criteria=session.createCriteria(Emp.class);
//给查询增加条件
criteria.add(Restrictions.or
(Restrictions.eq("empName", "员工1"),
Restrictions.eq("empName", "员工2")));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 08.查询 员工姓名是 员工1 或者 员工2的信息
* 两种情况 使用in(属性名,集合)
*/
@Test
public void test08(){
Criteria criteria=session.createCriteria(Emp.class);
List<String> names=new ArrayList<>();
names.add("员工1");
names.add("员工2");
//给查询增加条件
criteria.add(Restrictions.in("empName", names));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 09.查询 员工姓名是 员工1 或者 员工2 ,员工3 员工4 的信息
* 两种情况 使用in(属性名,集合)
*/
@Test
public void test09(){
Criteria criteria=session.createCriteria(Emp.class);
List<String> names=new ArrayList<>();
names.add("员工1");
names.add("员工2");
names.add("员工3");
names.add("员工4");
//给查询增加条件
criteria.add(Restrictions.in("empName", names));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 10.查询 员工姓名是 员工1 或者 员工2 ,员工3 员工4 的信息
*
* Restrictions.disjunction()返回一个Disjunction对象
* Disjunction 继承了Junction
* Junction中有一个add()
* 底层代码
* public Junction add(Criterion criterion) {
criteria.add(criterion);
return this;
}
*/
@Test
public void test10(){
Criteria criteria=session.createCriteria(Emp.class);
//给查询增加条件
criteria.add(Restrictions.disjunction()
.add(Restrictions.eq("empName", "员工1"))
.add(Restrictions.eq("empName", "员工2"))
.add(Restrictions.eq("empName", "员工3"))
.add(Restrictions.eq("empName", "员工4"))
);
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 11.查询 员工姓名包含 A 的员工信息
* like 模糊查询
*/
@Test
public void test11(){
Criteria criteria=session.createCriteria(Emp.class);
//给查询增加条件
criteria.add(Restrictions.like("empName", "%A%"));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 12.查询 员工姓名包含 A/a 的员工信息
* ilike 模糊查询 忽略大小写
*/
@Test
public void test12(){
Criteria criteria=session.createCriteria(Emp.class);
//给查询增加条件
criteria.add(Restrictions.ilike("empName", "%A%"));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 13.查询 员工姓名包含 A 的员工信息
* like 模糊查询
* MatchMode: 我们value值出现的位置 可以替换%
* MatchMode.ANYWHERE:前后
* MatchMode.END:后
* MatchMode.START:前
*/
@Test
public void test13(){
Criteria criteria=session.createCriteria(Emp.class);
//给查询增加条件
criteria.add(Restrictions.like("empName", "A",MatchMode.ANYWHERE));
List<Emp> list = criteria.list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 14.聚合函数 和 投影查询 Projections
*
* 查询 薪水的最大值 最小值 总薪水 和平均薪水
* criteria.setProjection 是赋值操作
* 如果不清空Projection
* 之前给的值 会带入下次的查询
*/
@Test
public void test14(){
Criteria criteria = session.createCriteria(Emp.class);
criteria.setProjection(
Projections.projectionList()
.add(Projections.max("salary"))
.add(Projections.min("salary"))
.add(Projections.sum("salary"))
.add(Projections.avg("salary"))
);
//criteria.setProjection(null); 清空所有的约束
List<Object[]> list = criteria.list();
for (Object[] objects : list) {
System.out.println("最大薪水:"+objects[0]);
System.out.println("最小薪水:"+objects[1]);
System.out.println("总薪水:"+objects[2]);
System.out.println("平均薪水:"+objects[3]);
}
}
/**
* 15. 分页查询
* 查询姓名中 包含 "员工" 的 并且 按照 薪水 降序排列
*/
@Test
public void test15(){
//查询总记录数
int count=((Long)session.createCriteria(Emp.class)
.add(Restrictions.like("empName", "员工",MatchMode.ANYWHERE))
.setProjection(Projections.count("empName")).uniqueResult()).intValue();
System.out.println("总记录数是:"+count);
//当前页
int pageIndex=1;
//页大小
int pageSize=4;
//总页数
int totalPageSize=(count%pageSize==0)?(count/pageSize):(count/pageSize+1);
//进行薪水的降序排列
Criteria criteria= session.createCriteria(Emp.class)
.add(Restrictions.like("empName", "员工",MatchMode.ANYWHERE))
.addOrder(Order.desc("salary"));
//设置 当前页 以及页大小
List<Emp> list = criteria.setFirstResult((pageIndex-1)*pageSize).setMaxResults(pageSize).list();
for (Emp emp : list) {
System.out.println(emp);
}
}
/**
* 16:面试题
* DetachedCriteria和 Criteria的区别
* 相同点:都能用来 做查询操作
* 不同点:
* 01.DetachedCriteria在创建的时候 不需要session!
* 02.真正执行查询的时候getExecutableCriteria(session)才使用session
* 03.DetachedCriteria自身可以作为一个参数
*
* 薪水 大于 平均值的员工信息
*/
@Test
public void test16(){
//得到DetachedCriteria对象
DetachedCriteria criteria= DetachedCriteria.forClass(Emp.class)
.setProjection(Projections.avg("salary"));
//执行查询
double avg=(double) criteria.getExecutableCriteria(session).uniqueResult();
System.out.println("薪水的平均值是:"+avg);
//薪水 大于 平均值的员工信息
List<Emp> list = session.createCriteria(Emp.class).add(
Property.forName("salary").gt(criteria)).list();
for (Emp emp : list) {
System.out.println(emp);
}
}
}
hibernate11--Criteria查询的更多相关文章
- Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)
写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...
- NHibernate系列文章二十三:NHibernate查询之Criteria查询(附程序下载)
摘要 上一篇文章介绍了NHibernate HQL,他的缺点是不能够在编译时发现问题.如果数据库表结构有改动引起了实体关系映射的类有改动,要同时修改这些HQL字符串.这篇文章介绍NHibernate面 ...
- Criteria查询初学者的采纳点哦
一.Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象 from Emp e group by e.dept.deptName 2.OID检索 ...
- Criteria查询之sqlRestriction()的理解
sqlRestriction()的理解 在Criteria查询中 使用sqlRestriction()方法来提供SQL语法作限定查询,作为where字句 查看官方给的例子,如下 List cats = ...
- Criteria查询数据
Criteria介绍: Criteria查询是Hibernate提供的一种查询方式,与HQL基于字符串的查询形式完全不同.Hibernate提供了org.hiberanee.Criteria 接口.o ...
- Hibernate框架之Criteria查询
首先给大家说说Hibernate检索方式 Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象 2.OID检索方式:按照对象的OID来检索对象 3.HQ ...
- Hibernate 、Hql查询和Criteria查询
HQL查询: public Object query(String name){ Session s=null; try{ s=HibernateSessionFactory.getSession() ...
- Hibernate框架Criteria查询
本文章适合一些初学者 一.使用Criteria查询数据 1.条件查询 1.1:使用Criteria查询的步骤 1.使用Sess ...
- 第九章 Criteria查询及注解
第九章 Criteria查询及注解9.1 使用Criteria查询数据 9.1.1 条件查询 Criteria查询步骤: 1)使用session接口的cr ...
- hibernate框架学习笔记7:HQL查询、Criteria查询简介
HQL查询:hibernate独有的查询语言 适用于不复杂的多表查询 示例: 实体类: package domain; public class Customer { private Long cus ...
随机推荐
- spring跨域问题
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Co ...
- QIDO-RS - Search
6.7.1 QIDO-RS - Search 6.7.1.1 Request The specific resources to be used for the search actions shal ...
- 修改MySql数据库的默认时
MySql数据库创建后,默认的时区比东八区少了八个小时.如果Sql语句中使用到MySql的时间的话就会比正常时间少了八个小时.所以需要修改MySql的系统时区,使其显示的时间和我们现在的时间一致. 1 ...
- angular 2 - 004 routing 路由
https://angular.io/tutorial/toh-pt5 定义一个模块用来定义路由 src/app/app-routing.module.ts import { NgModule } f ...
- java最简单实现Log打印和生成日志文件
导包 1.commons-logging.jar包 下载 2.log4j.jar包 下载 配置log4j 1.在src根目录下创建一个log4j.properties文件. 文件全部内容如下: log ...
- vs2017 打开附带的localdb v13
查看自己本机装了哪些版本的localdb 打开数据库资源管理器 添加数据库连接 选择要连接的localdb版本,这里选择的是v13版本 添加数据库 新建一个test数据库 ...
- P2P贷款全攻略,贷前、贷中、贷后工作事项解析
一.贷前调查事项 贷前调查是所有银行.小贷.P2P等等往出贷款部门的重中之重. 归根结底就是两条:让不对称信息最大限度对称.让软信息最大限度真实还原. 客户还不还款就是取决两大因素:还款能力.还款意愿 ...
- 美国FICO评分系统简介
美国的个人信用评分系统,主要是Fair IsaacCompany 推出的 FICO,评分系统也由此得名.一般来讲, 美国人经常谈到的你的得分 ,通常指的是你目前的FICO分数.而实际上, Fair I ...
- Java并发之线程转储
一.java线程转储 java的线程转储可以被定义为JVM中在某一个给定的时刻运行的所有线程的快照.一个线程转储可能包含一个单独的线程或者多个线程.在多线程环境中,比如J2EE应用服务器,将会有许多线 ...
- CobaltStrike3.12/13 破解
更新3.13破解版 链接: https://pan.baidu.com/s/14e0tpVPzUhiAhYU2_jvBag 提取码: d9uf MacOS客户端: 链接: https://pan.ba ...