8 整合MyBatis

8 整合MyBatis

module:spring-10-mybatis

1、导入相关jar包

junit

<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
</dependency>

mybatis

<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.5.2</version>
</dependency>

mybatis-spring 整合包 【重点】

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

mysql-connector-java

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>

Spring 相关

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        <!--Spring操作数据库的话,还需要一个spring-jdbc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>

aspectJ AOP 织入器

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

配置Maven静态资源过滤问题!

    <!--资源过滤-->
    <!--在build中配置resource,来防止我们资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

2、编写配置文件

3、代码实现

MyBatis-Spring 学习

官网:http://mybatis.org/spring/zh/index.html

什么是 MyBatis-Spring ?

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。

知识基础

MyBatis-Spring 需要以下版本:

MyBatis-Spring MyBatis Spring Framework Spring Batch Java
2.0 3.5+ 5.0+ 4.0+ Java 8+
1.3 3.4+ 3.2.2+ 2.1+ Java 6+

如果使用 Maven 作为构建工具,仅需要在 pom.xml 中加入以下代码即可:

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.5</version>
        </dependency>

要和 Spring 一起使用 MyBatis,需要在 Spring 应用上下文中定义至少两样东西:一个 SqlSessionFactory 和至少一个数据映射器类。

在 MyBatis-Spring 中,可使用SqlSessionFactoryBean来创建 SqlSessionFactory。要配置这个工厂 bean,只需要把下面代码放在 Spring 的 XML 配置文件中:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 <property name="dataSource" ref="dataSource" />
</bean>

注意:SqlSessionFactory需要一个 DataSource(数据源)。这可以是任意的 DataSource,只需要和配置其它 Spring 数据库连接一样配置它就可以了。

在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。

在 MyBatis 中,你可以使用 SqlSessionFactory 来创建 SqlSession。一旦你获得一个 session 之后,你可以使用它来执行映射了的语句,提交或回滚连接,最后,当不再需要它的时候,你可以关闭 session。

一个常用的属性是 configLocation,它用来指定 MyBatis 的 XML 配置文件路径。它在需要修改 MyBatis 的基础配置非常有用。通常,基础配置指的是 < settings> 或 < typeAliases>元素。

需要注意的是,这个配置文件并不需要是一个完整的 MyBatis 配置。确切地说,任何环境配置(),数据源()和 MyBatis 的事务管理器()都会被忽略。SqlSessionFactoryBean 会创建它自有的 MyBatis 环境配置(Environment),并按要求设置自定义环境的值。

SqlSessionTemplate 是 MyBatis-Spring 的核心。作为 SqlSession 的一个实现,这意味着可以使用它无缝代替你代码中已经在使用的 SqlSession。

模板可以参与到 Spring 的事务管理中,并且由于其是线程安全的,可以供多个映射器类使用,你应该总是用 SqlSessionTemplate 来替换 MyBatis 默认的 DefaultSqlSession 实现。在同一应用程序中的不同类之间混杂使用可能会引起数据一致性的问题。

可以使用 SqlSessionFactory 作为构造方法的参数来创建 SqlSessionTemplate 对象。

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

现在,这个 bean 就可以直接注入到你的 DAO bean 中了。你需要在你的 bean 中添加一个 SqlSession 属性,就像下面这样:

public class UserDaoImpl implements UserDao {

    private SqlSession sqlSession;

    public void setSqlSession(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }
    public User getUser(String userId) {
        return sqlSession.getMapper...;
}
}

按下面这样,注入 SqlSessionTemplate:

<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">
 <property name="sqlSession" ref="sqlSession" />
</bean>

整合实现一

1、Spring 配置文件 spring-dao.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url"
                  value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&verifyServerCertificate=false&useUnicode=true&characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="1234"/>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--定位mybatis的配置文件-->
        <property name="configLocation" value="mybatis-config.xml"/>
        <!--注册mapper-->
        <property name="mapperLocations" value="classpath:com/zzb/mapper/*.xml"/>
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
</beans>

2、编写mybatis的配置文件,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>
        <package name="com.zzb.pojo"/>
    </typeAliases>

<!--    <settings>-->
<!--        <setting name="" value=""/>-->
<!--    </settings>-->

</configuration>

在mybatis的配置文件中,仅保留一些配置(别名,设置等)

3、实体类

package com.zzb.pojo;

public class User {

    private int id;
    private String name;
    private String pwd;

    public User() {
    }

    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

4、编写UserMapper接口及UserMapper.xml配置文件

package com.zzb.mapper;

import com.zzb.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> getUser();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzb.mapper.UserMapper">

    <select id="getUser" resultType="User">
        select * from user
    </select>
</mapper>

5、编写UserMapper接口的实现类,私有化sqlSessionTemplate

package com.zzb.mapper;

import com.zzb.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;

import java.util.List;

public class UserMapperImpl implements UserMapper{

