mybatis springmvc

1. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <display-name>Archetype Created Web Application</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:application*.xml</param-value>
        <!--<param-value>/WEB-INF/applicationContext.xml</param-value>-->
        <!--<param-value>classpath:application-context.xml,classpath:application-others.xml</param-value>-->
    </context-param>


    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--<param-value>/WEB-INF/classes/*-servlet.xml</param-value>-->
            <param-value>classpath:*-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

更詳細的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <display-name>Archetype Created Web Application</display-name>


    <!--<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>WEB-INF/classes/log4j.properties</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>-->

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:application*.xml</param-value>
        <!--<param-value>/WEB-INF/applicationContext.xml</param-value>-->
        <!--<param-value>classpath:application-context.xml,classpath:application-others.xml</param-value>-->
    </context-param>


    <!-- 在整合spring容器時使用ContextLoaderListener,它實現了ServletContextListener監聽器接口,ServletContextListener只負責監聽web容器啓動和關閉的事件-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- RequestContextListener實現ServletRequestListener監聽器接口,該監聽器監聽HTTP請求事件,web服務器接收的每一次請求都會通知該監聽器 -->
    <!--
        IntrospectorCleanupListener 在使用Spring本身的時候並不需要使用此監聽器,因爲Spring自己的內部機制會立即清空對應的緩存。雖然,Spring本身不存在這樣的問題,但是如果和其它框架結合使用,而其它框架有這個問題,如Struts、Quartz等,那就需要配置這個監聽器,在銷燬ServletContext的時候清空對應緩存。
    -->
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--<param-value>/WEB-INF/classes/*-servlet.xml</param-value>-->
            <param-value>classpath:*-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

springmvc老版本使用log4j

web.xml中配置

<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>WEB-INF/classes/log4j.properties</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

log4j.properties配置

log4j.rootLogger=warn, stdout

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c{1}-%p %L] - %m%n

#spring jdbc sql
log4j.logger.org.springframework.jdbc.core=debug
#log4j.logger.org.springframework=debug

log4j.logger.org.hibernate=warn

#soms log
#log4j.logger.com.xxx.xxx=debug

#job log
#dailyRollingFile 
#log4j.logger.com.bst.bx.jobs=INFO,joblog
#log4j.additivity.com.bst.bx.jobs=true
#log4j.appender.joblog=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.joblog.File=${catalina.home}/logs/job.log
#log4j.appender.joblog.DatePattern='.'yyyyMMdd
#log4j.appender.joblog.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] [%c{1} %L] - %m%n
#log4j.appender.joblog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c{1}-%p] %l - %m%n

#指定文件數量記錄日誌
log4j.logger.com.bst.bx.jobs=INFO,joblog
log4j.additivity.joblog=false
log4j.appender.joblog=org.apache.log4j.RollingFileAppender
log4j.appender.joblog.File=${catalina.home}/logs/job.log
log4j.appender.joblog.MaxFileSize=20000KB
log4j.appender.joblog.MaxBackupIndex=10
log4j.appender.joblog.layout=org.apache.log4j.PatternLayout
log4j.appender.joblog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] [%c{1} %L] - %m%n

過濾器

springmvc中web.xml使用過濾器

<filter>
		<filter-name>apiLoginFilter</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
		<async-supported>true</async-supported>
	</filter>
	<filter-mapping>
		<filter-name>apiLoginFilter</filter-name>
		<url-pattern>/api/*</url-pattern>
		<dispatcher>ASYNC</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>

apiLoginFilter

2. springmvc.xml

springmvc.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" 
    xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

	<context:component-scan base-package="com.lwp.**.controller" />
	<mvc:annotation-driven>
		 <!-- 註冊默認的內容 -->
		 <mvc:message-converters register-defaults="true">  
 			<bean class="org.springframework.http.converter.StringHttpMessageConverter">  
				<property name="supportedMediaTypes">
					<list>
						<value>text/plain;charset=UTF-8</value>
						<value>text/html;charset=UTF-8</value>
					</list>
				</property> 
			</bean>  
		</mvc:message-converters>  
	</mvc:annotation-driven>

	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="100000000"/>
    </bean>
    
    <!-- 增加validate資源文件用於註解驗證 -->
	<!--<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" >
		 <property name="validationMessageSource" ref="messageSource" />  
	</bean>-->
    
    <!--
    國際化
    useCodeAsDefaultMessage 如果在國際化資源文件中找不到對應代碼的信息,就用這個代碼作爲名稱
    -->
    <!--<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		&lt;!&ndash; <property name="basename" value="classpath:message"/> &ndash;&gt;
		<property name="useCodeAsDefaultMessage" value="true" />
		<property name="basenames">
	      <list>
	        <value>message</value>
	      </list>
	    </property>
	</bean>  -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!--<property name="prefix" value="/WEB-INF/views/"/>-->
        <property name="suffix" value=".jsp"/>
	</bean>
	
</beans>

3. applicationContext.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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/context/spring-aop.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/context/spring-tx.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 啓用掃描 -->
    <context:annotation-config />
    <!-- 容器自動掃描IOC組件  -->
    <context:component-scan base-package="com.lwp, com" />
    <!--支持註解驅動的事務管理,指定事務管理器 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <!-- aspectj支持自動代理實現AOP功能 -->
    <aop:aspectj-autoproxy/>

    <context:property-placeholder location="classpath*:properties/*.properties" />
    <!-- 5.2後標誌刪除 -->
    <!--<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:properties/*.properties</value>
            </list>
        </property>
    </bean>-->

</beans>

4. applicationContext-dao.xml

配置 mybatis相關內容
可以根據官方說明填寫

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <!--1 引入屬性文件,在配置中佔位使用 -->
    <context:property-placeholder location="classpath*:properties/jdbc.properties" />

    <!-- 2. druid 數據庫連接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close">
        <property name="url" value="${mysql.url}" />
        <property name="username" value="${mysql.user}" />
        <property name="password" value="${mysql.password}" />
        <!-- 統計監控過濾器 -->
        <property name="filters" value="stat" />
        <!-- 連接池設置 -->
        <property name="maxActive" value="20" />
        <property name="initialSize" value="1" />
        <property name="maxWait" value="60000" />
        <property name="minIdle" value="1" />

        <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />
        <property name="validationQuery" value="SELECT 'x'" />
        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />

        <property name="poolPreparedStatements" value="true" />
        <property name="maxOpenPreparedStatements" value="20" />

    </bean>

    <!--3 會話工廠bean sqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 數據源 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 別名 -->
        <property name="typeAliasesPackage" value="com.lwp.domain"/>
        <!-- sql映射文件路徑 -->
        <property name="mapperLocations" value="classpath*:mapper/*Mapper.xml"></property>
    </bean>

    <!--4 自動掃描對象關係映射 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定會話工廠,如果當前上下文中只定義了一個則該屬性可省去 -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        <!-- 指定要自動掃描接口的基礎包,實現接口 -->
        <property name="basePackage" value="com.lwp.mapper"></property>
    </bean>

    <!--5 聲明式事務管理 -->
    <!--定義事物管理器,由spring管理事務 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <aop:config>
        <aop:pointcut id="businessService"
                      expression="execution(* com.lwp..service.*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" />
    </aop:config>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!-- the transactional semantics... -->
        <tx:attributes>
            <!-- all methods starting with '*' are read-only -->
            <tx:method name="*" propagation="SUPPORTS" read-only="true" />
            <!-- other methods use the default transaction settings (see below) -->
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />
            <tx:method name="create*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
</beans>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章