Criteria查询_第1页
Criteria查询_第2页
Criteria查询_第3页
Criteria查询_第4页
Criteria查询_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网博课程研发第五课 Criteria 查询回顾Hibernate数据加载方式有哪些?有什么区别?数据加载方式有哪些?有什么区别?HQL联接查询有几种方式?联接查询有几种方式?在映射文件中如何定义命名查询?在映射文件中如何定义命名查询?如何使用本地如何使用本地SQL查询?查询?Hibernate注解注解了解了解Criteria查询查询Criteria查询表达式查询表达式使用使用Criteria进行查询排序进行查询排序使用使用Criteria进行查询分页进行查询分页本章目标Criteria 查询2-1用到特定于数据库的用到特定于数据库的SQL 语句,程序本身会依语句,程序本身会依赖于特定的数据库赖

2、于特定的数据库不了解不了解SQL 语句,恐怕对使用语句,恐怕对使用HQL带来困难带来困难Hibernate提供的提供的Criteria查询查询帮助我们解决了这种问题帮助我们解决了这种问题Criteria查询2-2Criteria 查询采用面向对象方式封装查询条件,查询采用面向对象方式封装查询条件,又称为对象查询又称为对象查询对对SQL 语句进行封装语句进行封装采用对象的方式来组合各种查询条件采用对象的方式来组合各种查询条件由由Hibernate 自动产生自动产生SQL 查询语句查询语句Criteria由由Hibernate Session进行创建进行创建Criteria查询表达式2-1Sess

