hibernate框架学习笔记11:Criteria查询详解
2018-02-20 11:08
483 查看
创建实体类对象:
View Code
测试类示例:
基本语法:
离线查询:
传统criteria对象创建依赖于session,前端传递查询条件依次经过WEB、SERVICE层到DAO层,
在DAO层组装查询条件到criteria后执行查询
离线的criteria对象,于session无关,凭空创建,可以在WEB层创建criteria对象并组装查询条件,
这时候直接传递criteria对象到DAO层查询即可,这时候就做到了一个DAO方法适用于所有查询
package utils; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { private static SessionFactory sf; static{ //1 创建,调用空参构造 Configuration conf = new Configuration().configure(); //2 根据配置信息,创建 SessionFactory对象 sf = conf.buildSessionFactory(); } //获得session => 获得全新session public static Session openSession(){ //3 获得session Session session = sf.openSession(); return session; } //获得session => 获得与线程绑定的session public static Session getCurrentSession(){ //3 获得session Session session = sf.getCurrentSession(); return session; } }
View Code
测试类示例:
基本语法:
package criteria; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.junit.Test; import domain.Customer; import utils.HibernateUtils; //学习Criteria语法 public class Demo { @Test //基本语法 public void fun1(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //---------------------------------------------------- Criteria c = session.createCriteria(Customer.class); List<Customer> list = c.list(); System.out.println(list); //---------------------------------------------------- tx.commit(); session.close(); } @Test //条件语法 // > gt // >= ge // < lt // <= le // == eq // != ne // in in // between and between // like like // is not null isNotNull // is null isNull // or or // and and public void fun2(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //---------------------------------------------------- Criteria c = session.createCriteria(Customer.class); // c.add(Restrictions.idEq(2l)); c.add(Restrictions.eq("cust_id",2l)); List<Customer> list = c.list(); System.out.println(list); //---------------------------------------------------- tx.commit(); session.close(); } @Test //分页语法 - 与HQL一样 public void fun3(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //---------------------------------------------------- Criteria c = session.createCriteria(Customer.class); //limit ?,? c.setFirstResult(0); c.setMaxResults(2); List<Customer> list = c.list(); System.out.println(list); //---------------------------------------------------- tx.commit(); session.close(); } @Test //排序语法 public void fun4(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //---------------------------------------------------- Criteria c = session.createCriteria(Customer.class); c.addOrder(Order.asc("cust_id"));//升序 //c.addOrder(Order.desc("cust_id"));降序 List<Customer> list = c.list(); System.out.println(list); //---------------------------------------------------- tx.commit(); session.close(); } @Test //统计语法 public void fun5(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //---------------------------------------------------- Criteria c = session.createCriteria(Customer.class); //设置查询目标(聚合函数) c.setProjection(Projections.rowCount()); List list = c.list(); System.out.println(list); //---------------------------------------------------- tx.commit(); session.close(); } }
离线查询:
传统criteria对象创建依赖于session,前端传递查询条件依次经过WEB、SERVICE层到DAO层,
在DAO层组装查询条件到criteria后执行查询
离线的criteria对象,于session无关,凭空创建,可以在WEB层创建criteria对象并组装查询条件,
这时候直接传递criteria对象到DAO层查询即可,这时候就做到了一个DAO方法适用于所有查询
package criteria; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.junit.Test; import domain.Customer; import utils.HibernateUtils; //学习离线Criteria public class Demo2 { @Test public void fun1(){ //Service/web层 DetachedCriteria dc = DetachedCriteria.forClass(Customer.class); dc.add(Restrictions.idEq(5l));//拼装条件(全部与普通Criteria一致) //---------------------------------------------------- Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //---------------------------------------------------- //Dao层 Criteria c = dc.getExecutableCriteria(session); List list = c.list(); System.out.println(list); //---------------------------------------------------- tx.commit(); session.close(); } }
相关文章推荐
- hibernate框架学习笔记10:HQL查询详解
- hibernate框架学习笔记7:HQL查询、Criteria查询简介
- hibernate框架学习笔记2:配置文件详解
- hibernate框架学习笔记3:API详解
- hibernate学习笔记6--Criteria查询方式、完整小练习(开发步骤)
- 【05】框架学习—Hibernate中查询详解与查询优化
- hibernate框架学习笔记12:查询优化
- 框架学习之Hibernate 第五节 HQL和Criteria查询入门
- Hibernate学习-11-几种查询详解
- Hibernate学习笔记总结(三)——Hibernate 3.x——HQL查询语言(重点)
- Hibernate学习笔记---通过load和get方法来查询对象(只能根据主键来查询)
- Hibernate学习37 -- Hibernate查询语言(HQL)11 -- DML风格的操作
- Hibernate createCriteria查询详解
- Hibernate学习总结(6)——Criteria查询
- live555学习笔记11-h264 RTP传输详解(3)
- Hibernate框架中Criteria的示例查询问题
- 【Hibernate框架开发之九】Hibernate 性能优化笔记!(遍历、一级/二级/查询/缓存/乐观悲观锁等优化算法)
- jQuery学习笔记--jqGrid的单字段和多字段查询 详解
- live555学习笔记11-h264 RTP传输详解(3)
- 学习笔记之 O/R 映射技术的王牌Hibernate框架