《2022年Hibernate条件查询Criteria .pdf》由会员分享,可在线阅读,更多相关《2022年Hibernate条件查询Criteria .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Hibernate提供了完善的按条件 (Query By Criteria, QBC)org.hibernate.Criteria接口表示特定持久类的一个查询。Criteria 代表一次查询Criterion 代表一个查询条件。Restrictions 产生查询条件的工具类。Criterion 是Criteria 的查 询条 件 。 Criteria 提供 了add(Criterion criterion) 方法来1:添加查询条件。Session是 Criteria 实例的工厂。Criteria criteria = sess.createCriteria(News.class); List
2、news = criteria.list(); 2:限制结果集内容一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例 。 org.hibernate.criterion.Restrictions 类定 义 了 获 得 某 些 内 置Criterion 类型的工厂方法。 Criterion 的实例可以通过Restrictions 工具类来创建List news = sess.createCriteria(News.class) .add( Restrictions.like(title, %fendou%) ) .add( Restrictio
3、ns.between(id, 2, 8) ) .list(); Restrictions 提供了大量的静态名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 方法,如eq (等于)、 ge (大于等于)、 between 等来方法的创建Criterion 查询条件,通过往该实例的add(Criteria) 方法来增加查询条件形成一个查询条件集合。HQL 运算符QBC 运算符含义= Restrictions.eq() 等于 Restr
4、ictions.not(Exprission.eq() 不等于 Restrictions.gt() 大于= Restrictions.ge() 大于等于 Restrictions.lt() 小于= Restrictions.le() 小于等于is null Restrictions.isnull() 等于空值is not null Restrictions.isNotNull() 非空值like Restrictions.like() 字符串模式匹配and Restrictions.and() 逻辑与and Restrictions.conjunction() 逻辑与or Restrictio
5、ns.or() 逻辑或or Restrictions.disjunction() 逻辑或not Restrictions.not() 逻辑非in(列表) Restrictions.in() 等于列表中的某一个值not in(列表) Restrictions.not(Restrictions.in() 不等于列表中任意一个值between x and y Restrictions.between() 闭区间 xy 中的任意值not between x and y Restrictions.not(Restrictions.between() 小于值 X 或者大于值 y 3:结果集排序与分页可以使
6、用 org.hibernate.criterion.Order来为查询结果排序List news = sess.createCriteria(News.class) .add( Restrictions.like(title, %F%) .addOrder( Order.desc(id) ) .setFirstResult(0) .setMaxResults(20) .list(); 4: 使用 createCriteria()非常容易的在互相关联的实体间建立约束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -
7、- - - - - - 第 2 页,共 7 页 - - - - - - - - - Criteria c=session.createCriteria(News.class); news=c.add(Restrictions.in(id, new Long 2l,4l) .add(Restrictions.like(title, % 今日%) .createCriteria(category) .add(Restrictions.eq(id, 2) .addOrder(Order.desc(id) .list(); 5:投影 (Projections) org.hibernate.criter
8、ion.Projections是 Projection 的实例工厂。我们通过调用 setProjection()应用投影到一个查询。session=HibernateUtil.getSession(); Criteria c=session.createCriteria(News.class); c.setProjection( Projections.projectionList() .add( Projections.property(title) .add( Projections.property(category); news=c.list(); for(int i=0;inews.
9、size(); i+) Object obj=(Object)news.get(i); System.out.println(obj0+*+obj1); 6:查询示例(Query By Example, QBE) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - org.hibernate.criterion.Example 类允许你通过一个给定实例构建一个条件查询 (主要用于模糊查询 ) List news=new ArrayL
10、ist(); News exn=new News(); exn.setTitle(%今日%); Example example=Example.create(exn); example.enableLike(); Session session=HibernateUtil.getSession(); Criteria c=session.createCriteria(News.class); c.add(example); news=c.list(); Hibernate 中的原生 SQL (Native SQL )查询Hibernate3 允许你使用手写的sql 来完成所有的create,u
11、pdate,delete,和 load 操作(包括存储过程)1: SQL 查询是通过SQLQuery 接口来控制的,它是通过调用Session.createSQLQuery() 方法来获得session=HibernateUtil.getSession(); news=session.createSQLQuery(select * from news_news n) .addEntity(News.class).list(); addEntity()方法将 SQL 表的实体类联系起来, 并且确定查询结果集的返回值形态。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
12、 - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 2:原生的 SQL 查询可能返回一个简单的标量值或者一个标量和实体的结合体session=HibernateUtil.getSession(); max=(Long)session.createSQLQuery(select max(n.n_id) as maxid from news_news n) .addScalar(maxid,Hibernate.LONG) .uniqueResult(); 3:命名 SQL 查询可以在映射文档中定义查询的名字,然
13、后就可以象调用一个命名的HQL 查询一样直接调用命名SQL 查询.在这种情况下 ,我们不 需要调用 addEntity()方法. 在 po 类的 xml 文件中命名一个sql select * from news_news n 实现类调用:news=session.getNamedQuery(sqlallnews) 4:使用存储过程来查询Hibernate 3引入了对存储过程查询的支持. 存储过程必须返回一个结果集如下面存储过程例子:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5
14、 页,共 7 页 - - - - - - - - - CREATE OR REPLACE FUNCTION selectAllnews RETURN SYS_REFCURSOR AS st_cursor SYS_REFCURSOR; BEGIN OPEN st_cursor FOR SELECT * FROM news_news; RETURN st_cursor; END; 在 Hibernate里要要使用这个查询 ,你需要通过命名查询来映射它. ? = call selectAllnews () news=session.getNamedQuery(callselectAllnews) .
15、list(); 对存储过程进行的查询无法使用setFirstResult()/setMaxResults()进行分页Hibernate 过滤数据名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - Hibernate3 提供了一种创新的方式来处理具有“显性(visibility) ”规则的数据,那就是使用Hibernate filter 。 Hibernate filter 是全局有效的、具有名字、可以带参数的过滤器,对于某个特定的
16、Hibernate session您可以选择是否启用 (或禁用)某个过滤器。 过滤器条件相当于定义一个非常类似于类和各种集合上的 “where”属性的约束子句1:定义一个过滤器 节点之内的 节点 2:定义好之后, 就可以在某个类中要使用的属性下使用这个过滤器: 3: Session中默认是不启用过滤器的, 必须通过 Session.enabledFilter()方法显式的启用。该方法返回被启用的Filter 的实例session.enableFilter(newsCategoryfilter ).setParameter(catid, 1);String hql=from News; Query query=session.createQuery(hql); query.setFirstResult(0); query.setMaxResults(5); news=query.list(); 通过使用过滤器可以定义常用的筛选规则,如果是临时的还是使用常规的查询比较好。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -