当使用Spring Boot整合MyBatis时,以下是典型的执行流程:
添加依赖:在Spring Boot项目的pom.xml
文件中,添加MyBatis和数据库驱动的相关依赖。通常使用spring-boot-starter-data-mybatis
作为主要依赖,同时根据所使用的数据库选择相应的驱动依赖。
配置数据源:在application.properties
(或application.yml
)中配置数据库连接信息,包括URL、用户名、密码等。还可以配置连接池的参数,如最大连接数、空闲连接超时等。
创建实体类:创建与数据库表对应的实体类(POJO),并在实体类中添加注解或XML映射文件来描述字段与表的映射关系。
创建Mapper接口:创建Mapper接口,用于定义数据访问的接口。可以使用注解或XML文件来编写SQL语句。
配置MyBatis:在Spring Boot的配置类中,使用@MapperScan
注解指定Mapper接口所在的包路径,使得MyBatis能够扫描并注册Mapper接口的实现。
编写业务逻辑:在Service层编写业务逻辑,注入Mapper接口的实例,通过调用Mapper接口的方法来访问数据库。
启动应用程序:通过Spring Boot的启动类启动应用程序,Spring Boot会自动进行初始化和配置。
执行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 驱动。每个
元素指定了相应的依赖项的 groupId
、artifactId
和 version
。
这些依赖项的作用如下:
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 在项目中的依赖需求,从而支持开发和运行应用程序。请确保版本号与您的项目需求匹配,并根据需要进行调整和修改。
配置数据源:在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语句和结果映射规则,用于实现数据访问和对象关系映射。
注意:以上内容是基于提供的配置信息进行整理的,确保配置的准确性和适用性。在实际使用中,可能需要根据具体情况进行调整和修改。
实体类 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 接口的方法来执行对应的数据库操作,实现数据的查询、插入、更新等功能。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 框架进行数据访问。
@SpringBootApplication
:这个注解表示这是一个 Spring Boot 应用程序的主类。它标识着这个类是应用程序的入口点,并启用了自动配置、组件扫描和其他 Spring Boot 特性。
@MapperScan("com.example.mybatis_demo.mapper")
:这个注解指示 MyBatis 扫描指定包路径下的 Mapper 接口,并自动生成对应的实现类。这样就可以在应用程序中直接使用这些 Mapper 接口进行数据库操作。
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 的配置和数据库操作是否正常工作,并输出查询结果。