从零搭建Spring Boot脚手架(3):集成mybatis

1. 前言

今天继续搭建咱们的kono Spring Boot脚手架,上一文集成了一些基础的功能,好比统一返回体、统一异常处理、快速类型转换、参数校验等经常使用必备功能,并编写了一些单元测试进行验证,今天把国内最流行的ORM框架Mybatis也集成进去。使用的Spring Boot版本为2.3.2.RELEASEjava

Gitee: https://gitee.com/felord/kono 1.0.0.MYBATIS 分支

GitHub: https://github.com/NotFound40... 1.0.0.MYBATIS 分支mysql

2. 集成Mybatis的步骤

集成Mybatis的步骤并非特别复杂,我将它们分为三个步骤,接下来进入正题。git

3. 依赖集成

首先我将MybatisStarter加入kono-dependencies进行依赖管理,并在kono-app引入:github

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

mybatis starter的附加依赖

经过IDEAMaven插件能够看出咱们引入了MybatisStarter以后,高性能的数据源链接池就被集成了进来。可是数据库驱动须要咱们自行引入,这里咱们直接引用MySQL的依赖:spring

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

4. 配置

配置是最重要的部分,咱们来分层次讲解配置。sql

4.1 先配置数据源

数据源在application.yml中的配置前缀为spring.datasource。那么基本的配置以下:数据库

spring:
  datasource:
    # 链接池实现的限定名,这里使用hikari链接池。通常不用配置这个,会自动去类路径下加载,这是一个可选的配置。
    # type: com.zaxxer.hikari.HikariDataSource
    # 数据库的驱动JDBC驱动程序的类全限定名,它其实会根据下面的url配置自动检测,这是一个可选配置。
    # driver-class-name: com.mysql.cj.jdbc.Driver
    # 数据库的JDBC连接
    url: jdbc:mysql://ip:port/database
    # 数据库用户名
    username:
    # 数据库密码
    password:

hikari链接池的配置能够根据须要自行经过spring.datasource.hikari进行配置,这里先采用默认,后续若是有须要再进行修改。mybatis

com.mysql.jdbc.Driver已经标记为过期,如今请使用 com.mysql.cj.jdbc.Driver

4.2 mybatis配置

mybatis的基本配置也不是特别多,你只须要让Mybatis知道从哪里加载你定义的Mapper接口,从哪里加载对应的*Mapper.xml文件,而后配置一些mybatis的特性,复杂的骚操做能够从我以往mybatis相关的文章去看一下。app

我新建了一张表user_info,并建立了对应的实体类UserInfo,接着就是定义Mapper接口的位置。假如说我把全部的Mapper接口放在cn.felord.kono.mapper包下,那么就应该使用@MapperScan来标识这个路径,引导mybatis找到这些Mapper接口。框架

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

/**
 * mybatis configuration.
 *
 * @author felord.cn
 */
@MapperScan("cn.felord.kono.mapper")
@Configuration
public class MybatisConfiguration {

}

接着咱们编写UserInfo对应的UserInfoMapper接口,并增长一个新增方法。这里能够根据IDE去插件市场下载一些mybatis插件来方便咱们开发,关键字搜索mybatis便可,这里我随便找了一个插件安装。经过IDEAALT+ENTER快捷键调出了一个生成UserInfoMapper对应XML的菜单,咱们可使用它来生成XML文件以及对应方法的语句。

mybatis 插件生成 xml

mybatis 插件生成语句模板,请无视返回值的问题

XML文件的位置咱们放在resources下的mapper文件夹中,编译后就是类路径下的mapper文件夹中,因此须要在application.yml进行以下配置。

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml

对应的UserInfoMapper.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="cn.felord.kono.mapper.UserInfoMapper">
    <insert id="save" parameterType="cn.felord.kono.entity.UserInfo">
        insert into user_info (name, age)
        VALUES (#{name}, #{age})
    </insert>
</mapper>

而后测试一下新增成功了没有问题,可是查询的单元测试却没有经过:

@Test
void testUserInfoMapperFindById(){

    UserInfo userInfo = userInfoMapper.findById(3);

    System.out.println("userInfo = " + userInfo);
    Assertions.assertEquals(3,userInfo.getUserId());

}

这是由于驼峰转下划线的问题形成了,user_id没法注入到userId中,因此要声明如下配置来支持下划线转驼峰就能够了:

mybatis:
  configuration:
      map-underscore-to-camel-case: true

如何打印SQL语句呢?只须要声明Mapper接口包的日志级别为DEBUG就能够了。

logging:
  level:
    cn.felord.kono.mapper: debug

5. 总结

到这里基本的mybatis整合就完成了,你能够从项目仓库拉下来,本身配置一个数据库跑一下。多多关注:码农小胖哥 继续来和我一块儿整合脚手架。

关注公众号:Felordcn 获取更多资讯

我的博客:https://felord.cn

相关文章
相关标签/搜索