分享

Mybatis使用之SpringMVC整合

 关平藏书 2022-01-24

一:简介

      主要记录Mybatis如何与SpringMVC框架整合。Mybatis真正与Spring结合更能体现出其灵活、便捷的特点。数据源交由Spring管理、事务交由Spring管理、配置文件、映射文件交由Spring加载、初始化。映射接口交由Spring注入等等。大大简化了Mybatis代码、配置量。Mybatis只需关心与数据库打交道、处理数据与实体类之间的映射即可。

二:环境介绍

      主要是Mybatis3.2.8与Spring4.1.0之间的整合。项目是使用Maven搭建的项目。搭建步骤:

      2.1 创建Maven项目

      2.2 加入Mybatis+SpringMVC所需jar包依赖

      2.3 配置Mybatis配置文件

      2.4 配置Spring配置文件

      2.5 配置SpringMVC配置文件

      2.6 配置web.xml文件

      2.7 配置Mybatis映射文件

      2.8 编写与Mybatis映射文件对应的映射接口

      2.9 配置日志资源文件

      2.10 完成其他java代码编写、测试

三:具体步骤及说明

          3.1 创建Maven项目

      这里使用的IntellijIDEA 14、集成Maven插件、其他的IDE如Eclipse只需安装一下插件就行。

          3.2 加入Mybatis+SpringMVC所需jar包依赖

      具体如下面pom.xml文件所列:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven./POM/4.0.0"xmlns:xsi="http://www./2001/XMLSchema-instance"xsi:schemaLocation="http://maven./POM/4.0.0 http://maven./xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.star.coding.passion</groupId><artifactId>star-coding-passion</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><java-version>1.7</java-version><org.springframework-version>4.1.0.RELEASE</org.springframework-version><org.springframework.security-version>3.2.0.RELEASE</org.springframework.security-version><org.aspectj-version>1.8.1</org.aspectj-version><org.slf4j-version>1.6.1</org.slf4j-version><org.mybatis>3.2.8</org.mybatis><org.mybatis.spring>1.2.2</org.mybatis.spring><org.aspectj>1.7.4</org.aspectj><common.dbcp>1.4</common.dbcp><mysql.version>5.1.34</mysql.version></properties><dependencies><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${org.springframework-version}</version></dependency><!--aspectJ--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.5</version></dependency><!-- Mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${org.mybatis}</version></dependency><!--Mybatis Spring--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${org.mybatis.spring}</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- 连接池 --><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>${common.dbcp}</version></dependency><!-- Logging --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${org.slf4j-version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${org.slf4j-version}</version><scope>runtime</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${org.slf4j-version}</version><scope>runtime</scope></dependency><!-- Servlet --><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-servlet-api</artifactId><version>7.0.30</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp.jstl</groupId><artifactId>jstl-api</artifactId><version>1.2</version><exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId></exclusion></exclusions></dependency><!-- Jackson JSON Processor --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.4.1</version></dependency><!-- File Upload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.0.1</version></dependency></dependencies></project>

          3.3 配置Mybatis配置文件

         位于Maven的资源文件目录下: resources/mybatis/mybatis-conf ig.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-////DTD Config 3.0//EN""http:///dtd/mybatis-3-config.dtd"><configuration><!-- 命名空间 --><typeAliases><package name="org.star.coding.passion.web.model"/></typeAliases><plugins><!--分页插件、只拦截映射文件中sql语句id以ByPage结尾的sql语句、仅支持mysql和Oracle分页--><plugin interceptor="org.star.coding.passion.web.interceptor.PageInterceptor"><property name="dialect" value="mysql"/></plugin></plugins><!-- 映射map --><mappers/></configuration>


          3.4 配置Spring配置文件

        主要是Spring与Mybatis集成、以及Spring事务以及连接池的配置、同时使用扫描加载除Controller注解标识的bean

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www./schema/beans"xmlns:xsi="http://www./2001/XMLSchema-instance"xmlns:context="http://www./schema/context" xmlns:p="http://www./schema/p"xmlns:tx="http://www./schema/tx" xmlns:aop="http://www./schema/aop"xsi:schemaLocation="http://www./schema/beanshttp://www./schema/beans/spring-beans.xsdhttp://www./schema/contexthttp://www./schema/context/spring-context.xsdhttp://www./schema/tx http://www./schema/tx/spring-tx.xsdhttp://www./schema/aop http://www./schema/aop/spring-aop.xsd"><!-- 引入资源文件--><context:property-placeholder location="classpath:properties/jdbc-config.properties"/><context:component-scan base-package="org.star.coding.passion"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- common dbcp 数据库连接池配置信息--><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" p:url="${jdbc.url}"p:driverClassName="${jdbc.driverClassName}" p:username="${jdbc.username}" p:password="${jdbc.password}"p:minEvictableIdleTimeMillis="${jdbc.minEvictableIdleTimeMillis}" p:removeAbandoned="${jdbc.removeAbandoned}"p:maxActive="${jdbc.maxActive}" p:maxIdle="${jdbc.maxIdle}" p:initialSize="${jdbc.initialSize}"p:minIdle="${jdbc.minIdle}" p:maxWait="${jdbc.maxWait}" p:validationQuery="${jdbc.validationQuery}"p:timeBetweenEvictionRunsMillis="${jdbc.timeBetweenEvictionRunsMillis}" p:testOnBorrow="${jdbc.testOnBorrow}"p:testOnReturn="${jdbc.testOnReturn}" p:testWhileIdle="${jdbc.testWhileIdle}"p:removeAbandonedTimeout="${jdbc.removeAbandonedTimeout}"/><!-- spring与mybatis整合 读取所有mybatis配置文件--><bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"p:dataSource-ref="dataSource"p:configLocation="classpath:mybatis/mybatis-config.xml"p:mapperLocations="classpath:mybatis/mapper/*.xml"/><!-- configLocation为mybatis属性 mapperLocations为所有mapper--><!-- spring与mybatis整合配置,扫描所有mapper下mybatis配置文件、用动态代理模式来获取所有mybatis的xml文件中namespace指向的接口的代理实例。--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"p:basePackage="org.star.coding.passion.web.mapper"p:sqlSessionFactoryBeanName="sqlSessionFactory"/><!-- 对数据源进行事务管理--><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"p:dataSource-ref="dataSource"/><!-- 事物切面配置--><tx:advice id="advice" transaction-manager="transactionManager"><tx:attributes><tx:method name="add*" propagation="REQUIRED" read-only="false"/><tx:method name="save*" propagation="REQUIRED" read-only="false"/><tx:method name="del*" propagation="REQUIRED" read-only="false"/><tx:method name="remove*" propagation="REQUIRED" read-only="false"/><tx:method name="get*" propagation="REQUIRED" read-only="true"/><tx:method name="query*" propagation="REQUIRED" read-only="true"/><tx:method name="sel*" propagation="REQUIRED" read-only="true"/><tx:method name="mod*" propagation="REQUIRED" read-only="false"/><tx:method name="update*" propagation="REQUIRED" read-only="false"/></tx:attributes></tx:advice><tx:annotation-driven transaction-manager="transactionManager" /><aop:config><aop:pointcut id="servicePoint" expression="execution (* org.star.coding.passion.web.service..*.*(..))"/><aop:advisor advice-ref="advice" pointcut-ref="servicePoint"/></aop:config></beans>


          3.5 配置SpringMVC配置文件

        SpringMVC配置信息、仅扫描Controller注解标注的类

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www./schema/beans"xmlns:p="http://www./schema/p"xmlns:xsi="http://www./2001/XMLSchema-instance"xmlns:context="http://www./schema/context"xmlns:mvc="http://www./schema/mvc"xsi:schemaLocation="http://www./schema/beanshttp://www./schema/beans/spring-beans-3.2.xsdhttp://www./schema/contexthttp://www./schema/context/spring-context-3.2.xsdhttp://www./schema/mvchttp://www./schema/mvc/spring-mvc-3.2.xsd"><!-- 扫描controller类--><context:component-scan base-package="org.star.coding.passion.web.controller"/><!-- 允许静态资源访问--><mvc:annotation-driven /><mvc:default-servlet-handler/><!-- 避免IE在ajax请求时,返回json出现下载--><bean id="jacksonMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean><!-- 对模型视图添加前后缀 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"p:prefix="/WEB-INF/views/" p:suffix=".jsp"/><!-- 上传文件配置 、多了个多请求的处理、目的是为了支持多文件上传--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"p:defaultEncoding="utf-8" p:maxUploadSize="10485760000" p:maxInMemorySize="40960"/></beans>


          3.6 配置web.xml文件

        配置常用信息

