為了賬號安全,請及時綁定郵箱和手機立即綁定

SpringMVC+mybatis配置詳解

2016.02.05 22:07 10164瀏覽

SpringMVC+Mybatis快速入門
一、SSM整合配置詳解
為了方便起見,我們將所有的SSM整合xml配置文件及properties屬性文件統一存放在/WEB-INF/目錄下,并在src源文件中定義com.XXX.controller,com.XXX.service,com.XXX.mapper,com.XXX.po四個包,分別存放controller類,service類,mapper接口及mapper.xml配置文件,和自定義的pojo類。本文中所有的XXX均表示用戶自定義的名稱。
除*properties配置文件外,SSM整合的配置文件大概可分為三個:web.xml, applicationContext.xml和SpringMVC-servlet.xml。其中applicationContext.xml主要負責配置mybatis與Spring整合的部分;SpringMVC-servlet.xml主要負責Spring MVC的相關配置;而web.xml主要用于加載前端控制器,加載配置文件及設置編碼過濾器。
在編寫配置文件之前,我們需要先引入SSM整合及其相關的所有jar包(包括數據庫連接驅動包,日志加載包)。
(一)web.xml(部署描述符文件)詳解
1.文件頭與尾
<?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" version="2.5">
:
:
:
</web-app>
2.加載及監聽日志信息
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
這里使用Log4jConfigListener監聽器,就可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是classpath;寫文件路徑時也不用寫絕對路徑了.
Log4j.properties文件內容如下:

定義log輸出級別,在開發環境下日志級別要設置成DEBUG,生產環境下可以設成INFO或ERROR

log4j.rootLogger=DUBUG,Console,File

定義輸出目的地為控制臺

log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out

可以靈活地指定日志的輸出格式

log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n

文件大小到指定尺寸的時候產生一個新的文件

log4j.appender.File = org.apache.log4j.RollingFileAppender

指定輸出目錄

log4j.appender.File.File = logs/ssm.log

定義文件最大大小

log4j.appender.File.MaxFileSize = 10MB

輸出所有DEBUG以上級別的日志

