一文搞懂MyBatis测试工程搭建及与Springboot整合

大家好,我是Dog Lee 😁😁 一名金融科技领域的JAVA系统研发😊😊
我希望将自己工作和学习中的经验以最朴实最严谨的方式分享给大家,共同进步👉💓👈
MyBatis源码与实战》专栏,会陆续更新关于MyBatis的源码讲解,实战使用等内容
👉👉👉👉👉👉👉👉💓写作不易,期待大家的关注和点赞💓👈👈👈👈👈👈👈👈



前言

本篇文章将对如何搭建一个MyBatis测试工程进行介绍,并在此基础上介绍Springboot整合MyBatis

Mybatis版本:3.5.6

正文

一. MyBatis工程搭建

1. 创库建表

首先创建一个名为testMySQL数据库(记得指定编码格式为UTF-8),并在test数据库中创建一张book表,建表语句如下所示。

CREATE TABLE book(
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    b_name VARCHAR(255) NOT NULL,
    b_price FLOAT NOT NULL
)

表示一本书有名称价格两个字段。

然后往book表插入三条数据,插入语句如下所示。

INSERT INTO book (b_name, b_price) VALUES ("Math", 20.5)
INSERT INTO book (b_name, b_price) VALUES ("English", 21.5)
INSERT INTO book (b_name, b_price) VALUES ("Water Margin", 30.5)

上述数据用于MyBatis工程搭建好之后,测试能否基于MyBatis对数据库中数据进行操作。

2. 添加依赖

创建MAVEN工程,然后在POM文件中添加MyBatis的依赖,以及数据库驱动的依赖。POM文件中添加的依赖如下所示。

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

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

在引入MySQL数据库驱动时,需要注意安装的MySQL数据库版本与驱动版本要匹配,具体的关系可以查看下表。

Connector/J VersionDriver TypeJDBC VersionMySQL Server Version状态
5.143.0,4.0,4.1,4.25.6,5.7,8.0可用
8.044.25.6,5.7,8.0推荐使用

假如安装的MySQL数据库版本为8.0.26,那么根据官方推荐,使用的驱动版本应该为8.0.16,而8.0版本的MySQL数据库驱动在配置dataSource时,driver属性需要设置为com.mysql.cj.jdbc.Driver,有别于5.1的com.mysql.jdbc.Driver

3. 添加MyBatis配置文件

添加好MyBatis相关依赖之后,需要编写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>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.101.7:3306/test?characterEncoding=utf-8&amp;serverTimezone=UTC&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <package name="com.mybatis.learn.dao"/>
    </mappers>
</configuration>

如果不清楚配置文件的各个标签以及含义,可以参考MyBatis XML配置,里面有关于MyBatis配置的详细说明。

4. 创建实体类

新建一个Book实体类,用于和book表进行映射,如下所示。

@Getter
@Setter
@ToString
public class Book {

    private long id;
    private String bookName;
    private float bookPrice;

}
5. 添加映射接口和映射文件

由于在mybatis-config.xml中注册映射文件时是基于<package name="com.mybatis.learn.dao"/>这样的方式进行注册,这种方式要求映射接口和映射文件需要同名且在同一目录下,所以这里编写一个映射接口名为BookMapper,以及编写一个映射文件名为BookMapper.xml。映射接口BookMapper如下所示。

public interface BookMapper {

    List<Book> selectAllBooks();

}

映射文件BookMapper.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.mybatis.learn.dao.BookMapper">
    <resultMap id="bookResultMap" type="com.mybatis.learn.entity.Book">
    	<id property="id" column="id">
        <result property="bookName" column="b_name"/>
        <result property="bookPrice" column="b_price"/>
    </resultMap>
    
    <select id="selectAllBooks" resultMap="bookResultMap">
        SELECT 
        	id, 
        	b_name, 
        	b_price
        FROM book
    </select>
</mapper>

由于MAVEN默认不会将src/main/java下的非JAVA文件进行打包,所以需要在POM文件中再作如下配置,以实现将映射文件也一并打包。