<web-app xmlns="http://java./xml/ns/javaee"xmlns:xsi="http://www./2001/XMLSchema-instance"xsi:schemaLocation="http://java./xml/ns/javaee http://java./xml/ns/javaee/web-app_3_0.xsd"version="3.0"><!-- web root --><context-param><param-name>webAppRootKey</param-name><param-value>springmvc.root</param-value></context-param><!-- Spring configuration--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-root-context.xml</param-value></context-param><!-- log properties --><context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:properties/log4j.properties</param-value></context-param><context-param><param-name>log4jRefreshInterval</param-name><param-value>6000</param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--Spring MVC DispatcherServlet--><servlet><servlet-name>appServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/springMVC-root-context.xml</param-value></init-param><load-on-startup>2</load-on-startup><!--<async-supported>true</async-supported>--></servlet><servlet-mapping><servlet-name>appServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- Spring encoding filter --><filter><filter-name>SpringEncodingFilter</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>SpringEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- error handle page --><error-page><!-- wrong path --><error-code>404</error-code><location>/WEB-INF/views/error/404.jsp</location></error-page><error-page><!-- no privilege --><error-code>405</error-code><location>/WEB-INF/views/error/405.jsp</location></error-page><error-page><!-- internal error --><error-code>500</error-code><location>/WEB-INF/views/error/500.jsp</location></error-page><error-page><!--internal exception--><exception-type>java.lang.Exception</exception-type><location>/WEB-INF/views/error/400.jsp</location></error-page><!--welcome page list--><welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>welcome.jsp</welcome-file></welcome-file-list></web-app>


          3.7 配置Mybatis映射文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "http:///dtd/mybatis-3-mapper.dtd"><mapper namespace="org.star.coding.passion.web.mapper.UserMapper"><select id="selectUserCount" resultType="int">SELECT count(1)FROM klmy_person</select></mapper>


          3.8 编写与Mybatis映射文件对应的映射接口

