Spring Boot集成Mybatis的配置方法

作者:禅与计算机程序设计艺术

1.简介

Spring Boot是当下最流行的Java Web开发框架之一,而 MyBatis 是最知名的 ORM 框架。在实际的项目开发中,我们经常会遇到要整合 MyBatis 和 Spring Boot 的情况,这时,就需要对 MyBatis 的相关配置进行正确的操作了。 本文将详细介绍 Spring Boot 如何集成 MyBatis ,并提供配置方法。

2.前提条件

阅读本文前,请确保以下条件已经具备:

  • 有一定 Spring Boot 使用经验;
  • 有 MyBatis 的使用经验;
  • 对 MyBatis 的基本配置、配置文件、映射文件等有一定了解;

3.Spring Boot集成MyBatis概述

Spring Boot是一个用来快速搭建各种各样微服务应用的脚手架,它可以帮助开发者快速地创建基于Spring Framework的应用程序。由于其自带的自动化配置功能,使得集成MyBatis变得异常简单。只需添加 MyBatis starter依赖包,然后在 application.properties 配置文件中进行必要的 MyBatis 配置即可。 Spring Boot 与 MyBatis 的集成主要包括以下几个方面:

(1)Maven坐标引入

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot-starter.version}</version>
        </dependency>

        <!-- mybatis 版本 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>

        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

其中 ${mybatis-spring-boot-starter.version} 表示 MyBatis Spring Boot Starter 版本号,${mybatis.version}表示 MyBatis 版本号。

注意:如果您的 MyBatis 版本比较低(比如3.x),则不建议采用上面的 starter,而是直接依赖 MyBatis 本身,这主要依赖于 MyBatis 配置文件的位置以及路径。

(2)application.properties 文件配置

如之前所说,Spring Boot 会自动识别 MyBatis 的配置项并加载它们。但是,我们还需要设置一些 MyBatis 相关的属性来告诉 MyBatis 从哪里加载配置以及什么样的数据库适用。 例如:

#mybatis相关配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=<PASSWORD>

#mybatis扫描路径
mybatis.type-aliases-package=com.example.demo.entity

#mybatismapper扫描路径
mybatis.mapper-locations=classpath:/mybatis/**/*Mapper.xml

这些配置项主要用于指定 MyBatis 在初始化时应该连接哪个数据库,并且通过 mybatis. 开头的属性指定 MyBatis 配置信息。 其中:

  • spring.datasource 指定了 MyBatis 连接数据库的配置;
  • mybatis.type-aliases-package 设置 MyBatis 别名扫描路径;
  • mybatis.mapper-locations 设置 MyBatis Mapper XML 文件扫描路径。

当然,除了这些配置项,我们也可以在 @MapperScan 注解中指定 MyBatis 扫描路径,如下所示:

@SpringBootApplication
@MapperScan("com.example.demo.dao") //指定mybatis mapper扫描路径
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

(3)配置 MyBatis 数据源

在 Mybatis 的 xml 中,<mapper> 的 namespace 属性值是 http://mybatis.org/spring/schema/mybatis-spring。通过这种方式,Mybatis 可以根据 namespace 来定位 MyBatis 配置文件。因此,我们需要创建一个 MyBatis 配置文件来描述 MyBatis 应该如何从数据源中获取数据,这个 MyBatis 配置文件通常被命名为 MyBatisConfig.java。这里我们假设 MyBatisConfig.java 的代码如下:

@Configuration
@MapperScans({ @MapperScan("com.example.demo.dao"),
               @MapperScan("com.example.demo.otherdao") }) //支持多模块扫描
public class MyBatisConfig extends org.apache.ibatis.session.Configuration {

    @Autowired
    private DataSource dataSource;

    /**
     * 初始化mybatis
     */
    @PostConstruct
    public void init() throws Exception{
        this.setEnvironment(new Environment("development", new JdbcTransactionFactory(), dataSource));
        this.setTypeAliasesPackage("com.example.demo.entity");
        this.addMappers("com.example.demo.dao","com.example.demo.otherdao"); //多模块扫描
        this.setLazyLoadingEnabled(false);
        this.setUseGeneratedKeys(false);
    }
}

该类继承自 org.apache.ibatis.session.Configuration,同时又实现了 Spring Bean 接口,通过 @Autowired 注入了 Spring 的 DataSource 对象,并重载了父类的一些方法来完成 MyBatis 的初始化工作。

(4)创建 MyBatis Mapper 接口及 XML 文件

最后一步,我们需要创建一个 MyBatis Mapper 接口和一个对应的 MyBatis XML 文件。如下所示:

// 实体类
@Data
public class Person {
    private Integer id;
    private String name;
    private Integer age;
}
// Mapper 接口
public interface PersonDao {
    List<Person> selectAll();
}
<!-- Mapper 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.example.demo.dao.PersonDao">
  <select id="selectAll" resultType="com.example.demo.entity.Person">
      SELECT * FROM person
  </select>
</mapper>

在上面例子中,我们定义了一个 Person 实体类,一个 PersonDao 接口,以及一个对应的 PersonDao.xml 文件。

猜你喜欢

转载自blog.csdn.net/universsky2015/article/details/133504838
今日推荐