首页 > 代码库 > Hibernate-----4、Hibernate配置文件

Hibernate-----4、Hibernate配置文件

一、创建Configuration对象

         Configuration实例的唯一作用是创建SessionFactory实例;若映射定义文件在类加载路径中,则可用addResource()方法来添加映射定义文件

 

         3种配置Hibernate方式:

         使用hibernate.properties作为配置文件(\project\etc\hibernate.properties

Configuration cfg = new Configuration();
// 多次调用addResource方法,添加映射文件
cfg.addResource(“Item.hbm.xml”);
cfg.addResource(“Bid.hbm.xml”);

因为映射文件和持久化类往往是一一对应的,可通过向Configuration对象添加持久化类让Hibernate自己搜索映射文件(在这种方式下,所有的映射文件应放在持久化类文件相同的包路径下)

Configuration cfg = new Configuration();
// 多次调用addClass方法,直接添加持久化类
cog.addClass(“lee.Item.class”);
cog.addClass(“lee.Bid.class”);

         使用hibernate.cfg.xml作为配置文件(\project\etc\hibernate.cfg.xml

Configuration cfg = new Configuration();
// 加载hibernate.cfg.xml
cfg.configure();

         不使用配置文件直接创建Configuration实例

         Configuration对象提供了如下三个方法:

         Configuration addResource(String resourceName):为Configuration对象添加一个映射文件

         Configuration setProperties(Properties properties):为Configuration对象设置一系列属性,这系列属性通过Propertiest实例传入

         Configuration setProperty(String propertyName,String value):为Configuration对象设置一个单独的属性

 

public class NewsManager{
     public static void main(String[] args) throws Exception{
     Configuration conf = new Configuration()
     .addClass(org.app.News.class)
     .setProperty(“hibernate.connection.url”,”jdbc:mysql://localhost/hibernate”)
     .setProperty(“hibernate.connection.username”,”root”)
     .setProperty(“hibernate.connection.password”,”123”)
     .setProperty(“hibernate.connection.c3p0.max_size”,”20”)
     .setProperty(“hibernate.connection.c3p0.min_size”,”1”)
     .setProperty(“hibernate.connection.c3p0.timeout”,”5000”)
     .setProperty(“hibernate.connection.c3p0.max_statements”,”100”)
     .setProperty(“hibernate.connection.c3p0.idle_test_period”,”3000”)
     .setProperty(“hibernate.connection.c3p0.acquire_increment”,”2”)
     .setProperty(“hibernate.connection.c3p0.validate”,”true”)
     .setProperty(“hibernate.connection.dialect”,”org.hibernate.dialect.MySQLInnoDBDialect”)
     .setProperty(“hibernate.hbm2ddl.auto”,”create”);
 
             SessionFactory sf = conf.buildSessionFactory();
             Session sess = sf.openSession();
             Transaction tx = sess.beginTransaction();
             News n = new News();
             n.setTitle(“title”);
             n.setContent(“content”);
             sess.save(n);
             ct.commit();
             sess.close();
     }
}


二、JDBC连接属性

         所有Hibernate属性的名字和语义都在org.hibernate.cfg.Environment中定义

<!—连接数据库-->
<!—设置连接数据库的驱动 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!—设置所需连接数据库服务的URL -->
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<!—连接数据库的用户名 -->
<property name="connection.username">system</property>
<!—连接数据库的密码 -->
<property name="connection.password">123</property>

<!— 使用C3PO连接池 -->
<!—连接池的最大连接数 -->
 <property name="hibernate.c3po.max_size">20</property>
<!—连接池的最小连接数 -->
<property name="hibernate.c3po.min_size">1</property>
<!—连接池中连接的超时时长 -->
<property name=" hibernate.c3po.timeout ">5000</property>
      
<!--连接池最大缓存多少个Statement对象-->
<property name=" hibernate.c3po.max_statements ">100</property>
<property name=" hibernate.c3po.idle_test_period ">3000</property>
<property name=" hibernate.c3po.acquire_increment ">2</property>
<property name=" hibernate.c3po.validate ">true</property>


三、数据库方言

        告诉Hibernate应用程序的底层即将使用哪种数据库

        <propertyname="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

        

        DB2                                            org.hibernate.dialect.DB2Dialect

        DB2 AS/400                              org.hibernate.dialect.DB2400Dialect

        DB2 OS3090                             org.hibernate.dialect.DB2390Dialect

        PostgreSQL                               org.hibernate.dialect.PostgreSQLDialect

        MySQL                                        org.hibernate.dialect.MySQLDialect

        MySQL with InnoDB                 org.hibernate.dialect.MySQLInnoDBDialect

        MySQL with MyISAM                org.hibernate.dialect.MySQLMyISAMDialect

        Oracle(any version)                  org.hibernate.dialect.OracleDialect

        Oracle 9i                                      org.hibernate.dialect.Oracle9iDialect

        Oracle 10g                                   org.hibernate.dialect.Oracle10gDialect

        Sybase                                         org.hibernate.dialect.SybaseDialect

        Sybase Anywhere                      org.hibernate.dialect.SybaseAnywhereDialect

        Mircriosoft SQL Server               org.hibernate.dialect.SQLServerDialect

        SAP DB                                         org.hibernate.dialect.SAPDBDialect

        Informix                                          org.hibernate.dialect.InformixDialect

        HypersonicSQL                            org.hibernate.dialect.HSQLDialect

        Ingres                                             org.hibernate.dialect.IngresDialect

         Progress                                   org.hibernate.dialect.PregressDialect

         Mckoi SQL                                org.hibernate.dialect.MckoiDialect

         Interbase                                   org.hibernate.dialect.InterbaseDialect

        Pointbase                                    org.hibernate.dialect.PointbaseDialect

         FrontBase                                 org.hibernate.dialect.FrontbaseDialect

         Firebird                                       org.hibernate.dialect.FirebirdDialect

   

四、JNDI数据源的链接属性

         若无须Hibernate自己管理数据源,而是直接访问容器管理数据源,Hibernate可使用JNDI(JavaNaming Diretory Interface,Java命名目录接口)数据源的相关配置;

         下面是连接JNDI数据源的主要配置属性:

hibernate.connection.datasource:指定数据源JNDI名字
hibernate.jndi.url:指定JNDI提供者的URL(可选),若JNDI与Hibernate持久化访问的代码处于用一个应用中,则无须指定该属性
hibernate.jndi.class:指定JNDI InitialContextFactory的实现类(可选), 若JNDI与Hibernate持久化访问的代码处于用一个应用中,则无须指定该属性
hibernate.connection.username:指定连接数据库的用户名(可选)
hibernate.connection.password:指定连接数据库的密码(可选)

         配置Hibernate;连接Tomcat中数据源的配置片段:

<property name=”connection.datasource”>java:comp/env/jdbc/dstest</property>
<property name=”dialect”>org.hibernate.dialect.MySQLDialect</property>
   

五、Hibernate事物属性

         Hibenate不仅提供了局部事物支持,也允许使用容器管理的全局事物


         hibernate.transaction.factory_class:指定Hibernate所用的事物工厂的类型(属性值必须是TransactionFactory的直接或间接子类)

         jta.UserTransaction:属性值是一个JNDI名。Hibernate将使用JTATransactionFactory从应用服务器获取JTA UserTransaction

         hibernate.transaction.manager_lookup_class:属性值应为一个TransactionManagerLookup类名,当使用JVM级别的缓存时,或在JTA环境中使用hilo生成器策略时,需该类

         hibernate.transaction.flush_before_completion:指定Session是否在事物完成后自动将数据刷新到底层数据库

         hibernate.transaction.auto_close_session:指定是否在事物结束后自动关闭Session

         

六、二级缓存相关属性

         Hibernate的SessionFactory可持有一个可选的二级缓存,通过使用这种二级缓存可提高Hibernate的持久化访问的性能


         hibernate.cache.provider_class:设置二级缓存CacheProvider的类名

         hibernate.cache.use_minimal_puts:以频繁的读操作为代价,优化二级缓存以实现最小化写操作;该设置对集群缓存非常有用,对集群缓存的实现默认开启

         hibernate.cache.use_query_cache:设置是否允许查询缓存;个别查询仍然需显示设置为可缓存的

         hibernate.cache.use_second_level_cache:用于设置是否启用二级缓存;该属性可完全禁止使用二级缓存;对那些在映射文件中指定了<cache…/>的持久化类,则默认开启二级缓存

         hibernate.cache.query_cache_factory:设置查询缓存工厂的类名(默认StandardQueryCache),查询缓存工厂必须实现QueryCache接口;

         hibernate.cache.region_prefix:设置二级缓存区名称的前缀

         hibernate.cache.use_structured_entries:设置是否强制Hibernate以可读性更好的格式将数据存入二级缓存

              

七、外连接抓取属性

         外连接抓取能限制SQL语句的次数来提高效率,这种外连接抓取通过在单个select语句中使用outer join来一次抓取多个数据表的数据

         外连接抓取允许在单个select语句中,通过<many-to-one…/>、<one-to-many…/>、<many-to-many…/>和<one-to-one…/>等关联获取连接对象的整个对象图

         将hibernate.max.fetch_depth设为0,将在全局范围内禁止外连接抓取,设为1或更高值能启用N-1或1-1的外连接抓取;除此之外,还应在映射文件中通过fetch=”join”来指定这种外连接抓取

         

八、其他常用配置属性

         hibernate.show_sql:是否在控制台输出Hibernate生成的SQL语句(true、false)

         hibernate.format_sql:是否将SQL语句转成格式良好的SQL(true、false)

         hibernate.use_sql_comments:是否在Hibernate生成的SQL语句中添加有助于调试的注释(true、false)

         hibernate.jdbc.fetch.size:指定JDBC抓取数量的大小(整数),其实质是调用Statement.setFetcheSize()方法

         hibernate.jdbc.batch.size:指定Hibernate使用JDBC2的批量更新的大小(整数),建议取5-30

         hibernate.connection.autocommit:设置是否自动提交(通常不建议打开)

         hibernate.hbm2ddl.auto:设置当创建SessionFactory时,是否根据映射文件自动建立数据库表,create-drop:显示关闭SessionFactory时,将Drop刚建的数据表;(update、create、create-drop)



          

Hibernate-----4、Hibernate配置文件