简易指南:使用Spring Boot整合MyBatis轻松优雅

当使用Spring Boot整合MyBatis时,以下是典型的执行流程:

  1. 添加依赖:在Spring Boot项目的pom.xml文件中,添加MyBatis和数据库驱动的相关依赖。通常使用spring-boot-starter-data-mybatis作为主要依赖,同时根据所使用的数据库选择相应的驱动依赖。

  2. 配置数据源:在application.properties(或application.yml)中配置数据库连接信息,包括URL、用户名、密码等。还可以配置连接池的参数,如最大连接数、空闲连接超时等。

  3. 创建实体类:创建与数据库表对应的实体类(POJO),并在实体类中添加注解或XML映射文件来描述字段与表的映射关系。

  4. 创建Mapper接口:创建Mapper接口,用于定义数据访问的接口。可以使用注解或XML文件来编写SQL语句。

  5. 配置MyBatis:在Spring Boot的配置类中,使用@MapperScan注解指定Mapper接口所在的包路径,使得MyBatis能够扫描并注册Mapper接口的实现。

  6. 编写业务逻辑:在Service层编写业务逻辑,注入Mapper接口的实例,通过调用Mapper接口的方法来访问数据库。

  7. 启动应用程序:通过Spring Boot的启动类启动应用程序,Spring Boot会自动进行初始化和配置。

  8. 执行SQL操作:在业务逻辑中,调用Mapper接口的方法进行数据库操作。MyBatis会根据Mapper接口的定义,动态生成相应的SQL语句,执行SQL操作并返回结果。

整合完成后,Spring Boot会负责创建数据源、管理事务、自动扫描Mapper接口等。MyBatis负责执行SQL操作、映射结果集到实体类中。

总体而言,Spring Boot整合MyBatis简化了项目的配置和集成过程,提供了便捷的开发方式,使得数据库操作更加高效和易于管理。同时,Spring Boot的自动化配置和约定优于配置的原则,减少了繁琐的配置,提高了开发效率。

添加依赖

部分如下所示:

<dependencies>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starterartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-jdbcartifactId>
        <scope>compilescope>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-testartifactId>
        <scope>testscope>
    dependency>
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <version>1.18.20version>
    dependency>
    
    <dependency>
        <groupId>org.mybatis.spring.bootgroupId>
        <artifactId>mybatis-spring-boot-starterartifactId>
        <version>2.3.1version>
    dependency>
    
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>5.1.46version>
    dependency>
dependencies>

在这个示例中,展示了一组常用的 Spring Boot 依赖项,用于支持 Spring Boot、JDBC、测试、Lombok、MyBatis 和 MySQL 驱动。每个 元素指定了相应的依赖项的 groupIdartifactIdversion

这些依赖项的作用如下:

  • spring-boot-starter:Spring Boot 的核心启动器,提供了基本的 Spring 功能和配置。

  • spring-boot-starter-jdbc:Spring Boot 的 JDBC 启动器,用于支持 JDBC 数据库访问。

  • spring-boot-starter-test:Spring Boot 的测试启动器,用于支持测试框架和工具。

  • lombok:Lombok 是一个 Java 库,通过注解方式自动生成 Java 类的 Getter、Setter、toString 等方法,简化了代码编写。

  • mybatis-spring-boot-starter:MyBatis 的 Spring Boot 启动器,提供了 MyBatis 在 Spring Boot 中的集成支持。

  • mysql-connector-java:MySQL 驱动程序,用于与 MySQL 数据库进行连接和交互。

通过在 Maven 或 Gradle 项目的依赖配置中添加这些依赖项,可以满足 Spring Boot 和 MyBatis 在项目中的依赖需求,从而支持开发和运行应用程序。请确保版本号与您的项目需求匹配,并根据需要进行调整和修改。

项目结构

配置文件

properties文件

配置数据源:在application.properties(或application.yml)中配置数据库连接信息,包括URL、用户名、密码等。还可以配置连接池的参数,如最大连接数、空闲连接超时等。

以下是application.properties文件内容:

# 设置连接数据库的参数
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql:///db_exam?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

