【效率专精系列】善用插件提高MyBatis开发效率

团队使用Mybatis做为数据库访问框架。不一样于Hibernate这种采用经典面向对象思想设计的ORM框架,Mybatis是面向过程的,它只作了过程到SQL语句的映射。二者的性能在绝大多数场景下是差很少的,所以理论上能够互相替代使用。因为Mybatis能够直接控制底层SQL,所以对于码农来讲,学习成本更低、优化起来更容易;不过也带来了首次配置繁琐、样板代码较多等缺点。html

好比是对于单表的、简单的查询,为了符合JavaWeb网络开发模型的Web、Service、Dao的三层模型,不得不在Dao层、Service接口、Service实现类中添加功能几乎重复的代码,所作的也不过是透传,这里就存在能够优化的点。

本文的目的是优化工具链支持,减小手动开发Mybatis样板代码的时间。java

  1. 经过Intillij Idea插件更优雅地生成DAO MapperXML Statement的样板代码
  2. 经过Mybatis插件不污染XML Statement地实现优雅分页。

Mybatis分页插件:Mybatis PageHelper

实现原理基于Mybatis的QueryInterceptor机制,能动态拦截sql语句并根据对应的数据库类型加上分页语句。无需修改底层的SQL。git

  1. 使用步骤github

    1. 引入Maven依赖,在mybatis或spring的配置xml中进行配置。
    2. DAO Mapper方法中增长入参@Param("pageNum") int pageNum, @Param("pageSize") int pageSize便可。
> 插件还有多种调用方法。[Mybatis-PageHelper][Mybatis-PageHelper]

Mybatis代码生成插件

Fin. 总结

  1. 插件生成样板代码的方式大体有三种:根据数据库链接、根据POJO、根据建表sql,用户根据实际状况选择。
  2. MyBatisCodeHelper提供了声明式的Statement开发方法,在编写自定义Dao方法时可省去部分对应SQL的编写时间。
  3. MyBatisCodeHelper、Mybatis Plugin提供XML语法提示、自动补全、错误提示、导航功能。

1. MyBatisCodeHelper

  • 代码生成流程spring

    1. 在IDE中开发持久化对象(POJO
    2. 在可视化界面配置表名、主键、类型、索引、默认值、注释等,自动生成建表SQL语句、DAO MapperMapper XML
> 默认生成的DAO中包含了`insert`、`insertSelective`、`insertList`、`update`方法

> `POJO`示例和DAO Mapper示例  
   ```java
    public class UserPO {
        private Integer id;
        private String name;
        private String age;
        private Date addTime;
        private Date updateTime;
        private Boolean isDelete;
        //getter/setter
    }
```

```java
    int insert(@Param("userPO") UserPO userPO);
    int insertSelective(@Param("userPO") UserPO userPO);
    int insertList(@Param("userPOs") List<UserPO> userPOs);
    int update(@Param("userPO") UserPO userPO);
```

> 可视化UI ![clipboard.png](/img/bVUk7g)
  • 其余功能sql

    1. 根据DAO方法名推断生成XML Statement的实现
> `Spring Data Jpa`(基于`Hibernate`)提供了一种类SQL的**声明式的开发方法**,能根据符合特定规则的接口方法名在运行时自动生成字节码。该插件提供了相似的功能,根据接口的方法名推断含义,而后在`Mapper XML`中直接生成对应的SQL。好比`findByStartDateBetween`方法会被翻译成这样的SQL`… where x.startDate between ?1 and ?2`。
> 具体的推断规则能够参考`Spring Data Jpa`文档,也能够见脚注:方法名推断之约束条件[^方法名推断之约束条件],方法名推断之比较符[^方法名推断之比较符]。

2. Codehelper.generater

  • 代码生成流程数据库

    1. 在IDE中开发持久化对象(POJO
    2. 在配置文件中设置路径(或者使用默认配置),自动生成建表SQL语句、DAO MapperMapper XML
  • 其余功能网络

    1. 代码补全(AutoCoding Mode)。按AutoCoding键一次会生成Java Bean的全部Setter方法。按AutoCoding键两次则会为Setter方法生成默认值。对于字段不少的POJO,能够防止批量的Set操做漏掉某些字段。

3. Mybatis Plugin

  • 代码生成流程mybatis

    1. 配置数据库
    2. 配置样板代码生成路径
    3. 生成样板代码(POJODAO MapperMapper XML
  • 其余功能app

    1. Xml Statement和对应方法导航,ResultMap和对应POJO导航
    2. DAO Mapper、Xml代码提示和补全
    3. 代码检查及XML语法错误提示
    4. 集成了Mybatis Generater,可生成mybatis-config.xmlmybatis-generater-config.xml模板
    5. 根据Mapper对象(必须以Mapper结尾)自动生成Mapper Xml、其中的方法生成对应的Statement(只包含外层元素)
> 例如:根据`int countById(@Param("id") Integer id);`就会生成`<select id="countById" resultType="java.lang.Integer"></select>`

4. MybatisGenerator、Swords、AutoCurd、GetCode、foilvora、Mybatis Maven Plugin

  1. 代码生成流程

    1. 配置数据库
    2. 配置样板代码生成路径
    3. 生成样板代码(POJODAO MapperMapper XML
foilvora:经过建表sql生成样板代码
Mybatis Maven Plugin:在 mybatis-generater-config.xml配置数据库链接,生成对应的 Mapper Xml、Mapper类、 POJO,可配置性最强
Swords配置图 1
MybatisGenerator配置图 2

Reference

  1. Spring Data Jpa - Query creation
  2. MyBatisCodeHelper-Pro
  3. Free Mybatis plugin
  4. MybatisGenerator
  5. AutoCurd
  6. Free Mybatis plugin
  7. CodeHelper Generator
  8. Mybatis Plugin - Document

  1. Swords配置 clipboard.png
  2. MybatisGenerator配置入口 clipboard.png
相关文章
相关标签/搜索