    private SqlSessionTemplate sqlSession;

    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }

    public List<User> getUser() {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.getUser();
        return users;
    }
}

6、编写Spring总的配置文件applicationContext.xml,注册bean,引入spring-dao.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--引入 spring-dao.xml-->
    <import resource="spring-dao.xml"/>

    <bean id="userMapperImpl" class="com.zzb.mapper.UserMapperImpl">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>

</beans>

7、测试

    @Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper mapper = context.getBean("userMapperImpl", UserMapper.class);
        List<User> users = mapper.getUser();
        for (User user : users) {
            System.out.println(user);
        }
    }

测试结果:

User{id=1, name='BG', pwd='123456'}
User{id=2, name='马保国', pwd='WuDe'}
User{id=3, name='张三', pwd='526553'}
User{id=4, name='王五', pwd='123444'}

整合方式二

mybatis-spring1.2.3版以上的才有这个。

官方文档截图:

1、创建 UserMapperImpl2.java

package com.zzb.mapper;

import com.zzb.pojo.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;

public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
    public List<User> getUser() {
        return getSqlSession().getMapper(UserMapper.class).getUser();
    }
}

2、在 applicationContext.xml 中注册bean

注意:依赖注入的参数为:sqlSessionFactory

    <bean id="userMapperImpl2" class="com.zzb.mapper.UserMapperImpl2">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

3、测试

    @Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper mapper2 = context.getBean("userMapperImpl2", UserMapper.class);
        List<User> users = mapper2.getUser();
        for (User user : users) {
            System.out.println(user);
        }
    }

测试结果:

User{id=1, name='BG', pwd='123456'}
User{id=2, name='马保国', pwd='WuDe'}
User{id=3, name='张三', pwd='526553'}
User{id=4, name='王五', pwd='123444'}

总结:

至此,完成了mybatis与Spring的整合,整合过程中,可以完全丢弃掉mybatis的配置文件,除了上述方式可以实现整合外,还可以使用注解的方式实现。

(0)

相关推荐

  • MyBatis使用注解开发

    MyBatis使用注解开发 面向接口编程 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , ...

  • java之ssm项目的xml文件

    java之ssm项目的xml文件

  • 5 ResultMap

    ResultMap 要解决的问题,属性名和数据库表格字段名不一致问题 在项目中,新建一个模块mybatis-02,内容和mybatis-01一样. 1.查看数据库user表的字段名 2.修改Java中 ...

  • eclipse构建maven+spring+mybatis控制台应用。

    使用maven+spring+mybatis构建控制台应用,方便调试spring或者mybatis代码,或者编写测试代码. 一,首先使用eclipse构建maven项目.详细教程. 二,在你的 pom ...

  • 给小白演示 分库分表案例

    大家好,我是老田,受群里小伙伴之邀,搞一个分库分表案例,这样让很多没用过分库分表的心里也有个底,不然永远看到的都是网上的各种概念和解决方案性的文章. 说明:由于是给小白看的,所以大神勿喷,建议出门左转 ...

  • springcloud笔记之服务提供者与消费者

    文章目录 一.SpringCloud是什么? 二.使用步骤 1.构建环境 2.springcloud-provider-emp-8001 2.springcloud-consumer-emp-8001 ...

  • Mybatis的CRUD

    Mybatis的CRUD

  • Spring整合MyBatis

    Spring整合MyBatis

  • 【干货】Spring Boot 整合 Mybatis

    通过在前面的文章中我们已经了解到如何快速构建一个基于 Spring Boot 架构的 Web 服务以及接口开发: [干货]如何快速构建SpringBoot Web服务 基于 Spring Boot 的 ...

  • spring整合mybatis的流程步骤

    spring整合mybatis 创建流程 1.创建项目 导入依赖 POM文件 <?xml version="1.0" encoding="UTF-8"?& ...

  • Spring 整合MyBatis

    Spring 整合MyBatis 1.在pom.xml中导入依赖包 导入依赖包后,会自动下载,如果代码一直是红的 刷新Maven就行了 <dependencies> <depende ...

  • springboot整合mybatis

    springboot整合mybatis

  • SpringBoot(三)SpringBoot整合MyBatis

    SpringBoot(三)SpringBoot整合MyBatis MyBatis 是一款优秀的持久层框架,Spring Boot官方虽然没有对MyBatis进行整合,但是MyBatis团队自行适配了对 ...

  • spring与mybatis整合详解

    spring与mybatis整合详解 在数据库dbmis中创建student表: 建立Maven项目,创建Dao层,POJO层,Controller层,并配置Mapper.applicationCon ...

  • SpringBoot中mybatis spring技术整合实现商品品牌模块的CRUD操作

    来源:https://www.icode9.com/content-4-842551.html

  • Mybatis 整合 ehcache缓存

    自定义缓存 - ehcache Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java EE和轻量级容器 导包 <!-- https://mvnrepository.c ...