热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Hibernate配置---检索策略-mysql教程

Hibernate是一个持久层的框架,不依赖任何容器,支持对象到数据库表的映射,ORM。支持开发中的增删改查操作,将基本的JDBC操作进

Hibernate是一个持久层的框架,不依赖任何容器,支持对象到数据库表的映射,ORM。支持开发中的增删改查操作,将基本的JDBC操作进

Hibernate是一个持久层的框架,不依赖任何容器,支持对象到数据库表的映射,ORM。

支持开发中的增删改查操作,将基本的JDBC操作进行封装,可以通过配置hibernate.cfg.xml来方便的切换数据库。做到了系统和数据库的解偶。

支持数据库连接池,防止高并发导致系统响应慢和系统崩溃。当多用户同时访问应用时,每次请求都会开辟一个连接对象,当开启和关闭时都会有时间的消耗,如果没有访问数据库的限制,那么将导致系统响应越来越慢,内存如果没有及时回收导致系统崩溃。hibernate常用的为c3p0连接池,通过在hibernate.cfg.xml中配置。

检索策略:

多对一配置策略:

在many-to-one元素中可以指定outer-join="true" lazy="false",采用迫切做外连接的方式检索,,使用一条语句查询出与之相关的一端,默认为立即检索,会分别发出语句查询相关联的表。lazy只可以取值:proxy,no-proxy,false。如果要延迟加载一的一端,那么需要在many-to-one中配置outer-join="proxy" ,在one-to-many端的类属性上配置lazy=true

one-to-many元素中可以在set上指定outer-join="true" lazy="false",采用迫切左外连接方式检索,默认立即检索。

如果将lazy设置为true,那么无论outer-join为什么值,都将采用延迟加载。

一对一关联延迟加载配置:

one-to-one

在一端Seal类:


cascade="save-update" lazy="proxy" cOnstrained="true"/>

在另一端SealData:

table="tsealdata" dynamic-update="true" dynamic-insert="true"
select-before-update="false" lazy="true">

看红色部分配置,这样可以在查询seal的时候延迟加载sealData。

延迟加载主要可以用在:

Hibernate3.x,lazy默认是打开的
Hibernate Lazy策略使用:
标签,可以取值true/false
标签,可以取值true/false
标签,可以取值true/false/extra
单端关联,可以取值:false/proxy/noproxy
load支持lazy,get不支持,无论持久化类设置与否,都会立即检索。

(1)class标签

默认为true
class上的Lazy,只对普通属性起作用,对集合和 不起作用
即:如果一个类里有Set集合成员变量和需要用 来映射的成员变量,即使在class里设置lazy为false,他们在使用之前也不会加载。需要单独设置lazy,也就是lazy的另外两个用法。
如果在使用load加载了某个对象,但是没有使用,即没有发出SQL语句,就把session给关了,此时,如果再使用这个对象就会抛出LazyInitalizationException。因为对象并没有加载上来,因为使用了lazy策略,只是加载了类的一个代理子类。

(2)集合

默认为true
默认为true情况下,只要使用到了Set对象,就会把整个set全部查询出来。
false情况下,不使用Lazy,查询Lazy所属的对象时,set就会被查询上来。需要类增强工具。
extra情况下,比较智能,根据查询的内容,生成不同的SQL语句。效率会高一些。

(3)单端关联

默认为proxy
false:不使用Lazy。
noproxy:需要类增强工具

(4)property

默认false
true:较少使用,如果某个字段是内容量比较大,可以设置为true,在真正使用的时候再加载。可以提高效率。,但是需要hibernate的工具包,org.hibernate.tool.instrument.cglib借助Ant来对编译完成的class文件做一个增强,实际上是在class文件中加入一些cglib代码,这样hibernate可以在运行时判断属性是否需要立即加载,否则延迟加载。为了达到这个目的需要每次都编译增强,不利于项目维护。采用的方法为:将大字段抽取到一张表里面,然后和基础表建立一对一关联关系,具体是业务来定,当查询的时候就可以借助Hibernate的延迟策略来达到懒加载目的。

linux

推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • Eclipse 中 JSP 开发环境配置指南
    本文详细介绍了如何在 Eclipse 集成开发环境中配置 JSP 运行环境,包括必要的软件下载、Tomcat 服务器的配置以及常见问题的解决方法。 ... [详细]
  • 本文探讨如何利用Java反射技术来模拟Webwork框架中的URL解析过程。通过这一实践,读者可以更好地理解Webwork及其后续版本Struts2的工作原理,尤其是它们在MVC架构下的角色。 ... [详细]
  • PHP 中 preg_match 函数的 isU 修饰符详解
    本文详细解析 PHP 中 preg_match 函数中 isU 修饰符的具体含义及其应用场景,帮助开发者更好地理解和使用正则表达式。 ... [详细]
  • Mac下 运行Win7虚拟机内SQL Server 2008 Management Studio 如何访问外接移动硬盘 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文将深入探讨如何使用 SQLAlchemy 在数据库模型中定义和操作不同类型的表间关系,包括一对一、一对多及多对多的关系。 ... [详细]
  • 探讨HTML中的DIV样式难题
    本文深入分析了HTML中常见的DIV样式问题,并提供了有效的解决策略。适合所有对Web前端开发感兴趣的读者。 ... [详细]
  • 迎接云数据库新时代:程序员如何应对变革?
    在数据无处不在的时代,数据库成为了管理和处理数据的核心工具。从早期的信息记录方式到现代的云数据库,数据库技术经历了巨大的变革。本文将探讨云数据库的特点及其对程序员的影响。 ... [详细]
  • 本文详细列举了软件开发中常见的功能测试要点,涵盖输入框、搜索、添加/修改、删除、文件上传下载等多个方面,旨在帮助测试人员全面覆盖测试需求,确保软件质量。 ... [详细]
  • 本文介绍了用于监控数据库运行状态的SQL查询,包括重做日志切换频率及PGA和SGA内存使用情况的检查方法。 ... [详细]
  • 当面临数据库清理任务时,若无删除或重建数据库的权限,可以通过编写SQL脚本来实现批量删除用户自定义的数据表和存储过程。本文将详细介绍如何构造这样的SQL脚本。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
author-avatar
陈上意535
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有