SSH架构操作多数据库
注意事项
建议:不要多个系统同时对一个数据库进行增删改操作,但是可以有多个系统同时查询同一个数据库。
原理分析
绝大多数情况下,我们使用SSH(Struts+spring+hibernate)架构只需要操作一个数据库,操作数据库原理为:
在spring的配置文件中,配置一个数据源DataSource,数据源中配置一个数据库连接池;
在spring的配置文件中,配置一个会话工厂SessionFactory,再将数据源DataSource关联到会话工厂sessionFactory上;
在持久层(Dao层),使用spring注入SessionFactory对象,使用SessionFactory创建Session,在进行数据库操作。
其中,Spring中DataSource和sessionFactory的配置如下:
<!-- 数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl"value="jdbc:mysql:///**数据库名称**?characterEncoding=utf8" />
<property name="user" value="A_username" />
<property name="password" value="A_password"/>
</bean>
<!-- 配置SessionFactory(与Hibernate整合) -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 指定Hibernate配置文件路径 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<!-- 指定数据库连接池 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
由上述所说,我们可以简单的表示为:
这是spring提供的操作单个数据库的方法,spring同时还提供了操作多数据库的方式(此处以两个数据库为例),其原理为:
此处我引入一个动态数据源的概念,其实就是动态的切换数据源,先看一下动态数据源的用法,其实原理也就不言而喻了。
<!-- A数据源 -->
<bean id="dataSourceA" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<prope