log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
也可以簡化成:
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.加載applicationContext.xml文件
applicationContext.xml文件中主要配置了Spring+mybatis整合的相關信息
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/*Context.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
ContextLoaderListener是在我們的web容器啟動的時候啟動的,默認會加載/WEB-INF/下面的applicationContext.xml文件。并創建一個WebApplicationContext容器。
4.配置前端控制器(加載SpringMVC-servlet.xml文件)
SpringMVC-servlet.xml配置文件中主要包含對SpringMVC的相關配置信息
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>.action</url-pattern>
</servlet-mapping>
on-startup元素是可選的,如果它存在,則它將在應用程序啟動時裝載servlet并調用它的init方法,否則,若其不存在,則在該servlet的第一次請求中加載。<url-pattern>
.action</url-pattern>表示前端控制器會對*.action請求進行處理。
DispatcherServlet會使用SpringMVC諸多默認組件,并在初始化時在應用程序WEB-INF下的配置文件,該配置文件的命名規則是:
servletName-servlet.xml
其中servletName是部署描述符中的Dispactcher Servlet的名稱。
此外,也可以把SpringMVC的配置文件放在應用程序目錄的任何地方或以其他形式命名,那么需要在原有的代碼上進行改動,在<servlet></servlet>標簽中加入如:
</init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/dispatcherConfig.xml</param-value>
</init-param>
來對加載默認的文件名和路徑進行修改。
5.配置編碼過濾器
<filter>
<filter-name>characterEncodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
下面的代碼:
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
value值為true則表示過濾器不僅對request字符編碼起作用,也對response字符編碼起作用。
6.其他配置
在web.xml還可以對應用程序進行其他配置,比如錯誤頁面的配置:
<error-page>
<error-code>500</error-code>
<location>/error/500</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/404</location>
</error-page>
還比如Session超時設置:
<session-config>
<session-timeout>10000</session-timeout>
</session-config>
這些可以根據需要進行配置,并非SSM框架整合所必需的,作為了解即可。
這樣,部署描述符文件我們就配置完成了。
(二)SpringMVC-servlet.xml的配置
SpringMVC-servlet.xml中的配置會因隨后的需求而逐漸增多,這里只配置SSM整合所必須的部分,在之后的章節中,會根據需要向其中增加配置。
1.文件的頭與尾
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
:
:
:
</beans>
2.<mvc:annotation-driven></mvc:annotation-driven>
使用<mvc:annotation-driven>……</mvc:annotation-driven>標簽會幫助我們在Spring中自動注冊DefaultAnnotationHandlerMapping與AnnotationMethodHandlerAdapter 兩個bean,即幫我們處理注解方式的處理器映射器和處理器適配器的配置。這是spring MVC為@Controllers分發請求所必須的。<mvc:annotation-driven>默認加載很多的參數綁定方法,比如json轉換解析器,所以在企業開發中也多使用這種方法進行配置。在之后的學習中我們會在其中加許多配置。代碼如下:
<mvc:annotation-driven></mvc:annotation-driven>
3.spring組件掃描<context:component-scan></context:component-scan>
在xml配置了這個標簽后,spring可以自動去掃描base-pack下面或者子包下面的java文件,如果掃描到有@Component @Controller@Service等這些注解的類,則把這些類注冊為bean。
代碼為:
<context:component-scan base-package="com.XXX.controller"/>
<context:component-scan base-package="com.XXX.service"/>
也可以簡化為:
<context:component-scan base-package="com.XXX "/>
這樣,會SpringMVC掃描com.meituan的子包,但這樣會使SpringMVC掃描了無關的包。
4.配置視圖解析器
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/">
</property>
<property name="suffix" value="">
</property>
</bean>
prefix和suffix分別是視圖的前綴和后綴,根據具體情況設置。
這樣,我們的SpringMVC-Servlet.xml在SSM整合中的必需部分我們就配置完成了。
(三)appliactionContext.xml文件
1.文件的頭與尾
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">
:
:
:
</beans>
2.配置數據源
我們在配置數據源時,可以將數據庫的信息寫在db.properties文件中,也可以直接配置,下面我們先展示直接在applicationContext.xml中配置數據源信息的做法,代碼如下:
<bean name="dataSourse" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="jdbc:mysql://localhost:3306/XXX"></property>
<property name="username" value="root"></property>
<property name="password" value="3255116"></property>
<property name="initialSize" value="2"></property>
<property name="maxActive" value="500"></property>
<property name="minIdle" value="2"></property>
<property name="maxWait" value="6000"></property>
</bean>
XXX表示你定義的數據庫的名稱。
initialSize指的是初始化連接數;maxActive指的是連接池最大使用連接數;minIdle表示連接池最小空閑;maxWait表示用戶最大等待時間。
數據源中還存在很多配置,這里只配置了其中必需及重要的一部分,至于其他屬性,請讀者參考數據源相關的書籍。
下面將展示第二種做法,即將數據庫的信息寫在db.properties文件中
db.properties代碼如下:
jdbc.driver=com.mysql.jdbc.driver
jdbc.url=jdbc:mysql://localhost:3306/XXX
jdbc.username=root
jdbc.password=3255116
jdbc.initialSize=2
jdbc.maxActive=20
jdbc.minIdle=1
jdbc.maxWait=6000
需要在appliactionContext.xml中加載db.peoperties文件,代碼如下:
<context:property-placeholder location="/WEB-INF/db.properties"/>
修改數據源配置的相關內容,讓其讀取db.properties里的信息,代碼如下:
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value=""${jdbc.password}"></property>
<property name="initialSize" value="${jdbc.initialSize}"></property>
<property name="maxActive" value="${jdbc.maxActive}"></property>
<property name="minIdle" value="${jdbc.minIdle}"></property>
<property name="maxWait" value="${jdbc.maxWait}"></property>
</bean>
我們在db.properties文件中配置了jdbc.driver這個屬性,但是我們并沒有讀取它,這是因為我們配置的數據源加載的是com.alibaba.druid.pool.DruidDataSourse,但是如果換成org.apache.commons.dbcp.BasicDataSource就需要額外讀取驅動器的信息。我們一般推薦采取第二種方式配置數據源。
3.SqlSessionFactoryBean的創建
在mybatis中,我們使用SqlSessionFactoryBuilder來創建SqlSessionFactory(會話工廠)。而在Mybatis與Spring整合中SqlSessionFactoryBean將取而代之。配置代碼如下:
<bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" value="dataSource"></property>
<property name="mapperLocations" value="classpath
:com/meituan/mapper/*.xml"></property>
</bean>
注意包和子包間的“.”要改為“/”。
此外,sqlSessionFactory還具有configLocation屬性(可選擇加或不加),用于指明mybatis的XML配置文件的位置,但在和Spring整合后,這個配置文件里的大部分配置都由Spring自動完成,你只需在里面配置別名即可。
4.MapperFactoryBean的創建
MapperFactoryBean的出現實現了mapper的動態代理,可以代替手工使用SqlSessionDaoSupport或SqlSessionTemplate編寫數據訪問(DAO)的代碼。具體代碼如下:
<bean name="mapperFactoryBean" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.meituan.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
因為當要使用多個MapperFactoryBean的時候,一個一個定義肯定非常麻煩,于是mybatis-spring提供了MapperScannerConfigurer這個類,它將會查找類路徑下的映射器并自動將它們創建成MapperFactoryBean。之后想使用這個UserMapper接口的話,直接通過spring注入這個bean,然后就可以直接使用了,spring內部會創建一個這個接口的動態代理。

  1. <tx:annotation-driven/
    <tx:annotation-driven/>
    對@Transactional這個注解進行的驅動,是基于注解方式使用事務配置聲明。

至此,SSM的整合環境我們就搭建完了,在之后的學習中,我們會根據需要對這些配置文件進行添加或修改。

點擊查看更多內容
39人點贊

若覺得本文不錯,就分享一下吧!

評論

相關文章推薦

正在加載中
意見反饋 幫助中心 APP下載
官方微信

舉報

0/150
提交
取消
lpl竞猜