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文件内容如下:
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内部会创建一个这个接口的动态代理。
- <tx:annotation-driven/
<tx:annotation-driven/>
对@Transactional这个注解进行的驱动,是基于注解方式使用事务配置声明。
至此,SSM的整合环境我们就搭建完了,在之后的学习中,我们会根据需要对这些配置文件进行添加或修改。
热门评论
写的乱的很,不好!!!!
赞赞赞