Mybatis集成Spring MVC

mybatis集成spring,一般来说配置比较麻烦,我们都是事先弄个手脚架子然后稍微复制粘贴一下子就搞定了,对于spring boot来说这些一般的模板配置项都给我们搞定了,去github 搜索一下子:SpringBoot-Learning,然后可以看到比较好的教程比如:https://github.com/dyc87112/SpringBoot-Learning;比如:https://github.com/JeffLi1993/springboot-learning-example等等。但是对于我们学习来说,原始的spring项目的整体更让我们清楚了解基本的功能。

首先mybatis放置在spring中给我们带来了那些便利的地方,我感觉最主要的便利的地方就是对于Mapper接口能够便利使用IOC容器,可以像一般的dao(Mapper)层一样方便的注入到service中去。不用使用sqlsesession.getMapper(xxx.class);,对于事务的控制也是非常方便的融入到了spring的事务控制体系中去。当然也提供了一些模板SqlSessionTemplate。使用起来还是比较方便的。

  1. web工程自己创建一个maven的web工程
  2. 然后去maven 仓库中去寻找你要的依赖包 https://mvnrepository.com/
  3. 配置自己需要的pom.xml
< ?xml version="1.0" encoding="UTF-8"?>
< 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/xsd/maven-4.0.0.xsd">
    < modelVersion>4.0.0 < /modelVersion>
    < groupId>groupId< /groupId>
    < artifactId>study-4-spring< /artifactId>
    < version>1.0-SNAPSHOT< /version>
    < properties>
        < spring.version>4.1.1.RELEASE< /spring.version>
    < /properties>
    < dependencies>
        < dependency>
            < groupId>org.mybatis< /groupId>
            < artifactId>mybatis< /artifactId>
            < version>3.4.4< /version>
        < /dependency>
        < dependency>
            < groupId>junit< /groupId>
            < artifactId>junit< /artifactId>
            < version>4.12< /version>
            < scope>test< /scope>
        < /dependency>
        < dependency>
            < groupId>mysql< /groupId>
            < artifactId>mysql-connector-java< /artifactId>
            < version>5.1.40< /version>
        < /dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.7.4</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.4</version>
        </dependency>

        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>

        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>

        <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.11</version>
        </dependency>

        <!--database-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>

        <!-- JSTL -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- 日志文件 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>


        <!-- 文件上传 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>

        <!-- JSON数据转换 -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.4.4</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.4.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.0.2</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

< /project>

4 然后就是配置web.xml 一个是启动spring的IOC核心相关的东西,另外就是启动spring mvc 的配置相关信息,spring mvc也有一个IOC容器,不过属于spring的子容器。javascript:void(0) 要注意父子之间扫描包重复性的工作,不可行的。spring mvc 主要是负责分发我们的URl然后做一些处理性的工作,让我们处理起来更加的简单方便,不会像直接使用servlet那么的复,前期处理做了很多的事情。还有个编码的过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">


    <!-- 设置Spring容器加载配置文件的路径 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:Spring-applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 前端控制器(Spring核心控制器) -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-dispatcher.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!-- 解决工程编码过滤器 -->
    <filter>
        <filter-name>encodingFilter</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>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

5 spring-dispatcher.xml,这个是控制spring-mvc主要的配置信息,扫描Action层,对于返回json处理,配置文件上传,配置模板引擎等等工作,在spring-mvc总@Controller层是可以直接注入spring的IOC容器中的bean实例的。还有比如配置一下全局处理的异常啊,不用每次处理都try…一下子,看一下配置信息。这里扫描包的时候,没有扫描其他的信息,只是扫描action层的信息,这个害怕和spring ioc中的扫描混淆了,加载两个bean