3、ionFactory sessionFactory = new Configuration().configure() .buildSessionFactory();Session session = sessionFactory.openSession();Criteria criteria = session.createCriteria(User.class);List result = criteria.list();Iterator it = result.iterator();while (it.hasNext() User user = (User) it.next();Syst

4、em.out.println(用户名:用户名: + user.getName();session.close();sessionFactory.close();创建创建Criteria对象对象使用使用Criteria 的的list()方法获得数据,方法获得数据,list()方法返回方法返回List 实例实例Criteria查询表达式2-2 SessionFactory sessionFactory = new Configuration().configure() .buildSessionFactory(); Session session = sessionFactory.openSess

5、ion(); Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.eq(name, bob); List result = criteria.list(); Iterator it = result.iterator(); while (it.hasNext() User user = (User) it.next(); System.out.println(用户名:用户名: + user.getName(); session.close(); sessionFactory.clos

6、e();创建创建Criteria对象对象使用使用add()添加查添加查询条件询条件查询条件:查询条件:name=admin返回条件实例返回条件实例Restrictions常用限定查询方法 方法方法说说 明明Restrictions.eq()对应对应SQL的等于(的等于(=)Restrictions.allEq()使用使用Map,使用,使用key/value进行多个相等进行多个相等的值的比对的值的比对Restrictions.gt()对应对应SQL的大于的大于 ()Restrictions.ge()对应对应SQL的大于等于的大于等于 (=)Restrictions.lt()对应对应SQL的小于的

7、小于 ()Restrictions.le()对应对应SQL的小于等于的小于等于 (=)Restrictions.between()对应对应SQL的的between子句子句Restrictions.like()对应对应SQL的的like子句子句Restrictions.in()对应对应SQL的的in子句子句Restrictions.and()对应对应SQL的的andRestrictions.or()对应对应SQL的的orRestrictions.not()对应对应SQL的的not练习使用Criteria查询租房信息需求说明:需求说明:以标题(以标题(title)、价格()、价格(price)范围

8、和面积()范围和面积(floorage)范围为条件对租房信息进行综合的)范围为条件对租房信息进行综合的“模糊模糊”查询查询通过控制台接收查询条件,若条件为空则表示查询通过控制台接收查询条件,若条件为空则表示查询全部全部使用Example 2-1SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); Criteria criteria = session.createCriteria(

9、House.class); criteria.add(Restrictions.or( Restrictions.eq(price, new Double(2300), Restrictions.like(title, %地铁地铁%); List result = criteria.list(); Iterator it = result.iterator(); while (it.hasNext() House house = (House) it.next(); System.out.println(标题:标题: + house.getTitle(); session.close(); s

10、essionFactory.close();如果属性条件很多,如果属性条件很多,使用使用Restrictions 也不方便也不方便Hibernate提供提供Example 的的create()方法来建立方法来建立Example 实例,实例,Example 实现了实现了Criteria 接口接口使用Example 2-2House house = new House();house.setPrice(new Double(2000);house.setFloorage(new Integer(40);SessionFactory sessionFactory = new Configuratio

11、n().configure().buildSessionFactory();Session session = sessionFactory.openSession();Criteria criteria = session.createCriteria(House.class);criteria.add(Example.create(house);List results = criteria.list();Iterator it = results.iterator();while(it.hasNext() House h= (House)it.next(); System.out.pri

12、ntln(标题:标题:+h.getTitle()+ 价格价格+h.getPrice();session.close();sessionFactory.close();查询条件,添加查询条件,添加到到house对象中对象中创建创建Criteria对象对象通过通过Example 的的create()方法来建立方法来建立Example 实例实例作为查询条件作为查询条件Hibernate 在自动生成在自动生成SQL 语句时将自动过滤掉对语句时将自动过滤掉对象的空属性,根据有非空属性值的属性生成查询条件象的空属性,根据有非空属性值的属性生成查询条件Criteria查询排序 2-1Criteria 查询不

13、仅能组合出查询不仅能组合出SQL中中where子句的子句的功能,还可以组合出排序查询功能功能,还可以组合出排序查询功能使用使用org.hibernate.criterion.Order对结果进行对结果进行排序排序排序的方法为:排序的方法为:asc()desc()Criteria查询排序 2-2SessionFactory sessionFactory = new Configuration().configure() .buildSessionFactory();Session session = sessionFactory.openSession();Criteria criteria =

14、 session.createCriteria(House.class);criteria.addOrder(Order.desc(price);List result = criteria.list();Iterator it = result.iterator();while (it.hasNext() House house = (House) it.next(); System.out.println(标题:标题: + house.getTitle() + 价格价格 + house.getPrice();session.close();sessionFactory.close();创建

15、创建Criteria对象对象加入加入Order 条件条件以价格降序的方式排列以价格降序的方式排列练习使用Criteria实现排序需求说明:需求说明:已知房屋租金为已知房屋租金为 2000 元,面积为元,面积为 75平米平米要求查询出与之类似的其他房屋信息要求查询出与之类似的其他房屋信息并以房屋编号升序的方式进行排序并以房屋编号升序的方式进行排序Criteria查询实现分页 2-1Criteria 的的setMaxResults()方法可以限定查询方法可以限定查询返回数据的行数返回数据的行数Criteria 的的setFirstResult()设定查询返回结果设定查询返回结果的第一行数据的位置的

16、第一行数据的位置结合以上结合以上Criteria的两个方法即可实现简单分页的两个方法即可实现简单分页Criteria查询实现分页 2-2SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();Session session = sessionFactory.openSession();Criteria criteria = session.createCriteria(House.class);criteria.setFirstResult(3);criteria.setMaxR

17、esults(2);List results = criteria.list();Iterator it = results.iterator();while(it.hasNext()House h = (House)it.next();System.out.println(标题:标题:+h.getTitle()+ 价格:价格:+h.getPrice();session.close(); sessionFactory.close();创建创建Criteria对象对象设定查询返回结果的设定查询返回结果的第一行数据的位置第一行数据的位置限定查询返回数据的限定查询返回数据的行数行数Hibernate

18、: select * from ( select row_.*, rownum rownum_ from ( select this_.id as id4_3_, this_.user_id as user2_4_3_, this_.type_id as type3_4_3_, this_.street_id as street4_4_3_, this_.title as title4_3_, this_.price as price4_3_, this_.pubdate as pubdate4_3_, this_.floorage as floorage4_3_, this_.contact

19、 as contact4_3_, user2_.id as id0_0_, user2_.name as name0_0_, user2_.password as password0_0_, user2_.telephone as telephone0_0_, user2_.username as username0_0_, user2_.isadmin as isadmin0_0_, type3_.id as id3_1_, type3_.type_name as type2_3_1_, street4_.id as id2_2_, street4_.street_name as stree

20、t2_2_2_, street4_.district_id as district3_2_2_ from jbit.house this_ inner join jbit.users user2_ on this_.user_id=user2_.id inner join housetype type3_ on this_.type_id=type3_.id inner join street street4_ on this_.street_id=street4_.id ) row_ where rownum ?注解Hibernate提供了提供了Hibernate Annotations扩展包,扩展包,使用注解完成映射使用注解完成映射使用使用Hibernate注解的步骤如下:注解的步骤如下:添加添加jar包包使用注解配置持久化类以及对象关联关系使用注解配置持久化类以及对象关联关系在在Hibernate配置文件(配置文件(hibernate.cfg.xml)中声明持)中声明持久化类久化类1.使用使用AnnotationConfiguration建立建立SessionFactory注解配置持久化类注解注解含义和作用含义和作用Entity将一个类声明为一个持久化类将一个类声明为一个持久化类Id声明了持久化类的标识属性声明了持久化类的标识属性Gener

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论