关于数据库:Mybatis配置和整合

4次阅读

共计 5863 个字符,预计需要花费 15 分钟才能阅读完成。

前言

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

注释

一. Mybatis 工程搭建

1. 创库建表

首先创立一个名为 testMySQL数据库,并在 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. 增加依赖

须要在 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 Version Driver Type JDBC Version MySQL Server Version 状态
5.1 4 3.0,4.0,4.1,4.2 5.6,5.7,8.0 可用
8.0 4 4.2 5.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-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="useGeneratedKeys" value="true"/>
    </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://localhost: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 表进行映射,如下所示。

@Data
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">
        <result column="b_name" property="bookName"/>
        <result column="b_price" property="bookPrice"/>
    </resultMap>
    
    <select id="selectAllBooks" resultMap="bookResultMap">
        SELECT
        b.id, b.b_name, b.b_price
        FROM
        book b
    </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 中,依照 Springboot 配置数据源的形式进行配置即可。application.yml文件内容如下所示。

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

mybatis:
  configuration:
    use-generated-keys: true

本节中,映射接口 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 形式具备更不便更弱小的个性。

正文完
 0