SpringMVC+Spring+Mybatis快速入门(一)配置详解

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.文件头与尾

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appxmlns: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是部署描述符中的DispactcherServlet的名称。

此外,也可以把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.文件的头与尾

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="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-scanbase-package="com.XXX.controller"/>

<context:component-scanbase-package="com.XXX.service"/>

也可以简化为:

<context:component-scanbase-package="com.XXX "/>

这样,会SpringMVC扫描com.meituan的子包,但这样会使SpringMVC扫描了无关的包。

4.配置视图解析器

<beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<propertyname="prefix"value="/">

</property>

<propertyname="suffix"value=""> 

</property>

</bean>

prefix和suffix分别是视图的前缀和后缀,根据具体情况设置。

这样,我们的SpringMVC-Servlet.xml在SSM整合中的必需部分我们就配置完成了。

(三)appliactionContext.xml文件

1.文件的头与尾

<?xmlversion="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中配置数据源信息的做法,代码如下:

<beanname="dataSourse"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close">

  <propertyname="url"value="jdbc:mysql://localhost:3306/XXX"></property>

  <propertyname="username"value="root"></property>

  <propertyname="password"value="3255116"></property>

  <propertyname="initialSize"value="2"></property>

  <propertyname="maxActive"value="500"></property>

  <propertyname="minIdle"value="2"></property>

  <propertyname="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-placeholderlocation="/WEB-INF/db.properties"/>

修改数据源配置的相关内容,让其读取db.properties里的信息,代码如下:

<beanname="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close">

<propertyname="url"value="${jdbc.url}"></property>

<propertyname="username"value="${jdbc.username}"></property>

<propertyname="password"value=""${jdbc.password}"></property>

<propertyname="initialSize"value="${jdbc.initialSize}"></property>

<propertyname="maxActive"value="${jdbc.maxActive}"></property>

<propertyname="minIdle"value="${jdbc.minIdle}"></property>

<propertyname="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将取而代之。配置代码如下:

<beanname="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

<propertyname="dataSource"value="dataSource"></property>

<propertyname="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">

<propertyname="basePackage"value="com.meituan.mapper"></property>

<propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property>

</bean>

因为当要使用多个MapperFactoryBean的时候,一个一个定义肯定非常麻烦,于是mybatis-spring提供了MapperScannerConfigurer这个类,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。之后想使用这个UserMapper接口的话,直接通过spring注入这个bean,然后就可以直接使用了,spring内部会创建一个这个接口的动态代理。

5.<tx:annotation-driven/

<tx:annotation-driven/>

对@Transactional这个注解进行的驱动,是基于注解方式使用事务配置声明。

 

至此,SSM的整合环境我们就搭建完了,在之后的学习中,我们会根据需要对这些配置文件进行添加或修改。

 

 

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值