(7)MyBatis之与Spring整合

来源:互联网 发布:新通教育 知乎 编辑:程序博客网 时间:2024/05/11 18:06

  • 引言
  • MyBatis之与Spring整合
    • 1 创建我们的数据库
    • 2 pomxml文件
    • 3 创建持久化类Student
    • 4 创建映射文件StudentMapperxml
    • 5 创建BaseMapper
    • 6 创建StudentMapper
      • 61 向映射文件添加SQL语句
    • 7 创建Spring-MyBatis配置文件
      • 71 JDBC配置
      • 72 Spring-MyBatis配置
    • 8 测试Mapper测试是否成功
      • 81 测试代码
      • 82 测试成功
    • 9 创建BaseService如果测试成功
    • 10 创建BaseServiceImpl
    • 10 创建StudentService
    • 11 创建StudentServiceImpl
    • 12 创建Springxml文件
    • 13 创建测试类查看是否整合成功
    • 14 整合成功
  • 代码下载
      • 本博客的代码下载地址为MyBatis之与Spring整合

1.引言

在本篇博客中主要介绍:MyBatisSpring的整合

SpringMyBatis的整合主要注意一下几点:

  • MyBatis的配置在Spring配置文件中
  • MyBatis的实现类有Spring动态代理生成
  • MyBatis的事务要交给Spring来管理

2.MyBatis之与Spring整合

2.1 创建我们的数据库

DROP DATABASE IF EXISTS school;CREATE DATABASE IF NOT EXISTS school;USE school;CREATE TABLE `student`(`sid` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,`sname` VARCHAR(32) ,`hobit` VARCHAR(20));INSERT INTO `student` (`sid`,`sname`,`hobit`)VALUES(1,"aaa","喜欢玩游戏");INSERT INTO `student` (`sid`,`sname`,`hobit`)VALUES(2,"bbb","喜欢学习");INSERT INTO `student` (`sid`,`sname`,`hobit`)VALUES(3,"ccc","喜欢打篮球");

2.2 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>mybatis_spring</groupId>    <artifactId>mybatis_spring</artifactId>    <version>1.0-SNAPSHOT</version>    <packaging>war</packaging>    <properties>        <!-- spring版本号 -->        <spring.version>4.0.2.RELEASE</spring.version>        <!-- mybatis版本号 -->        <mybatis.version>3.2.6</mybatis.version>        <!-- log4j日志文件管理包版本 -->        <slf4j.version>1.7.7</slf4j.version>        <log4j.version>1.2.17</log4j.version>    </properties>    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.11</version>            <!-- 表示开发的时候引入,发布的时候不会加载此包 -->            <scope>test</scope>        </dependency>        <!-- spring核心包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</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-oxm</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-webmvc</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aop</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-test</artifactId>            <version>${spring.version}</version>        </dependency>        <!-- mybatis核心包 -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>${mybatis.version}</version>        </dependency>        <!-- mybatis/spring包 -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>1.2.2</version>        </dependency>        <!-- 导入Mysql数据库链接jar包 -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.30</version>        </dependency>        <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->        <dependency>            <groupId>commons-dbcp</groupId>            <artifactId>commons-dbcp</artifactId>            <version>1.2.2</version>        </dependency>        <!-- JSTL标签类 -->        <dependency>            <groupId>jstl</groupId>            <artifactId>jstl</artifactId>            <version>1.2</version>        </dependency>        <!-- 日志文件管理包 -->        <!-- log start -->        <dependency>            <groupId>log4j</groupId>            <artifactId>log4j</artifactId>            <version>${log4j.version}</version>        </dependency>        <!-- 格式化对象,方便输出日志 -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.1.41</version>        </dependency>        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-api</artifactId>            <version>${slf4j.version}</version>        </dependency>        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-log4j12</artifactId>            <version>${slf4j.version}</version>        </dependency>        <!-- 映入JSON -->        <dependency>            <groupId>org.codehaus.jackson</groupId>            <artifactId>jackson-mapper-asl</artifactId>            <version>1.9.13</version>        </dependency>    </dependencies>    <build>        <finalName>mybatis_spring</finalName>    </build></project>