<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:aop="http://www.springframework.org/schema/aop" 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/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 容器默认的DefaultServletHandler处理 所有静态内容与无RequestMapping处理的URL-->
    <mvc:default-servlet-handler/>

    <!-- 组件扫描 -->
    <context:component-scan base-package="com.jet" use-default-filters="false">
        <context:include-filter type="annotation"
                                expression="org.springframework.stereotype.Controller"/>
        <context:include-filter type="annotation"
                                expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
    </context:component-scan>

    <!-- proxy-target-class默认"false",更改为"ture"使用CGLib动态代理 -->
    <aop:aspectj-autoproxy proxy-target-class="true" />


    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--启动注解功能 注册请求url和注解POJO类方法的映射并设置@ResponseBody返回中文乱码问题-->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8" />
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false" />
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!-- 文件上传的解析器
         要想使用表单提交enctype="multipart/form-data"格式的数据(如上传图片),需要配置此解析器,不配置的话参数绑定会失败 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置上传文件的最大尺寸为5MB -->
        <property name="maxUploadSize">
            <value>5242880</value>
        </property>
        <property name="defaultEncoding" value="utf-8"></property>
    </bean>
    <bean  class="com.common.utils.GlobalHandlerExceptionResolver"></bean>

</beans>

全局的异常处理

package com.common.utils;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * descrption: 全局异常处理
 * authohr: wangji
 * date: 2017-08-01 8:54
 */
public class GlobalHandlerExceptionResolver implements HandlerExceptionResolver {

    private MappingJackson2JsonView  jsonView = new MappingJackson2JsonView();
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        //这里你可以根据业务的需要,是返回json的信息还是返回,某个页面,完全可以自我控制,这里是返回一个json字符串的信息
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setView(jsonView);
        modelAndView.addObject("error",e.getMessage());
        modelAndView.addObject("result",false);
        return modelAndView;
    }
}

6.Spring-applicationContext.xml 配置spring的核心,负责配置IOC,数据库sessionFactory,事务管理,数据库连接池等等的配置,还有数据库用户名之内的配置,所谓IOC主要是配置扫描包,修改默认的扫描范围,将Action层的排除在外。

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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!-- proxy-target-class默认"false",更改为"ture"使用CGLib动态代理 -->
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <!-- 采用注释的方式配置bean,当配置扫描包的时候,可以省去配置这个context:annotation-config -->
    <!--<context:annotation-config />-->
    <!-- 组件扫描 -->
    <context:component-scan base-package="com.jet"><!--让spring IOC 不扫描指定注解-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
    </context:component-scan>
    <!-- 加载数据库配置文件 -->
    <context:property-placeholder location="classpath:db.properties"/>

    <import resource="spring-mybatis.xml"></import>
</beans>

7.spring-mybatis.xml 这里是配置很多的东西,配置mybatis需要的一些数据信息,扫描mapping.xml,配置将Mapper接口能够被注解到spring中,配置事务控制service层等等。

<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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!-- 配置数据源,使用dbcp -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" init-method="init">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="10"/>
    </bean>

    <!--MyBatis factory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--mybatis的某些配置项,最原始的,可以不需要-->
        <!--<property name="configLocation" value="mybatis-config.xml"></property>-->
        <!--它表示我们的Mapper.xml文件存放的位置-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
        <!-- 它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。
            多个package之间可以用逗号或者分号等来进行分隔。(value的值一定要是包的全名)@Alias别名-->
        <property name="typeAliasesPackage" value="com.jet"/>
    </bean>
    <!--mapper 自动映射,将接口注入到Spring-Ioc容器中, 配置sqlSessionFactoryBeanName属性 决定优先加载 sqlSessionFactory-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 扫描包时候使用了这个注解才被认为是mapper -->
        <property name="annotationClass" value="org.springframework.stereotype.Repository"></property>
        <!-- 扫描包的路径,如果要扫描多个包,中间使用逗号隔开 -->
        <property name="basePackage" value="com.jet.module"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
    <!-- SqlSession模板类实例 -->
    <bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" >
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>
    <!-- 通知 -->
    <tx:advice transaction-manager="transactionManager" id="txAdvice">
        <tx:attributes>
            <!-- 传播行为 -->
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="save*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="*" propagation="SUPPORTS" read-only="true"/>
        </tx:attributes>
    </tx:advice>
