[Hibernate开发之路](3)基础配置

最后更新于:2022-04-01 09:59:11

### 一 .JDBC链接 通常你希望SessionFactory来为你创建和缓存(pool)JDBC连接. 如果你采用这种方式, 只需要如下例所示那样,打开一个Session:  ~~~ Session session = sessions.openSession(); // open a new Session ~~~ 一旦你需要进行数据访问时, 就会从连接池(connection pool)获得一个JDBC连接.  为了使这种方式工作起来, 我们需要向Hibernate传递一些JDBC连接的属性. 我们现在将描述JDBC连接配置中最重要的设置.  如果你设置如下属性,Hibernate将使用java.sql.DriverManager来获得(和缓存)JDBC连接 :  Hibernate JDBC属性 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-18_56eba2a4d04cc.jpg) 但Hibernate自带的连接池算法相当不成熟. 它只是为了让你快些上手,并不适合用于产品系统或性能测试中。 出于最佳性能和稳定性考虑你应该使用第三方的连接池。 只需要用特定连接池的设置替换 hibernate.connection.pool_size即可。这将关闭Hibernate自带的连接池. 例如, 你可能会想用C3P0. C3P0是一个随Hibernate一同分发的开源的JDBC连接池, 它位于lib目录下。 如果你设置了hibernate.c3p0.*相关的属性, Hibernate将使用 C3P0ConnectionProvider来缓存JDBC连接. 如果你更原意使用Proxool, 请参考发 行包中的hibernate.properties并到Hibernate网站获取更多的信息.  ###二 .可选的配置属性 有大量属性能用来控制Hibernate在运行期的行为. 它们都是可选的, 并拥有适当的默认值.  Hibernate配置属性  ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-18_56eba2a4e22e9.jpg) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-18_56eba2a5006f6.jpg) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-18_56eba2a5108f9.jpg) ###三 .SQL方言 你应当总是为你的数据库将hibernate.dialect属性设置成正确org.hibernate.dialect.Dialect子类. 如果你指定一种方言, Hibernate将为上面列出的一些属性使用合理的默认值, 为你省去了手工指定它们的功夫. Hibernate SQL方言 (`hibernate.dialect`) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-18_56eba2a520861.jpg) ###四  .XML配置文件 另一个配置方法是在hibernate.cfg.xml文件中指定一套完整的配置. 这个文件可以当成hibernate.properties的替代。 若两个文件同时存在,它将覆盖前者的属性.  XML配置文件被默认是放在CLASSPATH的根目录下. 这是一个例子:  ~~~ <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!-- 以/jndi/name绑定到JNDI的SessionFactory实例 --> <session-factory name="java:hibernate/SessionFactory"> <!-- 属性 --> <property name="connection.datasource">java:/comp/env/jdbc/MyDB</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">false</property> <property name="transaction.factory_class"> org.hibernate.transaction.JTATransactionFactory </property> <property name="jta.UserTransaction">java:comp/UserTransaction</property> <!-- 映射定义文件 --> <mapping resource="org/hibernate/auction/Item.hbm.xml"/> <mapping resource="org/hibernate/auction/Bid.hbm.xml"/> <!-- 缓存设置 --> <class-cache class="org.hibernate.auction.Item" usage="read-write"/> <class-cache class="org.hibernate.auction.Bid" usage="read-only"/> <collection-cache collection="org.hibernate.auction.Item.bids" usage="read-write"/> </session-factory> </hibernate-configuration> ~~~ 如你所见, 这个方法优势在于,在配置文件中指出了映射定义文件的名字. 一旦你需要调整Hibernate的缓存, hibernate.cfg.xml也是更方便. 注意,使用hibernate.properties还是 hibernate.cfg.xml完全是由你来决定, 除了上面提到的XML语法的优势之外, 两者是等价的.  使用XML配置,使得启动Hibernate变的异常简单, 如下所示,一行代码就可以搞定: ~~~ SessionFactory sf = new Configuration().configure().buildSessionFactory(); ~~~ 你可以使用如下代码来添加一个不同的XML配置文件  ~~~ SessionFactory sf = new Configuration() .configure("catdb.cfg.xml") .buildSessionFactory(); ~~~
';