zoukankan      html  css  js  c++  java
  • 从零搭建Spring Boot脚手架(3):集成mybatis

    1. 前言

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

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

    GitHub: https://github.com/NotFound403/kono 1.0.0.MYBATIS 分支

    2. 集成Mybatis的步骤

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

    3. 依赖集成

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

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

    mybatis starter的附加依赖

    通过IDEAMaven插件可以看出我们引入了MybatisStarter之后,高性能的数据源连接池就被集成了进来。但是数据库驱动需要我们自行引入,这里我们直接引用MySQL的依赖:

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

    4. 配置

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

    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进行配置,这里先采用默认,后续如果有需要再进行修改。

    com.mysql.jdbc.Driver已经标记为过时,现在请使用com.mysql.cj.jdbc.Driver

    4.2 mybatis配置

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

    我新建了一张表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

  • 相关阅读:
    [原创]Windows 7 下成功添加网络共享HP打印机
    [原创]PDFCreator自动保存及文件名带空格、后缀名丢失的解决方法(Windows 7通过)
    [原创]U872客户端“system.net.sockets.socketexception”的解决方法
    [转载]Windows 7默认共享无法访问
    [转载]使Excel不显示0值的三招
    [原创]使用空密码远程桌面连接
    分布式架构理论
    ffmpeg重要函数和结构体整理
    es~存储部分字段
    es~text与keyword的选择
  • 原文地址:https://www.cnblogs.com/felordcn/p/13449338.html
Copyright © 2011-2022 走看看