您的位置:首页 > 编程语言 > Java开发

Spring+Hibernate多数据源配置

2016-05-21 00:22 453 查看
数据源1

<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!-- 连接信息 -->
<property name="driverClass"
value="${driverClass}">
</property>
<property name="jdbcUrl"
value="${jdbcUrl}">
</property>
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
</bean>


数据源2

<bean id="dataSourceB"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!-- 连接信息 -->
<property name="driverClass"
value="${driverClass}">
</property>
<property name="jdbcUrl"
value="${jdbcUrl2}">
</property>
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
</bean>
sessionFactory1

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
<!-- SQLServerDialect   MySQLDialect  -->
org.hibernate.dialect.SQLServerDialect
</prop>
<!-- 显示sql语句 -->
<prop key="show_sql">true</prop>
<!-- 自动建表
<prop key="hibernate.hbm2ddl.auto">update</prop>  -->
</props>
</property>
<property name="mappingResources">
<list>
<!-- 用户 -->
<value>com/hhit/entity/User.hbm.xml</value>
<span style="white-space:pre">			</span></list>
</property>
</bean>


sessionFactory2

<bean id="sessionFactory2"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSourceB" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
<!-- SQLServerDialect   MySQLDialect  -->
org.hibernate.dialect.SQLServerDialect
</prop>
<!-- 显示sql语句 -->
<prop key="show_sql">true</prop>
<!-- 自动建表
<prop key="hibernate.hbm2ddl.auto">update</prop>  -->
</props>
</property>
<property name="mappingResources">
<list>
<!-- 考试监控系统-->
<value>com/hhit/entity/TestingControl.hbm.xml</value>
<value>com/hhit/entity/TestRoom.hbm.xml</value>

</list>
</property>
</bean>


DaoSupportImpl

public class DaoSupportImpl<T> implements IDaoSupport<T> {

@Resource
private SessionFactory sessionFactory;

private Class<T> clazz;
public DaoSupportImpl(){
//使用反射得到T的真实类型
//获取new的对象的泛型的父类类型
ParameterizedType pt= (ParameterizedType) this.getClass().getGenericSuperclass();
//获取第一个类型的真实类型
this.clazz=(Class<T>) pt.getActualTypeArguments()[0];
System.out.println("--->clazz"+clazz);
}
/**
* 获取当前Session对象
* protected子类中可以得到
* @return
*/
protected Session getSession(){
//		if(sessionFactory.getCurrentSession()==null)
//			return sessionFactory.openSession();
return sessionFactory.getCurrentSession();
}

@Override
public void save(T entity) {
getSession().save(entity);
}
}


DaoSupportImpl2

public class DaoSupportImpl2<T> implements IDaoSupport<T> {

@Resource(name="sessionFactory2")
private SessionFactory sessionFactory2;

private Class<T> clazz;
public DaoSupportImpl2(){
//使用反射得到T的真实类型
//获取new的对象的泛型的父类类型
ParameterizedType pt= (ParameterizedType) this.getClass().getGenericSuperclass();
//获取第一个类型的真实类型
this.clazz=(Class<T>) pt.getActualTypeArguments()[0];
System.out.println("--->clazz"+clazz);
}
/**
* 获取当前Session对象
* protected子类中可以得到
* @return
*/
protected Session getSession(){
//		if(sessionFactory.getCurrentSession()==null)
//			return sessionFactory.openSession();
return sessionFactory2.getCurrentSession();
}

@Override
public void save(T entity) {
getSession().save(entity);
}
}


这种做法的关键是在basedao,也就是我的DaoSupportImpl中定义的private SessionFactory sessionFactory;和DaoSupportImpl2中定义的private SessionFactory sessionFactory2;用注解让sessionfactory按照名称注入,与spring配置文件中的sessionfactory名称相对应,然后不同数据源的dao继承不同的DaoSupportImpl。当然,其中DaoSupportImpl使用了匿名类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: