Loading

spring-mybatis项目搭建(支持多数据源)

一、目录结构图

2、配置文件内容

db.properties:

#oracle public 
oracle.driverClass=oracle.jdbc.driver.OracleDriver
oracle.maxActive=14
oracle.initialSize=1
oracle.maxWait=120
oracle.maxIdle=14
oracle.minIdle=1
oracle.removeAbandoned=true
oracle.removeAbandonedTimeout=180
oracle.timeBetweenEvictionRunsMillis=60000
oracle.minEvictableIdleTimeMillis=1800000
oracle.connectionProperties=bigStringTryClob=true;clientEncoding=UTF-8;defaultRowPrefetch=50;serverEncoding=UTF-8

#oracle DB  注:oracle和mysql只是driverClass不一样,其他配置相同
oracle.jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
oracle.jdbc.username=crh_snp
oracle.jdbc.passpword=cairenhui

freemarker.properties:

#freemarker settings
tag_syntax=auto_detect
template_update_delay=2
default_encoding=UTF-8
output_encoding=UTF-8
locale=zh_CN
date_format=yyyy-MM-dd
time_format=HH:mm:ss
datetime_format=yyyy-MM-dd HH:mm:ss

3、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_3_0.xsd"
    id="WebApp_ID" version="3.0">
    
    <welcome-file-list>
        <welcome-file>page/index.html</welcome-file>
        <welcome-file>page/index.htm</welcome-file>
        <welcome-file>page/index.jsp</welcome-file>
    </welcome-file-list>
    
    <!-- 加载日志配置文件 -->  
    <context-param>
        <param-name>log4jConfigLocation</param-name> 
       <param-value>classpath:/config/log4j.properties</param-value>    
    </context-param>
    <!-- 加载配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:/datasource/dbconfig.xml
        </param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!-- 对客户端请求的静态资源如图片、JS文件等的请求交由默认的servlet进行处理 ,必须写在DispatcherServlet前面,否则会被spring拦截 -->  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.css</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.gif</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.jpg</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.js</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.png</url-pattern>  
    </servlet-mapping> 
    
    <servlet>
        <servlet-name>config</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/config-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    
    <servlet-mapping>  
        <servlet-name>config</servlet-name>  
        <url-pattern>/</url-pattern>  
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>config</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>config</servlet-name>
        <url-pattern>*.img</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>config</servlet-name>
        <url-pattern>*.json</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>config</servlet-name>
        <url-pattern>*.ws</url-pattern>
    </servlet-mapping>
    
    <!-- 统一工程编码过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <error-page>
        <error-code>404</error-code>
        <location>/404.htm</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/500.htm</location>
    </error-page>
</web-app>
View Code

 

4、dbconfig.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:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  
    <!-- 引入db.properties中属性 -->
    <!-- 方式一 :单文件引入-->
    <!-- <bean id="placeholderConfig"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location">  
            <value>classpath:/config/db.properties</value>  
        </property>
    </bean> -->
    <!-- 方式二:多文件引入 -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="order" value="2" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
        <property name="locations">
            <list>
                <value>classpath:config/freemarker.properties</value>
                <value>classpath:config/db.properties</value>
                <!-- 注意路径写法,上面写法要加classpath,路径前不能有/,此下面写法 -->
                <value>/WEB-INF/test.properties</value>
            </list>
        </property>
    </bean>
    <bean id="dataSource" name="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${oracle.driverClass}" />
        <property name="url" value="${oracle.jdbc.url}" />
        <property name="username" value="${oracle.jdbc.username}" />
        <property name="password" value="${oracle.jdbc.passpword}" />
        <!-- 连接池最大使用连接数量 -->
        <property name="maxActive" value="${oracle.maxActive}" />
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${oracle.maxWait}" />
        <property name="poolPreparedStatements" value="true" />
        <property name="defaultAutoCommit" value="true" />
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${oracle.maxIdle}" />
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${oracle.minIdle}" />
        <property name="testOnBorrow" value="true" />
        <property name="testWhileIdle" value="true" />
        <property name="validationQuery" value="select 1 from dual" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${oracle.timeBetweenEvictionRunsMillis}" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${oracle.minEvictableIdleTimeMillis}" />
    </bean>
    
    <!-- 配置mybatis固定的写法 -->    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">    
        <property name="dataSource" ref="dataSource"/>    
        <property name="configLocation">  
            <value>classpath:mybatis/mybatis-sqlmap.xml</value>
        </property>
    </bean>
    
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">    
        <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>    
    </bean>
  
    <!-- 配置事务管理器bean -->  
    <!-- TransactionManager -->  
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource">  
            <ref local="dataSource" />  
        </property>  
    </bean>  
      
    <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">  
        <property name="transactionManager">  
            <ref bean="transactionManager"/>  
        </property>  
    </bean>  
          
    <!-- 事务控制代理抽象定义 -->  
    <bean id="transactionProxy"  
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  
        abstract="true">  
        <!-- 为事务代理bean注入一个事物管理器 -->  
        <property name="transactionManager">  
            <ref bean="transactionManager" />  
        </property>  
        <!-- 定义事务传播属性 -->  
        <property name="transactionAttributes">  
            <props>  
                <prop key="add*">PROPAGATION_REQUIRED</prop>  
                <prop key="release*">PROPAGATION_REQUIRED</prop>  
                <prop key="delete*">PROPAGATION_REQUIRED</prop>  
                <prop key="update*">PROPAGATION_REQUIRED</prop>  
                <prop key="find*">PROPAGATION_REQUIRED</prop>  
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>  
            </props>  
        </property>  
    </bean>  
  