<!--    
    PROPAGATION_REQUIRED;支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
    PROPAGATION_SUPPORTS;支持当前事务,如果当前没有事务,就以非事务方式执行。
    PROPAGATION_MANDATORY;支持当前事务,如果当前没有事务,就抛出异常。
    PROPAGATION_REQUIRES_NEW;新建事务,如果当前存在事务,把当前事务挂起。
    PROPAGATION_NOT_SUPPORTED;以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    PROPAGATION_NEVER;以非事务方式执行,如果当前存在事务,则抛出异常。
    PROPAGATION_NESTED;如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。-->

    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.jet.module..service..*.*.*(..))"/>
    </aop:config>
</beans>

8.简单的配置完了不是我们的终点,一般情况下,我们还是需要进行测试的,在spring IOC中自己进行测试某个部分不是那么的好测试,最简单的是在Action中通过前端的请求访问Action然后在访问service层进行数据的测试工作,这个感觉很麻烦,不知道你有没有感觉到。还有中就是通过XMl构建IOC容器,然后获取相应的bean,然后测试其方法,这个感觉也是相当的复制的,不过还好,spring给我们提供了简单的测试方法非常的方便我们的配置和使用。
原始:每次测试都是先获取容器,然后在获取bean然后在测试相应的方法。

    //容器
    ApplicationContext ctx=new ClassPathXmlApplicationContext("Spring-applicationContext.xml");
    UserInfoService userservice=(IUserInfoService)ctx.getBean("userInfoService");

结合junit进行测试,可以注入相应的bean进行处理哦,为了不用每次都是些配置文件,我们编写一个父类。
JUnitServiceBase

package BaseSpringTest;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * descrption: spring-test的基类,这样就可以很方便的进行测试Spring-IOC容器里面的Bean了
 * authohr: wangji
 * date: 2017-07-31 18:23
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={
        "classpath:Spring-applicationContext.xml"})
public class JUnitServiceBase extends AbstractJUnit4SpringContextTests {

}

然后进行测试,可以非常方便的注入bean进行测试,在也不用先请求网络了恩。

package com.jet.module.UserManage.service.impl;

import BaseSpringTest.JUnitServiceBase;
import com.jet.module.UserManage.entity.User;
import com.jet.module.UserManage.service.IUserInfoService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by wangji on 2017/7/31.
 */
@Slf4j
public class UserInfoServiceTest extends JUnitServiceBase {


    /* @Slf4j这个注解是使用lombok ==  private static final Logger log = LoggerFactory.getLogger(UserInfoServiceTest.class);*/
    @Resource
    private IUserInfoService iUserInfoService;

    @Test
    public void getUserInfoById() throws Exception {
        User user = iUserInfoService.getUserInfoById(1);
        log.info(user.toString());
    }


    @Test
    public void findAll() throws Exception {
        log.info(iUserInfoService.findAll().toString());
    }

    @Test
    public void addUser() throws Exception {
        User user = new User();
        user.setName("wangwang");
        user.setAddress("zunyi");
        user.setAge(5);
        iUserInfoService.addUser(user);
    }

    @Test
    public void addUsers() throws Exception {
        List<User> userList = new ArrayList<User>(5);
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setAge(i);
            user.setAddress("zunyi" + i);
            user.setName("wangji" + i);
            userList.add(user);
        }
        iUserInfoService.addUsers(userList);
    }

    @Test
    public void deleteById() throws Exception {
        iUserInfoService.deleteById(3);
    }

    @Test
    public void deleteByIds() throws Exception {
        List<Integer> ids = new ArrayList<Integer>();
        ids.add(10);
        ids.add(11);
        iUserInfoService.deleteByIds(ids);
    }

    @Test
    public void deleteByArrayIds() throws Exception {
        Integer[] ids = {8, 9};
        iUserInfoService.deleteByArrayIds(ids);
    }

    @Test
    public void deleteByMapIds() throws Exception {
        Integer[] ids = {8, 9};
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("ids", ids);
        iUserInfoService.deleteByMapIds(map);
    }

}

9.说了这么多其实还是自己动手实践一下试试比较好,使用才知道坑点。github账号中有相应的init.sql 使用的数据库是mysql,你修改一下db.properties中的用户名密码就可以使用了吧,然后进行简单测试spring mvc 和spring test 吧!

地址:https://github.com/WangJi92/mybatits-study/tree/master/mybatis-study/study-4-spring