目录:
SSH的整合:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>dynamicDBsource</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
</web-app>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="student_*" class="com.xh.dataSource.action.StuAction" method="{1}">
<result name="addUI">/WEB-INF/view/addUI.jsp</result>
<result name="list">/WEB-INF/view/list.jsp</result>
<result name="add">/WEB-INF/view/list.jsp</result>
<result name="#">index.jsp</result>
</action>
</package>
</struts>
applicatonContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!--自动扫描和装配 -->
<context:component-scan base-package="com.xh.dataSource"></context:component-scan>
<!-- 导入外部的properties文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 指定hibernate的配置文件位置 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<!-- c3p0数据库连接信息 -->
<property name="dataSource" ref="MYdataSource"></property>
</bean>
<bean id="MYdataSource" class="com.xh.dataSource.ds.MyDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="dataSource0" value-ref="dataSource0"/>
<entry key="dataSource1" value-ref="dataSource1"/>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSource1"/>
</bean>
<bean id="dataSource0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:mysql:///db0"></property>
<property name="driverClass" value="com.jdbc.mysql.Driver"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
<bean id="dataSource1" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:mysql:///db1"></property>
<property name="driverClass" value="com.jdbc.mysql.Driver"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
<!-- 配置声明式事务管理(采用注解的方式) -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
</beans>
hibernate.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 1,数据库连接信息 -->
<property name="dialect">
org.hibernate.dialect.MySQL5InnoDBDialect
</property>
<!-- 2,其他配置 -->
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<!-- 3,导入映射文件 -->
<mapping resource="com/xh/dataSource/entity/Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
action
package com.xh.dataSource.action;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.struts2.interceptor.RequestAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.xh.dataSource.ds.DataSourceContextHolder;
import com.xh.dataSource.ds.MyDataSource;
import com.xh.dataSource.entity.Student;
import com.xh.dataSource.service.StuService;
public class StuAction extends ActionSupport implements ModelDriven<Student> ,RequestAware{
/**
*
*/
private static final long serialVersionUID = 1L;
@Resource
StuService stuService;
Map<String, Object> request=new HashMap<>();
List<Student> stus;
public List<Student> getStus() {
return stus;
}
public void setStus(List<Student> stus) {
this.stus = stus;
}
@Resource
Student stu;
public String list()
{
stus=stuService.lsit();
System.out.println("stus:>>"+stus.size());
ActionContext.getContext().put("stusList", stus);
return "list";
}
public String add()
{
System.out.println("ID>>>"+stu.getId()+"NAME>>>"+stu.getName());
stuService.add(stu);
return "add";
}
public String addUI()
{
return "addUI";
}
public String dataSource0() {
DataSourceContextHolder.setDataSourceType("dataSource0");
return "#";
}
public String dataSource1() {
DataSourceContextHolder.setDataSourceType("dataSource1");
return "#";
}
@Override
public Student getModel() {
// TODO Auto-generated method stub
stu=new Student();
return stu;
}
@Override
public void setRequest(Map<String, Object> arg0) {
// TODO Auto-generated method stub
request=arg0;
}
}
service
package com.xh.dataSource.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.xh.dataSource.dao.StuDao;
import com.xh.dataSource.entity.Student;
@Component
public class StuService {
@Resource
StuDao stuDao;
public List<Student> lsit() {
return stuDao.list();
}
public void add(Student stu) {
System.out.println("service---ID>>>"+stu.getId()+"NAME>>>"+stu.getName());
stuDao.add(stu);
}
}
dao
package com.xh.dataSource.dao;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.xh.dataSource.entity.Student;
@Component
public class StuDao {
@Resource
SessionFactory sessionFactory;
@SuppressWarnings("unchecked")
public List<Student> list() {
List<Student> stus=new ArrayList<>();
stus=sessionFactory.openSession().createQuery("FROM Student").list();
return stus;
}
@Transactional
public void add(Student stu) {
System.out.println("dao----ID>>>"+stu.getId()+"NAME>>>"+stu.getName());
sessionFactory.openSession().save(stu);
}
}
entity
package com.xh.dataSource.entity;
import org.springframework.stereotype.Component;
@Component
public class Student {
private Long id;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
*.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-2-3 9:36:30 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.xh.dataSource.entity.Student" table="STUDENT">
<id name="id" >
<column name="ID" default="1" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
</class>
</hibernate-mapping>
数据源切换相关
ds:
package com.xh.dataSource.ds;
public class DataSourceContextHolder {
@SuppressWarnings("rawtypes")
private static final ThreadLocal contextHolder=new ThreadLocal();
@SuppressWarnings("unchecked")
public static void setDataSourceType(String dataSourceName){
contextHolder.set(dataSourceName);
}
public static String getDataSourceName(){
return (String) contextHolder.get();
}
public static void clearDataSourceType(){
contextHolder.remove();
}
}
package com.xh.dataSource.ds;
import java.sql.SQLFeatureNotSupportedException;
import java.util.Map;
import java.util.logging.Logger;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.jdbc.datasource.lookup.DataSourceLookup;
import org.springframework.stereotype.Component;
public class MyDataSource extends AbstractRoutingDataSource{
private Map<String,String> myds;
public Map<String,String> getMyds() {
return myds;
}
public void setMyds(Map<String,String> myds) {
this.myds = myds;
}
@Override
public Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSourceName();
}
@Override
public void setDataSourceLookup(DataSourceLookup dataSourceLookup) {
super.setDataSourceLookup(dataSourceLookup);
}
@Override
public void setDefaultTargetDataSource(Object defaultTargetDataSource) {
super.setDefaultTargetDataSource(defaultTargetDataSource);
}
@Override
public void setTargetDataSources(Map targetDataSources) {
super.setTargetDataSources(targetDataSources);
//重点
super.afterPropertiesSet();
}
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
// TODO Auto-generated method stub
return null;
}
}
前台页面:
index.jap
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="student_addUI">ADDstudents</a>
<br>
<br>
<a href="student_list">LISTstudents</a>
<br>
<br>
<a href="student_dataSource0">dataSource0</a>
<br>
<br>
<a href="student_dataSource1">dataSource1</a>
</body>
</html>
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:iterator value="#stusList">
<tr>
<td>${id}</td>
<td>${name}</td>
<br>
</tr>
</s:iterator>
</body>
</html>
addUI.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<s:form action="student_add" method="post">
<s:textfield name="id" label="学生ID"></s:textfield>
<s:textfield name="name" label="学生姓名"></s:textfield>
<input type="submit" value="提 交"/s>
</s:form>
</body>
</html>