来源:http://blog.csdn.net/happyangelling/archive/2010/09/06/5866981.aspx

/**

*数据源(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 
<beans>
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"
            value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
        </property>
    </bean>
    <!-- 设定transactionManager -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <tx:annotation-driven/>
</beans>

2.用JNDI 读取数据源server.xml 
在<GlobalNamingResources>标签元素下填加
1)mysql 
<Resource name="jdbc/mysqlonline" type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    password="123456"
    maxIdle="30"
    maxWait="10000" 
    username="root"
    url="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=gb2312
    maxActive="100" />
2)orcale 
<Resource name="jdbc/wapcms"  type="javax.sql.DataSource"
    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 
<Resource name="jdbc/user"  type="javax.sql.DataSource"
    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"/>

在<Host>下
    <Context path="" docBase="E:/WAP/WAP_CMS/WebContent"
        debug="0" reloadable="true" privileged="true" crossContext="true"
        useNaming="true">
        <ResourceLink name="jdbc/wapcms" global="jdbc/wapcms" type="javax.sql.DataSource" />
        <ResourceLink name="jdbc/mysqlonline" global="jdbc/mysqlonline" type="javax.sql.DataSource" />
    </Context>
</Host>

--web.xml 
<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/wapcms</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

--Spring-application-data.xml 
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:comp/env/jdbc/wapcms</value>
    </property>
</bean>
<!-- 设定transactionManager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

3.用配置文件 读取数据源信息
---hibernate.cfg.xml 
<hibernate-configuration>
    <session-factory>
        <!-- Database connection settings -->
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:ora</property>
        <property name="connection.username">koooso</property>
        <property name="connection.password">koooso</property>

<!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">5</property>

<!-- 注意如果是运行在application中时,必须要有current_session_context_class这个属性,且值为

thread。如果是运行在WEB服务器中则需要将值设置成jta。否则在运行时会报Exception

in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured! 这个异常-->

<property name="current_session_context_class">jta</property>

<!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

<!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>

<!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property>

<mapping resource="com/chinamworld/hibernate/tf/MyTest.hbm.xml"/>

</session-factory>

</hibernate-configuration>

---sqlserver Spring 
<bean id="dataSource"
   class="org.apache.commons.dbcp.BasicDataSource">
   <property name="driverClassName"
    value="net.sourceforge.jtds.jdbc.Driver">
   </property>
   <property name="url"
    value="jdbc:jtds:sqlserver://localhost:1433/test">
   </property>
   <property name="username" value="sa"></property>
   <property name="password" value="admin"></property>
</bean>

<!-- 将Hibernate交由Spring管理(Hibernate相关配置信息) ,创建SessionFactory-->
<bean id="sessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="dataSource">
    <ref bean="dataSource" />
   </property>
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">
      org.hibernate.dialect.SQLServerDialect
     </prop>
     <prop key="hibernate.show_sql">true</prop>
    </props>
   </property>
   <property name="mappingResources">
    <list>
     <value>com/wuwei/struts/dao/User.hbm.xml</value>
    </list>
   </property>
</bean>

4.多种数据源配置 
<!-- DBCP data source -->
<!-- 
<bean id="dataSource"
   class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
   <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
   <property name="defaultAutoCommit" value="false"></property>
   <property name="maxActive" value="50"></property>
   <property name="url" value="jdbc:mysql://localhost:3306/exam"></property>
   <property name="username" value="root"></property>
   <property name="password" value=""></property>
   <property name="password" value="true"></property>
   <property name="password" value="true"></property>
   <property name="password" value="180"></property>
</bean>
   -->

<!-- C3P0 data source -->
<bean id="dataSource"
   class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
   <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
   <property name="autoCommitOnClose" value="false"></property>
   <property name="maxIdleTime" value="1800"></property> <!-- 最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃 -->
   <property name="maxPoolSize" value="50"></property>
   <property name="initialPoolSize" value="5"></property>
   <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/exam"></property>
   <property name="user" value="root"></property>
   <property name="password" value=""></property>
</bean>

<!-- JNDI data source -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:comp/env/jdbc/wapcms</value>
    </property>
</bean>

<!-- Hibernate sessionFactory -->
<bean id="sessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="dataSource">
    <ref bean="dataSource" />
   </property>
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
     <prop key="hibernate.show_sql">true</prop>
    </props>
   </property>
   <property name="mappingResources">
    <list>
    <value>com/brady/exam/model/Grade.hbm.xml</value>
    <value>com/brady/exam/model/Paper.hbm.xml</value>
    <value>com/brady/exam/model/Test.hbm.xml</value>
    <value>com/brady/exam/model/Subject.hbm.xml</value>
    </list>
   </property>
</bean>

<!-- Tranasction Manager -->

<bean id="transactionManager"
   class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory">
    <ref bean="sessionFactory" />
   </property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
   <tx:attributes>
    <tx:method name="insert*" propagation="REQUIRED"/>
    <tx:method name="edit*" propagation="REQUIRED"/>
    <tx:method name="save*" propagation="REQUIRED"/>
    <tx:method name="update*" propagation="REQUIRED"/>
    <tx:method name="merge*" propagation="REQUIRED"/>
    <tx:method name="remove*" propagation="REQUIRED"/>
    <tx:method name="delete*" propagation="REQUIRED"/>
    <tx:method name="find*" read-only="true"/> 
    <tx:method name="get*" read-only="true"/> 
   </tx:attributes>
</tx:advice>

<aop:config>
   <aop:pointcut id="daoPointcut"
    expression="execution(* com.brady.exam.dao.*.*(..))"/>
   <aop:advisor advice-ref="txAdvice" pointcut-ref="daoPointcut"/>
</aop:config>

<!-- End Tranasction Manager -->

<bean id="userDAO" class="com.brady.exam.dao.impl.hibernate.UserDAO">
   <property name="sessionFactory">
    <ref bean="sessionFactory" />
   </property>
</bean>

<bean id="basicDAO" class="com.brady.exam.dao.impl.hibernate.BasicDAO">
   <property name="sessionFactory">
    <ref bean="sessionFactory" />
   </property>
</bean>

</beans>

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的配置文件路径。

hibernate 数据源配置文件相关推荐

  1. hibernate xml配置文件

    Hibernate的描述文件可以是一个properties属性文件,也可以是一个xml文件.下面讲一下Hibernate.cfg.xml的配置.配置格式如下:1.配置数据源 在Hibernate.cf ...

  2. eclipse 新建 maven 项目 添加 spring hibernate 的配置文件 详情

    主要配置文件 pom.xml 项目的maven 配置文件 管理项目所需 jar 依赖支持 web.xml 项目的总 配置文件  :添加 spring和hibernate 支持 applicationC ...

  3. 彻底搞定用Xdoclet生成Hibernate所有配置文件

    背景:     本人在用Xdoclet生成hibernate的配置文件.实体映射文件和sql脚本的时候,每次总要出点问题,今日问题再现,我在网上泡了一个多小时,没有一篇很完整,很成功的例子.一怒之下, ...

  4. Log4j配置文件位置+Spring数据源配置文件位置

    一个.Log4j配置文件位置 1.加载自己主动 当应用程序启动,缺省情况下,这将是src文件夹搜索log4j.xml型材.如果不存在.我们将继续寻找log4j.properties文件,仅仅要找到当中 ...

  5. 简单的hibernate环境搭建、自动生成model/配置/hibernate.xml配置文件

    自己亲测的东西才是最有效果的,下面贴出整个编写的过程. 1 hibernate环境搭建,这个博客非常给力:http://www.111cn.net/wy/js-ajax/93142.htm 需要用到的 ...

  6. hibernate映射配置文件说明

    hibernate映射配置文件中的属性说明 <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC&quo ...

  7. java spring多数据源配置文件_深入理解spring多数据源配置

    项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此.多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源.例如在一个spring和hibernate的框架的 ...

  8. JAVA框架之Hibernate【配置文件详解】

    Hibernate配置文件主要功能是配置数据库连接和Hibernate运行时所需的各种属性,配置文件应该位于JAVA应用或者JAVA Web应用的类文件中,刚开始接触Hibernate的时候,感觉Hi ...

  9. Hibernate 基本配置文件+基本增删改查

    文件结构 maven 依赖 <!-- hibernate 核心依赖 --> <dependency><groupId>org.hibernate</group ...

最新文章

  1. Python中将数据矢量化运算所带来的时间加快
  2. windows安装包安装mysql5.7_Windows7 64位压缩包安装MySQL5.7.9
  3. api网关揭秘--spring cloud gateway源码解析
  4. 【做题记录】AtCoder AGC做题记录
  5. 启明云端分享| 乐鑫刚发布的 ESP32-C2与今年五月份量产的ESP32-C3有哪些不同呢?作为两颗升级替代ESP8286的芯片,我们在应用时怎么去选择呢
  6. P4320-道路相遇,P5058-[ZJOI2004]嗅探器【圆方树,LCA】
  7. Zigbee如何在智能家居中成为领先的连接技术?
  8. 推荐一款 IDEA 神器 ,人工智能帮你写代码,再也不用加班了!!
  9. 进度条(页面刷新)【原创】
  10. Ubuntu之安装摄像头软件GTK_UVC_Viewer
  11. mtk x20 android 开发环境配置
  12. mysql获取某天的开始时间和结束时间
  13. ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015
  14. Python上位机与C51单片机串口通信
  15. 软件项目管理读书体会
  16. 国密算法(SM2,SM3,SM4)完善与算法辅助工具开发
  17. 360 私有云平台 MySQL 自动化实现剖析
  18. Java操作Excel基础--POI之HSSF
  19. 如何利用嵌入式集成开发工具,让其更好地服务于设计?
  20. 树莓派 Raspberry Pi 4 来了,价格不变,性能倍增

热门文章

  1. Apache Ant 的安装
  2. ajax连接jsp或servlet,获取MySql为数据
  3. hdu1355The Peanuts
  4. jquery替换onclick的方法
  5. 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
  6. SwiftUI优秀文章经典案例制作简易的新闻列表Demo
  7. android 输入模糊匹配_Android 模糊搜索rawquery bind or column index out of range:
  8. Matlab 字符串比较
  9. fun(n) Java_java程序员的kotlin课(N+2):suspending函数执行编排
  10. python local_Python3中 对local和nonlocal 关键字的改善认识(新手向)