hibernate 数据源配置文件
来源: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&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 数据源配置文件相关推荐
- hibernate xml配置文件
Hibernate的描述文件可以是一个properties属性文件,也可以是一个xml文件.下面讲一下Hibernate.cfg.xml的配置.配置格式如下:1.配置数据源 在Hibernate.cf ...
- eclipse 新建 maven 项目 添加 spring hibernate 的配置文件 详情
主要配置文件 pom.xml 项目的maven 配置文件 管理项目所需 jar 依赖支持 web.xml 项目的总 配置文件 :添加 spring和hibernate 支持 applicationC ...
- 彻底搞定用Xdoclet生成Hibernate所有配置文件
背景: 本人在用Xdoclet生成hibernate的配置文件.实体映射文件和sql脚本的时候,每次总要出点问题,今日问题再现,我在网上泡了一个多小时,没有一篇很完整,很成功的例子.一怒之下, ...
- Log4j配置文件位置+Spring数据源配置文件位置
一个.Log4j配置文件位置 1.加载自己主动 当应用程序启动,缺省情况下,这将是src文件夹搜索log4j.xml型材.如果不存在.我们将继续寻找log4j.properties文件,仅仅要找到当中 ...
- 简单的hibernate环境搭建、自动生成model/配置/hibernate.xml配置文件
自己亲测的东西才是最有效果的,下面贴出整个编写的过程. 1 hibernate环境搭建,这个博客非常给力:http://www.111cn.net/wy/js-ajax/93142.htm 需要用到的 ...
- hibernate映射配置文件说明
hibernate映射配置文件中的属性说明 <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC&quo ...
- java spring多数据源配置文件_深入理解spring多数据源配置
项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此.多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源.例如在一个spring和hibernate的框架的 ...
- JAVA框架之Hibernate【配置文件详解】
Hibernate配置文件主要功能是配置数据库连接和Hibernate运行时所需的各种属性,配置文件应该位于JAVA应用或者JAVA Web应用的类文件中,刚开始接触Hibernate的时候,感觉Hi ...
- Hibernate 基本配置文件+基本增删改查
文件结构 maven 依赖 <!-- hibernate 核心依赖 --> <dependency><groupId>org.hibernate</group ...
最新文章
- Python中将数据矢量化运算所带来的时间加快
- windows安装包安装mysql5.7_Windows7 64位压缩包安装MySQL5.7.9
- api网关揭秘--spring cloud gateway源码解析
- 【做题记录】AtCoder AGC做题记录
- 启明云端分享| 乐鑫刚发布的 ESP32-C2与今年五月份量产的ESP32-C3有哪些不同呢?作为两颗升级替代ESP8286的芯片,我们在应用时怎么去选择呢
- P4320-道路相遇,P5058-[ZJOI2004]嗅探器【圆方树,LCA】
- Zigbee如何在智能家居中成为领先的连接技术?
- 推荐一款 IDEA 神器 ,人工智能帮你写代码,再也不用加班了!!
- 进度条(页面刷新)【原创】
- Ubuntu之安装摄像头软件GTK_UVC_Viewer
- mtk x20 android 开发环境配置
- mysql获取某天的开始时间和结束时间
- ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015
- Python上位机与C51单片机串口通信
- 软件项目管理读书体会
- 国密算法(SM2,SM3,SM4)完善与算法辅助工具开发
- 360 私有云平台 MySQL 自动化实现剖析
- Java操作Excel基础--POI之HSSF
- 如何利用嵌入式集成开发工具,让其更好地服务于设计?
- 树莓派 Raspberry Pi 4 来了,价格不变,性能倍增
热门文章
- Apache Ant 的安装
- ajax连接jsp或servlet,获取MySql为数据
- hdu1355The Peanuts
- jquery替换onclick的方法
- 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
- SwiftUI优秀文章经典案例制作简易的新闻列表Demo
- android 输入模糊匹配_Android 模糊搜索rawquery bind or column index out of range:
- Matlab 字符串比较
- fun(n) Java_java程序员的kotlin课(N+2):suspending函数执行编排
- python local_Python3中 对local和nonlocal 关键字的改善认识(新手向)