package org.star.coding.passion.web.mapper;/*** Created by andy on 5/9/2015.<br>* Version 1.0-SNAPSHOT<br>*/public interface UserMapper {int selectUserCount();}


          3.9 配置日志资源文件

### set log levels ###log4j.rootLogger = info , stdout , D , E###  output to the console ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%c:%L] [%p] - %m%n### output mybatis sql info to the console ###log4j.logger.org.star.coding.passion=DEBUG#log4j.logger.org.mybatis=DEBUG#log4j.logger.org.apache=DEBUG#log4j.logger.java.sql.Connection=DEBUG#log4j.logger.java.sql.Statement=DEBUG#log4j.logger.java.sql.PreparedStatement=DEBUG### Output to the log file ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = ${springmvc.root}/WEB-INF/logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = debuglog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%t] [%c:%L] [%p] - %m%n### Save exception information to separate file ###log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File = ${springmvc.root}/WEB-INF/logs/error.loglog4j.appender.E.Append = truelog4j.appender.E.Threshold = warnlog4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%t] [%c:%L] [%p] - %m%n

四:补充

        需要注意Spring的配置文件与SpringMVC的配置文件是分开的、两者分配在初始化Spring容器的时候扫描加载的bean不同、Spring是扫描加载除Controller注解以外符合加载条件的bean、而SpringMVC是只扫描加载Controller注解的bean、目的是为了在加载Controller时注入的Service是具有事务特性的bean。如果项目中事务不起作用、请查看是否是此原因导致。         项目下载地址:http://download.csdn.net/detail/chenghuaying/8761971 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多