小项目改造快速引入 mybatis

687 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 1 天,点击查看活动详情

项目背景

项目在最开始,定位为一个插件、功能补充,为现有的 OA 提供一个报表功能,用于统计各个流程的数据

功能方面非常简单,考虑到开发速度,直接按 springboot 项目进行开发,依赖方面仅仅使用 spring-boot-starter-web, spring-boot-starter-jdbc, sqljdbc4, lombook

通过 @Bean 的方式注入 sql 查询所需要的 JdbcTemplate 实例,后续的 sql 操作全部都以 template.queryForList(sqlStr) 的方式进行

由于忽略的 sql 上的复杂,加上 java8 尚未支持字符串模版,导致代码中的 sql 类似于如下

image.png

阅读、修改非常不便,决定还是引入 mybatis,最核心的诉求提高 sql 的可阅读性,以及可维护性

开始改造

引入对应的 start

pom.xml 中添加 springboot 专用的 mybatis 依赖

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

在 application.yml 中补充配置

主要是指定 mybatissql 所在的 xml 文件解析位置

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

补充文件夹

项目的建议目录排版如下:

|- src\main\java
    |- com.xx
        |- bean
        |- mapper
        xxxApplication
|- src\main\resources
    |- static
    |- mybaits
        |- Request.xml
    application.yml

xxxApplication 这个启动类的同层,建立 mapper 文件夹,用于存放相关的 xxMapper 的接口文件。需要在接口上使用类注解 @Mapper 让 mybatis 框架来识别。 代码示例如下

@Mapper
public interface RequestMapper {
}

mybatis 文件夹下,存放与 xxMapper 相对应的 xml 文件

根据 mybatis 官方文档,可以得知用于存放 sql的标准 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="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

我们需要修改 mapper 标签中的 namespace 属性,使之和我们的 xxMapper 对应;以同样的格式补充新的 <select></select> 查询语句

最后,将 通过 JdbcTemplate 执行的 sql,规范为对应的 Mapper + xml 文件,并调整相关的函数调用,整个项目的改造就基本完成

总结

由于使用了 mybatis-spring-boot-starter 这个 start,加上我们遵循一些默认约定,只使用了一个配置就将 mybatis 应用到了这个项目上。这次改造中最大的变动就是将原 sql 处理为 xxMapper + xx.xml 两种文件

可以欣赏一下,写在 xml 中的 sql,是多么的优雅

image.png