• MyBatis3-与Spring MVC 4集成


    继前一篇的例子http://www.cnblogs.com/EasonJim/p/7052388.html,已经集成了Spring框架,现在将改造成Spring MVC的项目,并实现如下功能:

    1、不用每次都手动指定具体的XML文件,而是采用通配符自动查找XML文件,也是Mapping文件。

    2、不用每次都手动指定实体文件,即POJOs,而是采用包名的形式指定最上层的包。

    此次集成Spring MVC框架,主要需要用到以下文件:

    1、web.xml:用于关联Spring的Servlet映射。

    2、spring-mvc-servlet.xml:用于配置Spring的Servlet映射。

    3、beans.xml:用于配置MyBatis与Spring结合的Beans映射。其中包括了数据库的具体连接,实体的映射包名查找,Mapping的XML文件的通配符查找等。

    下面是具体的集成步骤:

    1、项目整体结构:

    2、POM依赖配置:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.jsoft.testmybatis</groupId>
        <artifactId>test1</artifactId>
        <packaging>war</packaging>
        <version>0.0.1-SNAPSHOT</version>
        <name>test1 Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
    
            <!-- Servlet Library -->
            <!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
    
            <!-- JSTL -->
            <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
            <dependency>
                <groupId>org.apache.taglibs</groupId>
                <artifactId>taglibs-standard-impl</artifactId>
                <version>1.2.5</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-jstlel -->
            <dependency>
                <groupId>org.apache.taglibs</groupId>
                <artifactId>taglibs-standard-jstlel</artifactId>
                <version>1.2.5</version>
            </dependency>
    
            <!-- Spring Core -->
            <!-- http://mvnrepository.com/artifact/org.springframework/spring-core -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>4.1.4.RELEASE</version>
            </dependency>
    
            <!-- Spring Web -->
            <!-- http://mvnrepository.com/artifact/org.springframework/spring-web -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>4.1.4.RELEASE</version>
            </dependency>
    
            <!-- Spring Web MVC -->
            <!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.1.4.RELEASE</version>
            </dependency>
    
            <!-- Spring Context -->
            <!-- http://mvnrepository.com/artifact/org.springframework/spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.1.4.RELEASE</version>
            </dependency>
    
            <!-- Spring JDBC -->
            <!-- http://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>4.1.4.RELEASE</version>
            </dependency>
    
            <!-- mysql-connector-java -->
            <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.38</version>
            </dependency>
    
            <!-- mybatis -->
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.4</version>
            </dependency>
    
            <!-- mybatis-spring -->
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.3.1</version>
            </dependency>
    
            <!-- commons-dbcp -->
            <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
            <dependency>
                <groupId>commons-dbcp</groupId>
                <artifactId>commons-dbcp</artifactId>
                <version>1.4</version>
            </dependency>
    
        </dependencies>
        <build>
            <finalName>test1</finalName>
    
            <plugins>
                <!-- Config: Maven Tomcat Plugin -->
                <!-- http://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
                <!-- http://tomcat.apache.org/maven-plugin-2.0/tomcat7-maven-plugin/plugin-info.html -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <!-- Config: contextPath and Port (Default:8080) -->
                    <!-- <configuration>
                        <path>/</path>
                        <port>8899</port>
                    </configuration> -->
                </plugin>
                <!-- Config: Maven Jetty Plugin -->
                <!-- http://mvnrepository.com/artifact/org.mortbay.jetty/jetty-maven-plugin -->
                <!-- http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html -->
                <plugin>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>9.4.3.v20170317</version>
                    <!-- Config: contextPath and Port (Default:8080) -->
                    <!-- <configuration>
                        <httpConnector>
                            <port>8899</port>
                        </httpConnector>
                        <webAppConfig>
                            <contextPath>/</contextPath>
                        </webAppConfig>
                    </configuration> -->
                </plugin>
            </plugins>
    
        </build>
    </project>

    3、web.xml配置:

    <web-app id="WebApp_ID" version="3.0"
        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">
    
        <display-name>Archetype Created Web Application</display-name>
    
        <servlet>
            <servlet-name>spring-mvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 默认:[servlet-name]-servlet.xml -->
            <!-- 通过初始化参数,指定xml文件的位置 -->
            <!-- <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/helloworld-context.xml</param-value>
            </init-param> -->
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>spring-mvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
        <!-- 添加其它xml配置 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:beans.xml</param-value><!-- 映射beans,里面配置数据库连接信息以及MyBatis的映射文件 -->
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
    </web-app>

    4、spring-mvc-servlet.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.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">
    
        <context:component-scan base-package="com.jsoft.testmybatis.controller" />
    
        <context:annotation-config />
    
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix">
                <value>/WEB-INF/jsp/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>
    
    </beans>

    这里是常规的Web映射,没有相关的MyBatis配置。

    5、beans.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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--采用DBCP连接池 -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/Test?serverTimezone=UTC" />
            <property name="username" value="root" />
            <property name="password" value="root" />
        </bean>
    
        <!-- 事务 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
        
        <!-- 新建SessionFactonry -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--dataSource属性指定要用到的连接池 -->
            <property name="dataSource" ref="dataSource" />
            <!--configLocation属性指定mybatis的核心配置文件 -->
            <property name="configLocation" value="classpath:Configuration.xml" />
            <!-- 所有配置的mapper文件 -->
            <property name="mapperLocations" value="classpath:com/jsoft/testmybatis/models/*.xml" />
            <!-- 所有的实体 -->
            <property name="typeAliasesPackage" value="com.jsoft.testmybatis.models"/>
        </bean>
        
        <!-- 映射接口文件 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.jsoft.testmybatis.inter" />
        </bean>
    
    </beans>

    这里关联了MyBatis,并且通过<property name="mapperLocations" value="classpath:com/jsoft/testmybatis/models/*.xml" />实现通配符的查找,不用手动具体指定每一个XML文件,<property name="typeAliasesPackage" value="com.jsoft.testmybatis.models"/>这里通过顶层包名去查找下面的POJOs。

    6、由上一节文章中配置的Configuration.xml文件,是具体指定了POJOs和XML文件的,但是这里就全部取消了,直接为空,留下日后需要配置MyBatis其它属性。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    
    
    </configuration>

    7、UserController.java,就是单纯的

    package com.jsoft.testmybatis.controller;
    
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.jsoft.testmybatis.inter.IUserOperation;
    import com.jsoft.testmybatis.models.Article;
    
    @Controller
    @RequestMapping("/article")
    public class UserController {
        @Autowired
        IUserOperation userMapper;
    
        @RequestMapping("/list")
        public ModelAndView listall(HttpServletRequest request,HttpServletResponse response){
            List<Article> articles=userMapper.getUserArticles(1); 
            ModelAndView mav=new ModelAndView("/article/list");
            mav.addObject("articles",articles);
            return mav;
        }
    }

    这里需要说明的就是基于Spring的@Autowired注解,其实是beans.xml中配置的<property name="basePackage" value="com.jsoft.testmybatis.inter" />的作用,通过顶层包进行查找接口文件,然后标有@Autowired注解的属性会自动查找并装配。

    8、list.jsp,Web页面,通过JSTL标签进行数据输出:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <c:forEach items="${articles}" var="item">  
            ${item.id }--${item.title }--${item.content }<br />
        </c:forEach>
    </body>
    </html>

    9、最后通过POM内置的Tomcat组件运行,命令如下:

    mvn tomcat7:run

    测试数据结果:

    测试工程:https://github.com/easonjim/5_java_example/tree/master/mybatis/test6

    参考:

    http://www.yihaomen.com/article/java/318.htm

  • 相关阅读:
    67. Add Binary
    66. Plus One
    64. Minimum Path Sum
    63. Unique Paths II
    How to skip all the wizard pages and go directly to the installation process?
    Inno Setup打包之先卸载再安装
    How to change the header background color of a QTableView
    Openstack object list 一次最多有一万个 object
    Openstack 的 Log 在 /var/log/syslog 里 【Ubuntu】
    Git 分支
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7055499.html
Copyright © 2020-2023  润新知