hibernate 数据源配置文件

/**

*数据源(mysql、sqlserver、oracle)+数据源信息配置(jndi、properties、xml)+数据源信息读取(jdbc、spring、hibernate)
*本文件总结了mysql,sqlserver,oracle三种数据源的连接方式
*其中包括Spring、Hibernate的连接方式
*并通过属性文件、JNDI、配置文件三种方式进行连接
*/

1.通过属性文件 读取数据源配置

--jdbc.properties
1)mysql
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncodeing=utf-8
jdbc.username=root
jdbc.password=123456

2)sqlserver
jdbc.driverClassName=net.sourceforge.jtds.jdbc.Driver
jdbc.url=jdbc:jtds:sqlserver://localhost:1433/test
jdbc.username=sa
jdbc.password=sa

3)oracle
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:orcale:thin://localhost:1521/nquser
jdbc.username=wapcms
jdbc.password=wapcms

--Spring-applicationContext-data.xml

            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                    value="${jdbc.driverClassName}" />
       
       
       
   

            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       
           
                classpath:jdbc.properties
           

       

   

   
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       
   

   
   

2.用JNDI 读取数据源server.xml
标签元素下填加
1)mysql
    driverClassName="com.mysql.jdbc.Driver"
    password="123456"
    maxIdle="30"
    maxWait="10000"
    username="root"
    url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gb2312
    maxActive="100" />
2)orcale
    driverClassName="oracle.jdbc.driver.OracleDriver"
    password="123456"
    maxIdle="30"
    maxWait="10000"
    username="root"
    url="jdbc:oracle:thin:@localhost:1521:nquser"
    maxActive="100"
    removeAbandoned="true"
    removeAbandonedTimeout="300"
    logAbandoned="true"/>
3)sqlserver
    driverClassName="net.sourceforge.jtds.jdbc.Driver"
    password="sa"
    maxIdle="30"
    maxWait="10000"
    username="sa"
    url="jdbc:jtds:sqlserver://localhost:1433/test"
    maxActive="100"
    removeAbandoned="true"
    removeAbandonedTimeout="300"
    logAbandoned="true"/>


            debug="0" reloadable="true" privileged="true" crossContext="true"
        useNaming="true">
       
       
   



--web.xml

    DB Connection
    jdbc/wapcms
    javax.sql.DataSource
    Container


--Spring-application-data.xml

   
        java:comp/env/jdbc/wapcms
   




   

3.用配置文件 读取数据源信息
---hibernate.cfg.xml

   
       
        oracle.jdbc.driver.OracleDriver
        jdbc:oracle:thin:@localhost:1521:ora
        koooso
        koooso

       
        5

       

       jta


       
        true

       
        org.hibernate.dialect.Oracle9Dialect

       
        create

       

   






 
---sqlserver Spring
   class="org.apache.commons.dbcp.BasicDataSource">
       value="net.sourceforge.jtds.jdbc.Driver">
  

       value="jdbc:jtds:sqlserver://localhost:1433/test">
  

  
  



   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  
   
  

  
   
    
      org.hibernate.dialect.SQLServerDialect
    

     true
   

  

  
   
     com/wuwei/struts/dao/User.hbm.xml
   

  





4.多种数据源配置




   class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  
  
  
  
  
  
  
  




   
        java:comp/env/jdbc/wapcms
   




   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  
   
  

  
   
     org.hibernate.dialect.MySQLDialect
     true
   

  

  
   
    com/brady/exam/model/Grade.hbm.xml
    com/brady/exam/model/Paper.hbm.xml
    com/brady/exam/model/Test.hbm.xml
    com/brady/exam/model/Subject.hbm.xml
   

  





   class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  
   
  




  
   
   
   
   
   
   
   
   
   
  




       expression="execution(* com.brady.exam.dao.*.*(..))"/>
  





  
   
  




  
   
  



 

1、关于数据源

在resin中通过jndi配置的名称为jdbc/dbp,并且这个名称是固定死的(我自己配置的时候配置成jdbc/webcl,所以一直连不上),为 什么这个名字是死的呢,是因为原来写数据库连接池的时候,这个连接名称是在程序中写死的。在 vschool.pubbean.ConnectionProxy中createConnection()方法中有

if( pool == null )
      {
       Context env = new InitialContext();
          pool = (DataSource) env.lookup("java:comp/env/jdbc/dbp");//此处名字写死了
          if (pool == null)
                 throw new SQLException("unknown DataSource");
         }
         return pool.getConnection(); 

不过在一个项目中数据源是死的,所以这里这样写是合理的。那么这个连接池在什么地方用到了呢。在index.jsp中,刚访问页面时第一句话 theSystem.setConnection(con); theSystem.load();这个load方法应该是读取系统状态的信息,这些信息存在于T_SystemState表中。这里就会发现需要连接数 据库了,那么肯定就得用连接池了。果然第一句话就是ConnectionProxy.getConnection()。通过自己写的连接池方法来获得连 接,这个连接如果有就取出来,如果没有就通过上面的方法创建,这个时候就用到了数据源了。

所以可以看到webcl数据源的配置完全因为以前使用自己写的连接池来调用数据库,而设置。跟以后用到的hibernate没有关系(当然可以设置成有关系)。

2、关于hibernate配置

hibernate的数据连接池有四种方法

第一。通过默认的数据连接池你只需要在hibernate默认配置文件中配置dialect,driver_class,url,username,password,show_sql这类属性就可以了,默认提供一个连接池,但是这个连接池据说非常的烂。所以不推荐使用。

第二、使用配置文件指定 数据库连接池。

hibernate默认支持三种连接池产品:C3P0,Proxool,DBCP,以C3P0为列的配置如下

第一中的配置加上,然后再加上c3po.min_size,max_size,timeout,max_statements,idle_test_period等连接池的属性。hibernate就会根据这个连接池来获得数据库链接。

第三、从容器中获得数据源

例如tomcat中在tomcat的context中配置数据源,然后在hibernate的配置文件中加上 dialect,connection.datasource,show_sql属性,其中最关键的就是connection.datasource这个 路径是jndi名称。这里无需配置数据库连接的用户名密码之类。

第四、通过java程序提供数据库连接。

在使用hibernate之前,先调用SessionFactory.openSession()获得session后,通过session来操作数据 库。问题是怎么创建session,这可以重载SessionFactory的两个方法 openSession(),openSession(Connection conn)第一种方法使用提供的数据库连接池来获得数据库连接,第二种则程序来实现获得数据库连接可以是直接的通过DriveManager获得,也可以 通过访问数据源来获得,

所以看到hibernate的与数据源的关系完全是看自己怎么设计了。还有值得提的是webcl之前每一次执行数据库操作之前,都需要对 hibernate的配置属性进行初始化一次,这个初始化不仅将属性读进去,还初始化了SessionFactory等hibernate必须的初始化, 后来师兄想到了方法就是将这个初始化工作放在了启动容器中,对,就是放在web.xml中的过滤里面。但是这提醒了一点,在使用 SessionFactory之前,必须要初始化的。

还有为什么hibernate的配置文件是hibernate.cfg.xml呢,大家应该也都知道是默认配置,那么可不可以是别的文件名呢,答案是可以 的。在上面提到的initialize方法中(在net.vschool.hibernate.base._BaseRootDAO这个应该是 hibernate自动生成的)有initialize (),也有initialize (String configFileName)第一个就是使用默认的hibernate配置文件(hibernate.properties或者 hibernate.cfg.xml),第二个方法就可以传入自定义的hibernate的配置文件路径。

你可能感兴趣的:(java学习,hibernate,sqlserver,数据库连接池,jdbc,class,bean)