对性能和开发有何影响-Hibernate配置默认值设置合理吗

教程大全 2026-01-27 17:19:00 浏览

Hibernate配置默认值详解

Hibernate作为一款优秀的Java持久层框架,在Java开发中扮演着重要角色,在进行Hibernate项目开发时,合理的配置对于项目的性能和稳定性至关重要,本文将详细介绍Hibernate的配置默认值,帮助开发者更好地理解和使用Hibernate。

Hibernate配置文件

Hibernate的配置文件通常为hibernate.cfg.xml,位于项目的src目录下,该文件包含了Hibernate的运行时配置信息,如数据库连接、事务管理、方言等。

数据库连接配置

数据库驱动

Hibernate默认使用JDBC连接数据库,因此需要配置数据库驱动,以下为MySQL数据库的驱动配置示例:

com.mysql.jdbc.Driver

数据库URL

Hibernate默认值优化策略

数据库URL包括数据库类型、主机名、端口号和数据库名,以下为MySQL数据库的URL配置示例:

jdbc:mysql://localhost:3306/yourdatabase

数据库用户名

数据库用户名用于连接数据库,以下为数据库用户名配置示例:

数据库密码

数据库密码用于连接数据库,以下为数据库密码配置示例:

事务管理配置

Hibernate支持两种事务管理方式:JDBC和JPA,以下为JDBC事务管理配置示例:

org.hibernate.transaction.JDBCTransactionFactory

方言配置

方言配置用于指定Hibernate使用的数据库方言,以下为MySQL数据库方言配置示例:

org.hibernate.dialect.MySQLDialect

其他配置

显示SQL语句

格式化SQL语句

自动建表

Q1:Hibernate配置文件中,如何配置数据库连接池?

A1:Hibernate本身不提供数据库连接池功能,但可以通过集成第三方连接池实现,使用C3P0连接池,需要在hibernate.cfg.xml中添加以下配置:

org.hibernate.connection.C3P0ConnectionProvider52030050

Q2:如何设置Hibernate的事务隔离级别?

A2:在hibernate.cfg.xml中,可以通过以下配置设置事务隔离级别:

1表示读未提交(Read Uncommitted),2表示读已提交(Read Committed),4表示可重复读(Repeatable Read),8表示串行化(Serializable)。


Spring有什么好处?

在SSH框假中spring充当了管理容器的角色。 我们都知道Hibernate用来做持久层,因 为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句。 Struts是用来做应用层的,他它负责调用业务逻辑serivce层。 所以SSH框架的流程大致 是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)struts 负责控制Service(业务逻辑处理类),从而控制了Service的生命周期,这样层与层之间的 依赖和强,属于耦合。 这时,使用spring框架就起到了控制Action对象(Strus中的)和 Service类的作用,两者之间的关系就松散了,Spring的Ioc机制(控制反转和依赖注入)正 是用在此处。 Spring的Ioc(控制反转和依赖注入) 控制反转:就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直 接操控。 依赖注入:组件之间的依赖关系由容器在运行期决定 ,由容器动态的将某种依赖关系注 入到组件之中。 从上面我们不难看出:从头到尾Action仅仅是充当了Service的控制工具,这些具体的 业务方法是怎样实现的,他根本就不会管,也不会问,他只要知道这些业务实现类所提供的 方法接口就可以了。 而在以往单独使用Struts框架的时候,所有的业务方法类的生命周期, 甚至是一些业务流程都是由Action来控制的。 层与层之间耦合性太紧密了,既降低了数据访 问的效率又使业务逻辑看起来很复杂,代码量也很多。 ,Spring容器控制所有Action对象和 业务逻辑类的生命周期,由与上层不再控制下层的生命周期,层与层之间实现了完全脱耦, 使程序运行起来效率更高,维护起来也方便。 使用Spring的第二个好处(AOP应用): 事务的处理: 在以往的JDBCTemplate中事务提交成功,异常处理都是通过Try/Catch 来完成,而在 Spring中。 Spring容器集成了TransactionTemplate,她封装了所有对事务处理的功能, 包括异常时事务回滚,操作成功时数据提交等复杂业务功能。 这都是由Spring容器来管理, 大大减少了程序员的代码量,也对事务有了很好的管理控制。 Hibernate中也有对事务的管 理,hibernate中事务管理是通过SessionFactory创建和维护Session来完成。 而Spring对 SessionFactory配置也进行了整合,不需要在通过来对 SessionaFactory进行设定。 这样的话就可以很好的利用Sping对事务管理强大功能。 避免 了每次对数据操作都要现获得Session实例来启动事务/提交/回滚事务还有繁琐的 Try/Catch操作。 这些也就是Spring中的AOP(面向切面编程)机制很好的应用。 一方面使 开发业务逻辑更清晰、专业分工更加容易进行。 另一方面就是应用Spirng AOP隔离降低了 程序的耦合性使我们可以在不同的应用中将各个切面结合起来使用大大提高了代码重用度。

