【效率專精系列】善用插件提高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
相關文章
相關標籤/搜索