2.3 创建持久化类(Student

package com.skd.domain;public class Student {    private Integer sid;    private String sname;    private String hobit;    public Integer getSid() {        return sid;    }    public void setSid(Integer sid) {        this.sid = sid;    }    public String getSname() {        return sname;    }    public void setSname(String sname) {        this.sname = sname == null ? null : sname.trim();    }    public String getHobit() {        return hobit;    }    public void setHobit(String hobit) {        this.hobit = hobit == null ? null : hobit.trim();    }}

2.4 创建映射文件(StudentMapper.xml

<?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" ><mapper namespace="com.skd.mapper.StudentMapper" >  <resultMap id="BaseResultMap" type="com.skd.domain.Student" >    <id column="sid" property="sid" jdbcType="INTEGER" />    <result column="sname" property="sname" jdbcType="VARCHAR" />    <result column="hobit" property="hobit" jdbcType="VARCHAR" />  </resultMap></mapper>

2.5 创建BaseMapper

package com.skd.mapper;public interface BaseMapper<T> {    //添加单个对象    public int insert(T entity);    //修改单个对象    public int update(T entity);    //删除单个对象    public int delete(T entity);    //通过主键(数组)批量删除数据    public int deleteList(String [] pks);    //根据id查询单个对象    public T select(Integer id);}

2.6 创建StudentMapper

package com.skd.mapper;import com.skd.domain.Student;public interface StudentMapper extends BaseMapper<Student> {}

2.6.1 向映射文件添加SQL语句

<select id="select" parameterType="int" resultMap="BaseResultMap">    select * from student where sid=#{id}</select>

2.7 创建Spring-MyBatis配置文件

2.7.1 JDBC配置

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/schoolusername=rootpassword=root

2.7.2 Spring-MyBatis配置

<?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:tx="http://www.springframework.org/schema/tx"       xsi:schemaLocation="http://www.springframework.org/schema/beans                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                        http://www.springframework.org/schema/context                        http://www.springframework.org/schema/context/spring-context-3.1.xsd                        http://www.springframework.org/schema/tx                        http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">    <!-- 引入配置文件 -->    <bean id="propertyConfigurer"          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="location" value="classpath:jdbc.properties" />    </bean>    <!--MySQL数据库的链接信息-->    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"          destroy-method="close">        <property name="driverClassName" value="${driver}" />        <property name="url" value="${url}" />        <property name="username" value="${username}" />        <property name="password" value="${password}" />    </bean>    <!--让Spring创建sqlSessionFactory对象-->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource" />        <property name="mapperLocations" value="classpath:com/skd/mapper/*.xml"></property>    </bean>    <!--让Spring为Mapper接口生成动态代理-->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="basePackage" value="com.skd.mapper" />        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>    </bean>    <!--让Spring管理事务-->    <bean id="transactionManager"          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource" />    </bean>    <!--配置扫描式事务-->    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /></beans>

2.8 测试Mapper测试是否成功

2.8.1 测试代码

import com.skd.mapper.StudentMapper;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={"classpath:spring-mybatis.xml"})public class TestMapper {    @Autowired    private StudentMapper studentMapper;    @Test    public void test(){        studentMapper.select(1);    }}

2.8.2 测试成功

这里写图片描述

2.9 创建BaseService(如果测试成功)

package com.skd.service;public interface BaseService<T> {    //添加单个对象    public int insert (T entity) throws Exception;    //修改单个对象    public int update(T entity) throws Exception;    //删除单个对象    public int delete(T entity) throws Exception;    //通过主键(数组)批量删除数据    public int deleteList(String [] pks) throws Exception;    //查询单个对象    public T select(Integer id);}

2.10 创建BaseServiceImpl

package com.skd.service.impl;import com.skd.mapper.BaseMapper;import com.skd.service.BaseService;import org.springframework.transaction.annotation.Transactional;public abstract class BaseServiceImpl<T> implements BaseService<T>{    public abstract BaseMapper<T> getMapper();    @Transactional(readOnly=false)    public int insert(T entity) throws Exception {        return getMapper().insert(entity);    }    @Transactional(readOnly=false)    public int update(T entity) throws Exception {        return getMapper().update(entity);    }    @Transactional(readOnly=false)    public int delete(T entity) throws Exception {        return getMapper().delete(entity);    }    @Transactional(readOnly=false)    public int deleteList(String[] pks) throws Exception {        return getMapper().deleteList(pks);    }    public T select(Integer id) {        return getMapper().select(id);    }}

2.10 创建StudentService

package com.skd.service;import com.skd.domain.Student;public interface StudentService extends BaseService<Student>{}

2.11 创建StudentServiceImpl

package com.skd.service.impl;import com.skd.domain.Student;import com.skd.mapper.BaseMapper;import com.skd.mapper.StudentMapper;import com.skd.service.StudentService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class StudentServiceImpl extends BaseServiceImpl<Student> implements StudentService{    @Autowired    private StudentMapper studentMapper;    @Override    public BaseMapper<Student> getMapper() {        return studentMapper;    }}

2.12 创建Spring.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"       xsi:schemaLocation="http://www.springframework.org/schema/beans                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                        http://www.springframework.org/schema/context                        http://www.springframework.org/schema/context/spring-context-3.1.xsd">    <!-- 自动扫描 -->    <context:component-scan base-package="com.skd.service.impl" />    <import resource="spring-mybatis.xml"></import> </beans>

2.13 创建测试类(查看是否整合成功)

import com.skd.service.StudentService;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={"classpath:Spring.xml"})public class TestService {    @Autowired    private StudentService studentService;    @Test    public void test(){        System.out.print(studentService.select(1));    }}

2.14 整合成功

这里写图片描述

3.代码下载

本博客的代码下载地址为:MyBatis之与Spring整合

1 0
原创粉丝点击