struts+hibernate+spring

Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能: 一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。 二自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。 三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。 Spring是一个应用级框架,提供了IoC服务,可以整合不同的外部应用,同时,Spring的AOP提供了很好的面向方面编程,例如,对事务的处理等。 并且,Spring推荐programming to interface方式,所有的IoC服务尽量要求使用面向接口设计。 spring对各种服务提供强有力的支持。 它可以用在很多方面,可以提高代码质量,提高对象的独立性。 对编码和项目以后的扩展hibernate的作用简单的说就是在 数据库的外面包了一件面向对象的外衣 传统的数据库操作都是面向过程的 如 insert delete update 等操作 而在 hibernate 中这些操作都被封装到了对象中,使原本面向过程的数据库操作变成面向 对象编程 ,从而使j2ee的开发一气呵成,不会到数据库操作时又改为面向过程的不便。 所谓数据持久化就是使数据能够永久保存,这个概念就像计算机的内存和硬盘。 持久化就是 要把内存中的数据保存到硬盘上,即使计算机掉电也不会丢失。 这只是持久化达到的一个目的 先前的作法是把这些数据保存到文件中(例如用流写到*中)而现在流行的做法是保存到 数据库中,这样便于管理。

hibernate框架的好处

一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。 Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。 从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。 二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。 三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。 并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是Entity Bean的替代者出现的,让我再列一次我已经列n次的框架结构:传统的架构:1) Session Bean <-> Entity Bean <-> DB为了解决性能障碍的替代架构:2) Session Bean <-> DAO <-> JDBC <-> DB使用Hibernate来提高上面架构的开发效率的架构:3) Session Bean <-> DAO <-> Hibernate <-> DB就上面3个架构来分析:1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。 2、运行效率:如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch语句,调整PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的情况下采用结果集cache等等。 而一般情况下程序员是做不到这一点的。 因此Hibernate架构表现出最快的运行效率。 EB的架构效率会差的很远。 3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。 但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,而EB架构很可能会失败。 4、分布式,安全检查,集群,负载均衡的支持由于有SB做为Facade,3个架构没有区别。 四、EB和Hibernate学习难度在哪里?EB的难度在哪里?不在复杂的XML配置文件上,而在于EB运用稍微不慎,就有严重的性能障碍。 所以难在你需要学习很多EJB设计模式来避开性能问题,需要学习App Server和EB的配置来优化EB的运行效率。 做EB的开发工作,程序员的大部分精力都被放到了EB的性能问题上了,反而没有更多的精力关注本身就主要投入精力去考虑的对象持久层的设计上来。 Hibernate难在哪里?不在Hibernate本身的复杂,实际上Hibernate非常的简单,难在Hibernate太灵活了。 当你用EB来实现持久层的时候,你会发现EB实在是太笨拙了,笨拙到你根本没有什么可以选择的余地,所以你根本就不用花费精力去设计方案,去平衡方案的好坏,去费脑筋考虑选择哪个方案,因为只有唯一的方案摆在你面前,你只能这么做,没得选择。 Hibernate相反,它太灵活了,相同的问题,你至少可以设计出十几种方案来解决,所以特别的犯难,究竟用这个,还是用那个呢?这些方案之间到底有什么区别呢?他们的运行原理有什么不同?运行效率哪个比较好?光是主键生成,就有七八种方案供你选择,你为难不为难?集合属性可以用Set,可以用List,还可以用Bag,到底哪个效率高,你为难不为难?查询可以用iterator,可以用list,哪个好,有什么区别?你为难不为难?复合主键你可以直接在hbm里面配置,也可以自定义CustomerType,哪种比较好些?你为难不为难?对于一个表,你可以选择单一映射一个对象,也可以映射成父子对象,还可以映射成两个1:1的对象,在什么情况下用哪种方案比较好,你为难不为难?这个列表可以一直开列下去,直到你不想再看下去为止。 当你面前摆着无数的眼花缭乱的方案的时候,你会觉得幸福呢?还是悲哀呢?如果你是一个负责的程序员,那么你一定会仔细研究每种方案的区别,每种方案的效率,每种方案的适用场合,你会觉得你已经陷入进去拔不出来了。 如果是用EB,你第一秒种就已经做出了决定,根本没得选择,比如说集合属性,你只能用Collection,如果是Hibernate,你会在Bag,List和Set之间来回犹豫不决,甚至搞不清楚的话,程序都没有办法写。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