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

  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/felordcn/p/13449338.html
Copyright © 2011-2022 走看看