您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > Criteria查询.
网博课程研发第五课Criteria查询回顾Hibernate数据加载方式有哪些?有什么区别?HQL联接查询有几种方式?在映射文件中如何定义命名查询?如何使用本地SQL查询?Hibernate注解了解Criteria查询Criteria查询表达式使用Criteria进行查询排序使用Criteria进行查询分页本章目标Criteria查询2-1用到特定于数据库的SQL语句,程序本身会依赖于特定的数据库不了解SQL语句,恐怕对使用HQL带来困难Hibernate提供的Criteria查询帮助我们解决了这种问题Criteria查询2-2Criteria查询采用面向对象方式封装查询条件,又称为对象查询对SQL语句进行封装采用对象的方式来组合各种查询条件由Hibernate自动产生SQL查询语句Criteria由HibernateSession进行创建Criteria查询表达式2-1SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();Sessionsession=sessionFactory.openSession();Criteriacriteria=session.createCriteria(User.class);Listresult=criteria.list();Iteratorit=result.iterator();while(it.hasNext()){Useruser=(User)it.next();System.out.println(用户名:+user.getName());}session.close();sessionFactory.close();创建Criteria对象使用Criteria的list()方法获得数据,list()方法返回List实例Criteria查询表达式2-2SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();Sessionsession=sessionFactory.openSession();Criteriacriteria=session.createCriteria(User.class);criteria.add(Restrictions.eq(name,bob));Listresult=criteria.list();Iteratorit=result.iterator();while(it.hasNext()){Useruser=(User)it.next();System.out.println(用户名:+user.getName());}session.close();sessionFactory.close();创建Criteria对象使用add()添加查询条件查询条件:name='admin'返回条件实例Restrictions常用限定查询方法方法说明Restrictions.eq()对应SQL的等于(’=’)Restrictions.allEq()使用Map,使用key/value进行多个相等的值的比对Restrictions.gt()对应SQL的大于(‘’)Restrictions.ge()对应SQL的大于等于(‘=’)Restrictions.lt()对应SQL的小于(‘’)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)范围和面积(floorage)范围为条件对租房信息进行综合的“模糊”查询通过控制台接收查询条件,若条件为空则表示查询全部使用Example2-1SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();Sessionsession=sessionFactory.openSession();Criteriacriteria=session.createCriteria(House.class);criteria.add(Restrictions.or(Restrictions.eq(price,newDouble(2300)),Restrictions.like(title,%地铁%)));Listresult=criteria.list();Iteratorit=result.iterator();while(it.hasNext()){Househouse=(House)it.next();System.out.println(标题:+house.getTitle());}session.close();sessionFactory.close();如果属性条件很多,使用Restrictions也不方便Hibernate提供Example的create()方法来建立Example实例,Example实现了Criteria接口使用Example2-2Househouse=newHouse();house.setPrice(newDouble(2000));house.setFloorage(newInteger(40));SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();Sessionsession=sessionFactory.openSession();Criteriacriteria=session.createCriteria(House.class);criteria.add(Example.create(house));Listresults=criteria.list();Iteratorit=results.iterator();while(it.hasNext()){Househ=(House)it.next();System.out.println(标题:+h.getTitle()+价格+h.getPrice());}session.close();sessionFactory.close();查询条件,添加到house对象中创建Criteria对象通过Example的create()方法来建立Example实例作为查询条件Hibernate在自动生成SQL语句时将自动过滤掉对象的空属性,根据有非空属性值的属性生成查询条件Criteria查询排序2-1Criteria查询不仅能组合出SQL中where子句的功能,还可以组合出排序查询功能使用org.hibernate.criterion.Order对结果进行排序排序的方法为:asc()desc()Criteria查询排序2-2SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();Sessionsession=sessionFactory.openSession();Criteriacriteria=session.createCriteria(House.class);criteria.addOrder(Order.desc(price));Listresult=criteria.list();Iteratorit=result.iterator();while(it.hasNext()){Househouse=(House)it.next();System.out.println(标题:+house.getTitle()+价格+house.getPrice());}session.close();sessionFactory.close();创建Criteria对象加入Order条件以价格降序的方式排列练习——使用Criteria实现排序需求说明:已知房屋租金为2000元,面积为75平米要求查询出与之类似的其他房屋信息并以房屋编号升序的方式进行排序Criteria查询实现分页2-1Criteria的setMaxResults()方法可以限定查询返回数据的行数Criteria的setFirstResult()设定查询返回结果的第一行数据的位置结合以上Criteria的两个方法即可实现简单分页Criteria查询实现分页2-2SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();Sessionsession=sessionFactory.openSession();Criteriacriteria=session.createCriteria(House.class);criteria.setFirstResult(3);criteria.setMaxResults(2);Listresults=criteria.list();Iteratorit=results.iterator();while(it.hasNext()){Househ=(House)it.next();System.out.println(标题:+h.getTitle()+价格:+h.getPrice());}session.close();sessionFactory.close();创建Criteria对象设定查询返回结果的第一行数据的位置限定查询返回数据的行数Hibernate:select*from(selectrow_.*,rownumrownum_from(selectthis_.idasid4_3_,this_.user_idasuser2_4_3_,this_.type_idastype3_4_3_,this_.street_idasstreet4_4_3_,this_.titleastitle4_3_,this_.priceasprice4_3_,this_.pubdateaspubdate4_3_,this_.floorageasfloorage4_3_,this_.contactascontact4_3_,user2_.idasid0_0_,user2_.nameasname0_0_,user2_.passwordaspassword0_0_,user2_.telephoneastelephone0_0_,user2_.usernameasusername0_0_,user2_.isadminasisadmin0_0_,type3_.idasid3_1_,type3_.type_nameastype2_3_1_,street4_.idasid2_2_,street4_.street_nameasstreet2_2_2_,street4_.district_idasdistrict3_2_2_fromjbit.housethis_innerjoinjbit.usersuser2_onthis_.user_id=user2_.idinnerjoinhousetypetype3_onthis_.type_id=type3_.idinnerjoinstreetstreet4_onthis_.street_id=street4_.id)row_whererownum=?
本文标题:Criteria查询.
链接地址:https://www.777doc.com/doc-2907347 .html