您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > Hibernate--查询
HIBERNATE查询HIBERNATE查询方式对象导航查询需求:根据id查询某个客户,再查询这个客户里面所有的联系人。根据对象关系得到另一个对象。OID查询根据id查询某一条记录,返回对象。调用session里的get方法来实现:传入Class对象和id值Customercustomer=session.get(Customer.class,1);HQL查询Query对象,写hql实现查询hql和普通sql的区别:普通sql操作数据库表和字段,hql操作实体类和属性。使用hql进行查询创建Query对象,写hql语句。调用Query对象里面的方法,得到结果。查询所有from实体类的名字需求:查询所有客户记录Queryquery=session.createQuery(fromCustomer);ListCustomerlist=query.list();条件查询from实体类名称where属性名称1=?and属性名称2=?from实体类名称where属性名称like?Queryquery=session.createQuery(fromCustomercwherec.cid=?andc.custName=?);query.setParameter(0,1);query.setParameter(1,百度);模糊条件查询Queryquery=session.createQuery(fromCustomercwherec.custNamelike?);query.setParameter(0,%浪%);排序查询from实体类名称orderby实体类属性名称asc/descQueryquery=session.createQuery(fromCustomerorderbyciddesc);分页查询在hql中,无法直接使用分页查询语句,hibernate的Query对象中封装了两个方法实现分页查询。Queryquery=session.createQuery(fromCustomer);//设置开始位置query.setFirstResult(0);//设置每页记录数query.setMaxResults(3);投影查询定义:查询表中的部分字段,而不是全部字段.hql语句select实体类属性名称1,实体类属性名称2from实体类名称select语句后面不能写*.Queryquery=session.createQuery(selectcustNamefromCustomer);ListObjectlist=query.list();聚集函数的使用常用的聚集函数:count,sum,avg,max,min1.查询表记录数selectcount(*)from实体类名称Queryquery=session.createQuery(selectcount(*)fromCustomer);Objectobj=query.uniqueResult();QBC查询QueryByCriteria:org.hibernate.Criteria接口查询所有Criteriacriteria=session.createCriteria(Customer.class);LIstCustomerlist=criteria.list();条件查询Criteriacriteria=session.createCriteria(Customer.class);//设置条件criteria.add(Restriction.eq(cid,1));criteria.add(Restriction.eq(custName,百度));LIstCustomerlist=criteria.list();使用Criteria对象的add方法,criteria.add(Criterioncriterion);Restrictions类提供了如下的方法,返回Criterion接口对象方法说明Restrictions.eq=Restrictions.allEq利用Map来进行多个等于的限制Restrictions.gt>Restrictions.ge>=Restrictions.lt<Restrictions.le<=Restrictions.betweenBETWEENRestrictions.likeLIKERestrictions.ininRestrictions.andandRestrictions.ororRestrictions.sqlRestriction用SQL限定查询排序查询Criteriacriteria=session.createCriteria(Customer.class);criteria.addOrder(Order.desc(cid));LIstCustomerlist=criteria.list();分页查询Criteriacriteria=session.createCriteria(Customer.class);criteria.setFirstResult(0);criteria.setMaxResults(3);统计查询Criteriacriteria=session.createCriteria(Customer.class);crieteria.setProjection(Projections.rowCount());离线查询不直接使用session//创建对象DatachedCriteriadatachedCriteria=DatachedCriteria.forClass(Customer.class);//最终执行时,才引入sessionCriteriacriteria=detachedCriteria.getExecutableCriteria(session);HQL多表查询MYSQL中多表查询内连接如果字段没有关联数据,,则不显示select*fromt_customerc,t_linkmanlwherec.cid=l.clid;select*fromt_customerc,innerjoint_linkmanlonc.cid=l.clid;左外连接select*fromt_customerc,leftjoint_linkmanlonc.cid=l.clid;右外连接select*fromt_customerc,rightjoint_linkmanlonc.cid=l.clid;HQL中多表查询内连接fromcustomercinnerjoinc.setLinkManQueryquery=session.createQuery(fromcustomercinnerjoinc.setLInkMsn);Listlist=query.list();迫切内连接fromcustomercinnerjoinfetchc.setLinkMan迫切内连接与内连接底层数据库操作是一样的。内连接返回的list中的元素是数组类型,而迫切内连接返回的list中的元素是pojo左外连接fromcustomercleftjoinc.setLinkMan迫切左外连接fromcustomercleftjoinfetchc.setLinkMan右外连接fromcustomercrightjoinc.setLinkMan本地SQL查询SQLQuery对象,使用普通sql实现查询HIBERNATE检索策略检索策略的概念hibernate检索策略分为两类立即查询:根据id进行查询,调用get方法,会马上发语句查询数据库延迟查询:根据id查询,调用load方法,只有在得到对象里的值时,才发送查询语句延迟查询分为两类:类级别延迟get/load关联级别延迟cascadefetchfetch=FetchType.EAGER(@ManyToOne默认)fetch=FetchType.LAZY(大部分默认):属性获取不发,使用时发。性能优化处理1+n问题,当使用fetch=FetchType.EAGER时,查询一张表会级联查询相关表。这时,可能会立即发多条查询语句,影响性能。解决方法:设置为fetch=FetchType.LAZY。使用表连接。比如leftjoinfetch或者使用createCriteria(内部自动调用joinfetch)使用batchsizeHIBERNATE缓存机制一级缓存在session级别,二级缓存在sessionFactory级别,三级缓存相同缓存二级缓存经常被访问,不会经常改动,数量有限。(比如:用户权限)实体类添加注解@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)HIBERNATE.CFG.XML的相关配置!--cache--propertyname=hibernate.cache.use_second_level_cachetrue/propertypropertyname=hibernate.cache.use_query_cachetrue/propertypropertyname=hibernate.cache.region.factory_classorg.hibernate.cache.ehcache.EhCacheRegionFactory/propertyEHCACHE.XML缓存的配置文件ehcache!--Setsthepathtothedirectorywherecache.datafilesarecreated.IfthepathisaJavaSystemPropertyitisreplacedbyitsvalueintherunningVM.Thefollowingpropertiesaretranslated:user.home-User'shomedirectoryuser.dir-User'scurrentworkingdirectoryjava.io.tmpdir-Defaulttempfilepath--diskStorepath=java.io.tmpdir/!--DefaultCacheconfiguration.ThesewillappliedtocachesprogrammaticallycreatedthroughtheCacheManager.ThefollowingattributesarerequiredfordefaultCache:maxInMemory-Setsthemaximumnumberofobjectsthatwillbecreatedinmemoryeternal-Setswhetherelementsareeternal.Ifeternal,timeoutsareignoredandtheelementisneverexpired.timeToIdleSeconds-Setsthetimetoidleforanelementbeforeitexpires.Isonlyusediftheelementisnoteternal.Idletimeisnow-lastaccessedtimetimeToLiveSeconds-Setsthetimetoliveforanelementbeforeitexpires.Isonlyusediftheelementisnoteternal.TTLisnow-creationtimeoverflowToDisk-Setswhetherelementscanoverflowtodiskwhenthein-memorycachehasreachedthemaxInMemorylimit.--defaultCachemaxElementsInMemory=10000eternal=falsetimeToIdleSeconds=120timeToLiveSeconds=1200overflowToDisk=t
本文标题:Hibernate--查询
链接地址:https://www.777doc.com/doc-4825820 .html