MyBatis(3.2.3) - Integration with Spring

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis(3.2.3) - Integration with Spring相关的知识,希望对你有一定的参考价值。

MyBatis-Spring is a submodule of the MyBatis framework, which provides seamless integration with the popular dependency injection framework, Spring.

 

1. If you are using the Maven build tool, you can configure Mybatis‘ spring dependency as follows:

技术分享
<properties>
    <spring.version>3.2.3.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.2.1</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-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.6</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.22</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.14.4</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>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.1</version>
    </dependency>
</dependencies>
View Code

2. The JavaBean:

 

package com.huey.hello.mybatis.beans;

import java.io.Serializable;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Department implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    private int did;
    private String deptName;
    private String address;
    private String tel;
}

 

3. The mapper interface:

 

package com.huey.hello.mybatis.mapper;

import com.huey.hello.mybatis.beans.Department;

public interface DepartmentMapper {
    
    public int insertDepartment(Department department);
    
    public Department getDepartmentById(int did);
    
}

 

4. Configure mapped statements in Mapper XML files:

 

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

<!--注意:此处的命名空间是 DepartmentMapper 的全限定类名-->
<mapper namespace="com.huey.hello.mybatis.mapper.DepartmentMapper">

    <cache size="512"></cache>

    <!-- ResultMaps 被用来将 SQL SELECT 语句的结果集映射到 JavaBean 的属性中 -->
    <resultMap type="Department" id="deptMap">
        <!-- 映射主键 -->
        <id property="did" column="did" />
        <!-- 映射普通字段 -->
        <result property="deptName" column="dept_name"/>
        <result property="address" column="address"/>
        <result property="tel" column="tel"/>
    </resultMap>

    <!-- 添加部门记录 -->
    <!-- id 名称需要与 DepartmentMapper 中的方法签名一致 -->
    <!-- Department 这一别名在 mybatis-config.xml 中配置 -->
    <insert id="insertDepartment" parameterType="Department" useGeneratedKeys="true" keyProperty="did">
        insert into department(dept_name, address, tel)
        values(#{deptName}, #{address}, #{tel})
    </insert>
    
    <!-- 根据 ID 查询部门记录 -->
    <select id="getDepartmentById" parameterType="int" resultMap="deptMap" useCache="true">
        select * from department where did=#{did}
    </select>

</mapper>

 

5. Configure the mybatis-config.xml:

 

<?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>

    <!-- 设置别名 -->
    <typeAliases>
        <typeAlias type="com.huey.hello.mybatis.beans.Department" alias="Department" />
        <typeAlias type="com.huey.hello.mybatis.beans.Employee" alias="Employee" />
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>

    <!-- mapper 对应的 xml 配置文件 -->
    <mappers>
        <package name="com.huey.hello.mybatis.mapper"/>
    </mappers>
    
</configuration>

 

6. jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/mybatis
jdbc.username=root
jdbc.password=root

7. Configure  the applicationContext.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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context" 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.0.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- 启动@AspectJ支持 -->
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <!-- 自动扫描指定包及其子包下的所有Bean类 -->
    <context:component-scan base-package="com.huey.hello.mybatis" />
    <!-- 将配置值具体化到一个属性文件中,并且使用属性文件的key名作为占位符 -->
    <context:property-placeholder location="classpath:jdbc.properties" />

    <!-- 配置数据源  -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!-- 配置 SqlSessionFactory 交由 Spring 管理 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis-config.xml" />
    </bean>
    
    <!-- 配置 SqlSession -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>

    <!-- 扫描并注册包中的映射器  Mapper 接口 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.huey.hello.mybatis.mapper" />
    </bean>

    <!-- 将事务交由 Spring 管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 启用 Spring @Transactional 注解 -->
    <tx:annotation-driven />

</beans>

8. The business logic

package com.huey.hello.mybatis.serv;

import javax.annotation.Resource;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.huey.hello.mybatis.beans.Department;
import com.huey.hello.mybatis.mapper.DepartmentMapper;

@Service("deptService")
@Transactional
public class DepartmentService {
    
    @Resource
    SqlSession sqlSession;
    
    public int createDepartment(Department department) {
        int result = 0;
        DepartmentMapper deptMapper = sqlSession.getMapper(DepartmentMapper.class);
        result = deptMapper.insertDepartment(department);
        return result;
    }
    
    public Department getDepartmentById(int did) {
        Department department = null;
        DepartmentMapper deptMapper = sqlSession.getMapper(DepartmentMapper.class);
        department = deptMapper.getDepartmentById(did);
        return department;
    }

}

9. AbstractJUnit4SpringContextTests

package com.huey.hello.spring;

import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;

@ContextConfiguration(locations={"classpath*:applicationContext*.xml"})
public class SpringTest extends AbstractJUnit4SpringContextTests {

}

10. JUnit Test:

package com.huey.hello.mybatis.serv;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import com.huey.hello.mybatis.beans.Department;
import com.huey.hello.spring.SpringTest;

public class DepartmentServiceTest extends SpringTest {
    
    @Autowired
    DepartmentService deptService;
    
    @Test
    public void testCreateDepartment() {
        Department department = new Department(0, "组织部", "XX 路 ZZ 号", "011-99999");
        deptService.createDepartment(department);
        System.out.println(department);
    }
    
    @Test
    public void testGetDepartmentById() throws Exception {
        int did = 1001;
        Department department = deptService.getDepartmentById(did);
        if (department != null) {
            System.out.println(department);
        }
    }

}

 

以上是关于MyBatis(3.2.3) - Integration with Spring的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis(3.2.3) - Cache

MyBatis(3.2.3) - Configuring MyBatis using XML, Properties

MyBatis(3.2.3) - hello world

MyBatis(3.2.3) - Integration with Spring

探囊取物,取出MyBatis内部事务

MyBatis(3.2.3) - Paginated ResultSets using RowBounds