欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第6章高级数据检索.ppt

    • 资源ID:83088861       资源大小:758KB        全文页数:51页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第6章高级数据检索.ppt

    Hibernate ORMHibernate ORM 最佳实践最佳实践第第6章章 高级数据检索高级数据检索Hibernate ORM回顾q使用动态类进行关系映射q使用组件进行关系映射q映射值类型的集合q一个持久化类对应多个表的映射2Hibernate ORM目标qQBC(query by criteria)面向对象查询方式q利用HQL和criteria连接查询qHibernate的数据检索策略3Hibernate ORMQBC数据检索qHQL示例class book private String bname;private int bversion;private String author;private Date bdate;private String press;:根据用户输入的条件查询所需要的书籍.如果使用HQL查询:where的条件怎么设置?session.createQuery(from book where)QBC:Query by Criteria:以函数API的方式动态设置查询条件,组成查询语句.静态字符串查询语句4Hibernate ORMQBC查询主要类qCriteria接口:用来设置各种查询条件的利用session的方法createCriteria(“目标实体类类型”)创建criteria对象,Criteria crit=session.createCriteria(“Teacher.class”);生成Criterion对象,作为查询条件.Criterion cond=Restrictions.eq(“teacherID”,new Long(102);利用Criteria接口方法add添加Criterion对象设置查询条件 crit.add(cond);调用Criteria的list方法或scroll方法执行查询语句.List results=crit.list();ScrollableResults scrollresult=crit.scroll();从List或ScrollableResults 中取出查询对象.5Hibernate ORM示例6Hibernate ORM示例利用Criteria查询101号老师所带在校生和毕业生的学号及姓名:运行结果:7Hibernate ORM分析-1Criteria接口中的主要方法Criteria add(Criterion criterion):添加查询条件,作用where条件.如果说查询条件是多个并列或者是只要满足其中一个条件,怎样实现and或or逻辑操作?如:查询教师ID号=200或者教师姓名不以T或t开头的所有教师.Criteria addOrder(Order order)增加排序Criteria createAlias(String associationPath,String alias)关联实体属性名别名为对象实体属性设置别名来实现关联Criteria createAlias(String associationPath,String alias,int joinType)CriteriaSpecification.INNER_JOIN,CriteriaSpecification.FULL_JOINCriteriaSpecification.LEFT_JOIN,CriteriaSpecification.RIGHT_JOIN 9Hibernate ORM示例查找教师101所带学生姓名为刘的所有学生的学号及姓名对象实体属性student10Hibernate ORM代码注意:createAlias()方法不会返回新的实例,还是原来的Criteria实例,这样设置Teacher与Student的关联关系.Criteria createCriteria(String associationPath,String alias)关联实体属性名返回一个新的Criteria实例11Hibernate ORM代码产生新的Criteria实例crit1Criteria setProjection(Projection projection)Projections类提供许多静态方法来产生对查询结果进行选择某些属性的投影,进行avg、max、min、count、sum等聚集运算。12Hibernate ORM示例计算学生中来自成都的有多少?查询来自成都的学生的学号及姓名13Hibernate ORM代码ProjectionLis:添加投影列查询返回的list对象中含有对象数组Object,其中Object0代表sid,Object1代表sname14Hibernate ORMDetachedCriteria类q在前面例子中,在使用Criteria对象的前提必须有一个Session对象,因此这种依赖关系限制Criteria接口的使用范围。q考虑以下情况:需要在没有Session对象的情况下创建数据查询;同一个数据查询跨越多个Session对象Hibernate提供一个可以脱离Session对象的查询对象:DetachedCriteriaDetachedCriteria.forClass(实体类类型)DetachedCriteria封装一个CriteriaImpl对象getSession()session对象criteria对象(脱离session)criteria.getExecutableCriteria(session)criteria对象(关联session)15Hibernate ORM示例只有关联到session后才可以list16Hibernate ORM小结17Hibernate ORMCriterion类和Restrictions类1.Criterion 是 Criteria 的查询条件。2.Criteria 提供了 add(Criterion criterion)方法来添加查询条件。3.Criterion 的实例可以通过 Restrictions 工具类来创建,Restrictions 提供了大量的静态方法,如 eq(等于)、ge(大于等于)、between 等来方法的创建 Criterion查询条件(SimpleExpression 实例)4.除此之外,Restrictions 还提供了方法来创建 conjunction 和 disjunction 实例,通过往该实例的 add(Criteria)方法来增加查询条件形成一个查询条件集合。18Hibernate ORMRestrictions类的方法设置Criterion查询条件19Hibernate ORMProjection和Projections类1.Projection 主要是让 Criteria 能够进行报表查询,并可以实现分组。Projection主要有 SimpleProjection、ProjectionList 和 Property 三个实现。其中 SimpleProjection 和 ProjectionList 的实例化是由内建的 Projections 来完成,如提供的 avg、count、max、min、sum 可以让开发者很容易对某个字段进行统计查询。2.Property 是对某个字段进行查询条件的设置,如通过 Porperty.forName(“color”).in(new String“black”,”red”,”write”);则可以创建一个 Criterion实例。3.通过 criteria 的 setProjection(Projection)方法加入到查询条件中去。20Hibernate ORMProjections的方法SimpleProjection 和 ProjectionList 的实例化是由内建的 Projections 来完成21Hibernate ORM示例查询来自成都的学生,并且由101号老师所带的,该学生的学号及姓名22Hibernate ORM逻辑组合q如果逻辑关系比较复杂,可以使用Restrictions.disjunction()代表逻辑或、Restrictions.conjuction()代表逻辑与查询由表101号老师所带学号范围(602-608)的姓王或姓刘的学生的学号、姓名23Hibernate ORM举例查询(QBE)q使用Example类进行查询Example 本身提供了一个静态方法 create(Object entity),即根据一个对象(实际使用中一般是映射到数据库的对象)来创建。然后可以设置一些过滤条件:Example exampleUser=Example.create(u).ignoreCase()/忽略大小写 .enableLike(MatchMode.ANYWHERE);Criteria crit=session.createCriteria(Student.class);crit.add(exampleUser);List results=crit.list();ANYWHERE、END、EXACT、START24Hibernate ORM连接查询q三中连接方式:内连接、左外连接、右外连接内连接:是利用关键字INNER JOIN内联合两个实体对象,只返回满足关键字ON 定义的条件的记录。任何不满足条件的记录都会被排除在结果之外;外连接:在整个查询过程中以一个表格为主,另一个表格为辅,主表格中的记录不论是否满足条件都应该出现在结果集合中,而辅助表格中的记录则必须满足条件。一、HQL连接查询(inner join、left join、right join)25Hibernate ORM示例26Hibernate ORMlist中的每个元素是Object,其中Object0是Student对象,Object1是Teacher对象27Hibernate ORMHQL支持fetch查询q在HQL中使用fetch,在返回的list中存放的对象是主类对象,而不是以对象组形式返回关联的两个类对象。只返回主类对象Student28Hibernate ORM检索策略-类级别q类级别:关于POJO类什么时候被载入 q类级别延迟加载(代理检索策略)立即检索代理检索非代理检索属性延迟检索在编译期间进行字节码增强操作,很少用当检索一个类,其所有属性从数据库中检索到session中当检索一个类,得到是只有主键属性的代理对象(其它非主键属性为空),只有在访问非主键属性时,才初始化其他属性,对象才载入.类级别延迟加载只是在调用load函数时有用;如果使用get函数,或者使用Query.list()执行查询,立即 加载类对象;在POJO的映射文件中增加lazy属性(true|false),默认是延迟加载.29Hibernate ORM示例类级别延迟加载cp为代理对象并没有执行select操作访问非主属性,触发select操作30Hibernate ORM类级别延迟加载如果load的对象不存在,在执行load()时是不会发现的,只有在访问非主键属性时才抛出异常;主键不存在Load()执行时正常的,没发现id不存在对象只能在session范围内被加载,如果session关闭了,再返回对象就会抛出异常.31Hibernate ORM示例提前关闭session32Hibernate ORM示例类级别延迟对get或Query.list()方法不起作用,立即检索立即检索,select操作触发相当于lazy=false,执行load()函数33Hibernate ORM关联级别检索q关联级别:检索主类相关联的实体或实体集合什么时候载入的策略关联实体的载入策略(one-to-one或many-to-one)lazy决定关联实体什么时候载入(proxy|false)fetchjoin:使用连接查询检索对象;select(默认):抓取在前面查询到的所有实体对象的关联对象注意:当关联实体使用fetch=join时,lazy的延迟加载失去意义.,因为连接查询把关联对象同时载入.关联实体是否延迟加载,还要参考关联实体的类级别载入策略.34Hibernate ORM代码主类级别检索策略关联实体的检索策略关联类的检索策略35Hibernate ORM关联类的载入策略关联类lazy属性关联类什么时候被载入默认(proxy)默认(true)延迟载入proxyfalse立即载入falsetrue立即载入falsefalse立即载入中lazy属性只要有一个条件为立即载入,最后关联类立即载入注意:只要中lazy属性为false,不用判断关联类的lazy属性,最终关联类立即载入;如果中lazy属性为proxy,还需要判断关联类lazy属性.36Hibernate ORM示例-1关联类立即加载主类延迟加载37Hibernate ORM示例-2关联类立即加载主类立即加载38Hibernate ORM示例-3主类延迟加载关联类延迟加载39Hibernate ORM示例-4关联类立即加载等同fetch=“join”进行左外连接40Hibernate ORM示例-5进行左外连接连接操作表示立即加载41Hibernate ORM关联级别检索(2)关联集合的载入策略(one-to-many或many-to-many)采用什么载入策略,是由中的lazy属性和fetch属性决定的.lazy决定集合属性什么时候载入,true|extra|falseextra:进一步延迟集合检索,对于集合中的每一个对象只有在具体访问到该对象时才把该关联对象载入fetchjoin|subselect|select(默认)subselect:把检索得到的所有主类的关联集合都初始化42Hibernate ORM示例关联集合立即载入43Hibernate ORM示例关联集合延迟加载调用集合的任何函数时,触发select操作44Hibernate ORM示例关联集合进一步延迟加载只有访问到集合中每一个对象才可载入.45Hibernate ORM示例关联集合延迟载入,subselect检索方式不受主类lazy属性约束,立即载入所有主类对象将所有主类对象的关联集合都初始化46Hibernate ORM代码不会触发select语句将所有主类对象的关联集合都初始化47Hibernate ORMBatch载入策略qBatch策略:对关联集合可以设置批量载入,可以设置属性:batch-size=整型值假如设为2?48Hibernate ORM代码假如batch-size=2,数据库的记录没取完,再次触发select语句。49Hibernate ORM代码当设置batch-size=2,50Hibernate ORM总结qQBC(query by criteria)面向对象查询方式q利用HQL和criteria连接查询qHibernate的数据检索策略51

    注意事项

    本文(第6章高级数据检索.ppt)为本站会员(hyn****60)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开