<build>
	<resources>
		<resource>
			<directory>src/main/java</directory>
			<includes>
				<include>**/*.xml</include>
			</includes>
			<filtering>false</filtering>
		</resource>
	</resources>
</build>
6. 工程结构

整个工程结构如下所示。

在这里插入图片描述

其中MybatisTest类用于测试查询功能,如下所示。

public class MybatisTest {

    public static void main(String[] args) throws Exception {
        String resource = "mybatis-config.xml";
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(Resources.getResourceAsStream(resource));
        SqlSession sqlSession = sqlSessionFactory.openSession();
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        List<Book> books = bookMapper.selectAllBooks();
        books.forEach(book -> System.out.println(book.toString()));
    }

}

这里特别注意Resources.getResourceAsStream()这个方法,该方法的注释如下。

Returns a resource on the classpath as a Stream object.

Resources.getResourceAsStream()这个方法会去加载classpath下的配置文件,那么在MybatisTest测试类中,就会去classpath下加载名为mybatis-config.xml的配置文件。现在先将整个工程编译一下,并去查看编译后的目录结构,如下所示。

在这里插入图片描述

所以可以成功读取到MyBatis的配置文件。现在执行MybatisTest测试类,结果如下。

在这里插入图片描述

上述结果表明整个测试工程搭建成功,可以通过MyBatis对数据库进行操作。

二. Springboot整合MyBatis

MyBatis提供了和Springboot整合的启动器,基于启动器,可以方便的使用MyBatis,本节将对Springboot整合MyBatis进行介绍。

首先在POM文件中引入MyBatis启动器,如下所示。

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.1.3</version>
</dependency>

最后测试时采用基于rest工具调用接口的方式来触发对数据库的操作,因此还需要引入web依赖,如下所示。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<version>2.4.1</version>
</dependency>

在使用了mybatis-spring-boot-starter启动器之后,无需再单独为MyBatis提供配置文件,对于Mybatis的配置直接写在application.yml中即可,如果在application.yml中没有对MyBatis进行任何配置,那么MyBatis的所有配置项将使用默认值。同时dataSource的配置不用再配置到MyBatis中(数据源使用Spring管理的数据源),按照Springboot配置数据源的方式进行配置即可。application.yml文件内容如下所示。

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.101.7:3306/test?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
    username: root
    password: root

mybatis:
  configuration:
    log-impl: STDOUT_LOGGING

本节中,映射接口BookMapper,映射文件BookMapper.xml与实体类Book和第一节中完全一致,所以这里不再赘述,但是需要在Springboot的启动类加上@MapperScan注解来指定映射文件所在的目录,如下所示。

@SpringBootApplication
@MapperScan("com.mybatis.learn.dao")
public class MybatisLearnApplication {

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

}

至此整合已经结束,整个工程结构如下所示。

在这里插入图片描述

service层和controller层用于测试。MybatisService的实现如下所示。

@Service
public class MybatisService {

    @Autowired
    private BookMapper bookMapper;

    public List<Book> selectAllBooks() {
        return bookMapper.selectAllBooks();
    }

}

在成功完成整合之后,可以从Spring容器中获取每个映射接口的映射实例,故可在MybatisService中通过注入的方式获取映射接口BookMapper的映射实例。MybatisController的实现如下所示。

@RestController
public class MybatisController {

    @Autowired
    private MybatisService mybatisService;

    @RequestMapping(value = "/api/v1/selectall", method = RequestMethod.GET)
    public ResponseEntity<List<Book>> selectAllBooks() {
        List<Book> books;
        try {
            books = mybatisService.selectAllBooks();
        } catch (Exception e) {
            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
        }
        return new ResponseEntity<>(books, HttpStatus.OK);
    }

}

最后基于rest工具调用接口,结果如下所示。

在这里插入图片描述


总结

本篇文章介绍了如何在一个MAVEN工程中通过引入Mybatis依赖包来搭建一个连接数据库的测试工程,然后对Springboot整合MyBatis进行了案例演示,无论哪种方式,通过MyBatis操作数据库都相较于传统JDBC方式具有更方便更强大的特性。


大家好,我是Dog Lee 😁😁 一名金融科技领域的JAVA系统研发😊😊
我希望将自己工作和学习中的经验以最朴实最严谨的方式分享给大家,共同进步👉💓👈
MyBatis源码与实战》专栏,会陆续更新关于MyBatis的源码讲解,实战使用等内容
👉👉👉👉👉👉👉👉💓写作不易,期待大家的关注和点赞💓👈👈👈👈👈👈👈👈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱花祭的约定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值