# MyBatis配置
mybatis.mapper-locations=classpath:mappers/*.xml

在这个配置文件中,我们可以看到以下配置项:

注意:mysql报错

<dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
            <scope>compilescope>
        dependency>

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

  • spring.datasource.driver-class-name:指定数据库驱动的类名,这里是MySQL数据库的驱动类名。
  • spring.datasource.url:指定数据库的连接URL,包括数据库名、字符编码设置和其他参数。
  • spring.datasource.username:指定数据库的用户名。
  • spring.datasource.password:指定数据库的密码。

以上这些配置项用于连接数据库,告知应用程序如何连接到数据库服务器。

另外,还有一项MyBatis的配置项:

  • mybatis.mapper-locations:指定MyBatis映射文件的路径,使用通配符*.xml表示映射文件存放在mappers目录下的所有XML文件。

这样,MyBatis会在启动时自动加载并解析这些映射文件,以便与数据库进行交互。这些映射文件包含了SQL语句和结果映射规则,用于实现数据访问和对象关系映射。

注意:以上内容是基于提供的配置信息进行整理的,确保配置的准确性和适用性。在实际使用中,可能需要根据具体情况进行调整和修改。

创建mapper接口编写XML文件

Mapper接口

实体类 com.itheima.bootmybatis.pojo.User

@Data
public class User {
    private Integer id;
    private String username;
    private Integer gender;
    private Date birthday;
    private String headImg;
    private Integer status;
}

在这个实体类中,使用了 Lombok 的 @Data 注解,它会自动生成常用的 Getter、Setter、toString 等方法,简化了实体类的编写。

Mapper 接口 com.itheima.bootmybatis.mapper.UserMapper

public interface UserMapper {
    User findUserById(Integer id);
}

在这个 Mapper 接口中,定义了一个名为 findUserById 的方法,它与 SQL 映射文件中的 id 属性对应。这个方法用于根据用户ID查询用户信息,并返回一个 User 对象。

需要注意的是,Mapper 接口中的方法名和 SQL 映射文件中的 id 属性需要保持一致,这样 MyBatis 才能正确地将方法与 SQL 语句进行关联。

通过以上步骤,我们创建了一个实体类和对应的 Mapper 接口。实体类用于封装数据库中的用户信息,Mapper 接口定义了数据库操作的方法。在 MyBatis 中,我们可以通过调用 Mapper 接口的方法来执行对应的数据库操作,实现数据的查询、插入、更新等功能。

XML文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RlfIWwI3-1689816115465)(img\映射文件.png)]

UserMapper.xml文件内容:


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.bootmybatis.mapper.UserMapper">
    <select id="findUserById" resultType="com.itheima.bootmybatis.pojo.User">
        SELECT * FROM tb_user WHERE id =#{id};
    select>
mapper>

在这个映射文件中,我们可以看到以下内容:

  • mapper标签:指定了命名空间(namespace)为com.itheima.bootmybatis.mapper.UserMapper,该命名空间用于与Mapper接口进行关联。

  • select标签:定义了一个查询语句,通过id属性指定了语句的名称(findUserById),并通过resultType指定了查询结果的类型(com.itheima.bootmybatis.pojo.User)。

  • SQL语句:在select标签的内容中,编写了具体的SQL查询语句。

此映射文件将用于MyBatis与数据库交互时,根据findUserById语句查询tb_user表中的数据,并将结果映射到com.itheima.bootmybatis.pojo.User类的对象中。你可以根据具体需求编写更多的SQL语句,定义更多的CRUD操作或其他数据库操作。

注意:使用注解来映射简单语向会使代码显得更加简洁,但对于稍微复杂一点的语句,用注释不仅力不以心,还会让你本就复杂的 QL 语向更加混乱不堪。因此,如果你需要做一些很复杂的操作,最好用XML来映射语句

启动类

启动类:

package com.example.mybatis_demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.mybatis_demo.mapper")
public class MybatisDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisDemoApplication.class, args);
    }

}

这段代码是一个基本的 Spring Boot 应用程序的入口类 MybatisDemoApplication,它使用了 MyBatis 框架进行数据访问。

  1. @SpringBootApplication:这个注解表示这是一个 Spring Boot 应用程序的主类。它标识着这个类是应用程序的入口点,并启用了自动配置、组件扫描和其他 Spring Boot 特性。

  2. @MapperScan("com.example.mybatis_demo.mapper"):这个注解指示 MyBatis 扫描指定包路径下的 Mapper 接口,并自动生成对应的实现类。这样就可以在应用程序中直接使用这些 Mapper 接口进行数据库操作。

  3. public static void main(String[] args):这是应用程序的入口方法,它使用 SpringApplication.run() 方法启动 Spring Boot 应用程序。

通过以上配置,应用程序将自动加载 Spring Boot 的自动配置,扫描 com.example.mybatis_demo.mapper 包下的 Mapper 接口,并将其注册为 Spring Bean。这样,我们就可以在应用程序中使用自动生成的 Mapper 接口来进行数据库操作。

该入口类是整个应用程序的起点,运行该类的 main 方法即可启动 Spring Boot 应用程序,并开始处理请求和执行相应的数据库操作。

单元测试

测试类:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(classes = MybatisDemoApplication.class)
class MybatisDemoApplicationTests {

    @Autowired
    UserMapper userMapper;

    @Test
    void contextLoads() {
        System.out.println(userMapper.findUserById(4));
    }
}

在这个示例中,MybatisDemoApplicationTests 类使用了 @SpringBootTest 注解来指定测试类使用 Spring Boot 上下文环境,并加载 MybatisDemoApplication 类作为配置类。然后使用 @Autowired 注解将 UserMapper 自动注入到测试类中。

contextLoads() 方法是一个测试方法,使用 userMapper.findUserById(4) 来调用 UserMapper 接口的 findUserById 方法,并打印查询结果。

ationTests类使用了@SpringBootTest注解来指定测试类使用 Spring Boot 上下文环境,并加载MybatisDemoApplication类作为配置类。然后使用@Autowired注解将UserMapper` 自动注入到测试类中。

contextLoads() 方法是一个测试方法,使用 userMapper.findUserById(4) 来调用 UserMapper 接口的 findUserById 方法,并打印查询结果。

通过运行这个单元测试,可以验证 MyBatis 的配置和数据库操作是否正常工作,并输出查询结果。

你可能感兴趣的:(mybatis,spring,boot,java)