</beans>
View Code

 

5、mybatis-sqlmap.xml配置

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    
    <settings>
      <setting name="cacheEnabled" value="true"/>
      <setting name="lazyLoadingEnabled" value="true"/>
      <setting name="multipleResultSetsEnabled" value="true"/>
      <setting name="useColumnLabel" value="true"/>
      <setting name="useGeneratedKeys" value="false"/>
      <setting name="autoMappingBehavior" value="PARTIAL"/>
      <setting name="defaultExecutorType" value="SIMPLE"/>
      <setting name="defaultStatementTimeout" value="25"/>
      <setting name="safeRowBoundsEnabled" value="false"/>
      <setting name="mapUnderscoreToCamelCase" value="false"/>
      <setting name="localCacheScope" value="SESSION"/>
      <setting name="jdbcTypeForNull" value="OTHER"/>
      <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
  </settings>
  <!-- 此配置是为bean起别名,有此配置后可在sql的xml文件中直接使用别名代替bean的全路径,如:resultType="User",所起别名不区分大小写 -->
  <typeAliases>
      <package name="com.test.model"/>
  </typeAliases>

    <mappers>
        <!-- sql文件配置方式一:指定文件路径位置,sql.xml文件namespace可以直接用dao名称,注意此时sql.xml文件要在resource目录下 -->
        <!-- <mapper resource="mybatis/sqlmap/user/user.xml"/> -->
        <!-- sql文件配置方式二:sql文件和dao接口放在同一个目录下,只需要配置sql.xml文件和接口所在包路径 ,但是sql。xml的namespace要是dao接口的完整路径-->
        <package name="com.test.web.dao"/>
    </mappers>
</configuration>
View Code

 

6、brokerDao.xml文件配置(sql.xml)

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE mapper  
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="com.test.web.dao.broker.BrokerDao">  
    <resultMap type="brokerInfo" id="brokerResultMap">  
        <result property="user_id" column="user_id"/>  
        <result property="organ_flag" column="organ_flag"/>  
        <result property="user_name" column="user_name"/>  
    </resultMap>
    
    <select id="selectBroker" resultMap="brokerResultMap" parameterType="java.lang.String">  
        SELECT * FROM crh_user.brokerinfo WHERE user_id = #{user_id}
    </select>
  
</mapper>
View Code

 

7、java代码

TestController:

@Controller
@RequestMapping("test")
public class TestController {
    
    @Autowired
    TestService testService;
    
    @RequestMapping("print")
    public ModelAndView testController(HttpServletRequest req, HttpServletResponse resp, ModelAndView mav, String testId){
        System.out.println("*****************controller come in******************");
        mav.setViewName("index");
        
        testService.testMethod();
        
        return mav;
    }
    
}
View Code

TestServiceImpl:

@Service
public class TestServiceImpl implements TestService {
    
    @Autowired
    BrokerDao brokerDao;
    
    public void testMethod() {
        System.out.println("***********test service method *******");
        brokerDao.testBroker();
        System.out.println("***********test service end*********");
    }

}
View Code

BrokerDaoImpl:

@Repository
public class BrokerDaoImpl implements BrokerDao {

    @Autowired
    private SqlSessionTemplate sqlSession; 
    
    public void testBroker() {
        String user_id = "100020";
        Brokerinfo broker = (Brokerinfo)sqlSession.selectOne("com.test.web.dao.broker.BrokerDao.selectBroker", user_id);
        System.out.println(broker);
    }
}
View Code

 

posted @ 2017-04-09 21:17  梦醒点灯  阅读(682)  评论(0编辑  收藏  举报