歡迎使用開源持久化框架 MyBatis Enhance

恆宇少年發表於2018-05-14

MyBatis-Enhance 持久化框架已開源,只增強不修改,狂點檢視詳情!!!

歡迎加群交流

Enhance 交流群 ①:782540319 SpringBoot 核心技術①:373229384 SpringBoot 核心技術②:588351309

Maven 倉庫地址

MyBatis Enhance是什麼?

Enhance是對於原生的MyBatis的增強編寫,不影響任何原生的使用,使用後完全替代mybatis-coremybatis-spring以及mybatis-spring-boot-starter,可以使用SpringBoot配置檔案的形式進行配置相關的內容,儘可能強大的方便快速的整合MyBatis

除此之外還提供了單表基礎資料CRUD操作以及部分批量資料的操作,可以不再使用MyBatis提供的自動生成的方式對單個資料表進行資料操作,當然如果你想使用也是可以的。

Enhance還規劃了多個資料表之間的動態查詢方式,這種方式可以讓你體驗到你在使用Java程式碼編寫SQL語句,極大方便的關聯、聚合、多表查詢欄位等常用資料動作(1.0.2.RELEASE暫未支援)。

使用環境

目前SpringBoot的發展趨勢已經勢如破竹,為了更方便的使用,所以Enhance暫時只允許在整合了SpringBoot框架的專案中使用。

  • SpringBoot1.x以上版本
  • JDK 1.6以上版本

安裝

安裝比較簡單,在引用Enhance的專案中你還需要新增你使用的資料庫驅動以及資料來源Enhance並不會限制這一點,由於Enhance相關的jar已經上傳到Maven Center Repository所以我們只需要新增依賴即可,開發工具會自動下載相關的依賴包。

  • 使用Maven構建工具時,複製下面的內容到pom.xml配置檔案內
<dependency>
    <groupId>com.gitee.hengboy</groupId>
    <artifactId>mybatis-enhance-spring-boot-starter</artifactId>
    <version>1.0.2.RELEASE</version>
</dependency>
複製程式碼
  • 如果你是用的Gradle構建工具,那麼複製下面的內容到你的build.gradle
compile group: 'com.gitee.hengboy', name: 'mybatis-enhance-spring-boot-starter', version: '1.0.2.RELEASE'
複製程式碼

該怎麼使用呢?

實體的建立

根據對應資料庫內的表來建立實體,Enhance採用的是Spring Data JPA的形式來管理實體類,並且已經預先提供的一些Annotation資料實體(Entity)對應資料庫內的資料表(Table),下面是一個簡單的實體程式碼:

/**
 * 使用者資料實體
 *
 * @author:於起宇 <br/>
 * ===============================
 * Created with IDEA.
 * Date:2018/5/13
 * Time:8:53
 * 簡書:http://www.jianshu.com/u/092df3f77bca
 * ================================
 */
Data
@Table(name = "test_user_info")
public class UserInfoEntity implements Serializable {
    /**
     * 使用者編號
     */
    @Id(generatorType = KeyGeneratorTypeEnum.AUTO)
    @Column(name = "TUI_ID")
    private Integer userId;
    /**
     * 使用者名稱
     */
    @Column(name = "TUI_NAME")
    private String userName;
    /**
     * 年齡
     */
    @Column(name = "tui_age")
    private Integer age;
    /**
     * 地址
     */
    @Column(name = "tui_address")
    private String address;
}
複製程式碼

我採用了跟Spring Data JPA相同命名方式的註解,這樣也方便大家在使用Enhance時可以快速的轉換註解的使用。

Mapper的建立

建立Mapper跟我們使用原生MyBatis建立方式一樣,不過使用Enhance後不需要新增@Mapper註解,你建立的Mapper只需要繼承EnhanceMapper<T,PK>介面就可以被掃描到,並且同時可以獲取內部提供的CRUD方法!!! 如下所示:

/**
 * 使用者基本資訊資料介面
 *
 * @author:於起宇 <br/>
 * ===============================
 * Created with IDEA.
 * Date:2018/5/13
 * Time:9:00
 * 簡書:http://www.jianshu.com/u/092df3f77bca
 * ================================
 */
public interface UserInfoMapper extends EnhanceMapper<UserInfoEntity, Integer> {
}
複製程式碼

EnhanceMapper需要兩個泛型,第一個是實體類的型別,第二個則是實體類主鍵的型別,這樣方便我們在傳參或者返回值時做到統一,否則還需要進行Object型別的轉換,那樣不僅麻煩還會提高執行成本,詳細介紹請閱讀 使用文件

暫時內建的方法
// 統計資料
Long countAll() throws EnhanceFrameworkException;
// 清空資料
void deleteAll() throws EnhanceFrameworkException;
// 根據主鍵陣列刪除指定資料
void deleteArray(Id... ids) throws EnhanceFrameworkException;
// 根據自定義sql刪除資料
void deleteBySql(String sql, Map<String, Object> params) throws EnhanceFrameworkException;
// 根據主鍵集合刪除指定資料
void deleteCollection(Collection<Id> collection) throws EnhanceFrameworkException;
// 刪除一條資料
void deleteOne(Id id) throws EnhanceFrameworkException;
// 資料儲存
void insert(T t) throws EnhanceFrameworkException;
// 儲存陣列內的所有資料
void insertArray(T... array) throws EnhanceFrameworkException;
// 儲存集合內的所有資料
void insertCollection(Collection<T> collection) throws EnhanceFrameworkException;
// 查詢全部資料
List<T> selectAll() throws EnhanceFrameworkException;
// 根據主鍵陣列查詢指定資料
List<T> selectArray(Id... ids) throws EnhanceFrameworkException;
// 分頁查詢資料
List<T> selectByPageable(Pageable pageable) throws EnhanceFrameworkException;
// 自定義sql查詢資料
List<Map> selectBySql(String sql, Map<String, Object> params) throws EnhanceFrameworkException;
// 根據主鍵集合查詢指定資料
List<T> selectCollection(Collection<Id> ids) throws EnhanceFrameworkException;
// 根據主鍵查詢單條資料
T selectOne(Id id) throws EnhanceFrameworkException;
// 根據主鍵更新資料實體
void update(T t) throws EnhanceFrameworkException;
// 自定義sql更新資料
void updateBySql(String sql, Map<String, Object> params) throws EnhanceFrameworkException;
複製程式碼

以上是1.0.2.RELEASE版本提供的內建方法列表,都是在平時開發中比較常用到對單表資料操作的方法。

方法命名規則的使用

方法命名規則Spring Data JPA中的提供的一種資料操作的方式,主要適用於查詢統計刪除等資料操作動作,其主要原理是根據方法的名稱來自動生成SQL,使用正規表示式來進行方法匹配。

方法規則查詢

方法規則查詢簡單示例如下所示:

public interface UserInfoMapper extends EnhanceMapper<UserInfoEntity, Integer> {
    /**
     * 只根據一個欄位查詢
     *
     * @param name 查詢條件的值
     * @return
     */
    UserInfoEntity findByUserName(@Param("userName") String name);

    /**
     * 可以根據多個查詢條件進行查詢
     * 中間使用And進行連線
     *
     * @param name 第一個查詢條件的值
     * @param age  第二個查詢條件的值
     * @return
     */
    UserInfoEntity findByUserNameAndAge(@Param("userName") String name, @Param("age") Integer age);
}
複製程式碼
方法規則統計

方法規則統計簡單示例如下所示:

public interface UserInfoMapper extends EnhanceMapper<UserInfoEntity, Integer> {
    /**
     * 只根據一個欄位統計資料
     *
     * @param name 統計條件的值
     * @return
     */
    Long countByUserName(@Param("userName") String name);
    /**
     * 根據多個條件進行統計資料
     *
     * @param name 第一個統計條件的值
     * @param age  第二個統計條件的值
     * @return
     */
    Long countByUserNameAndAge(@Param("userName") String name, @Param("age") Integer age);
}    
複製程式碼
方法規則刪除

方法規則刪除簡單示例如下所示:

public interface UserInfoMapper extends EnhanceMapper<UserInfoEntity, Integer> {
    /**
     * 只根據一個欄位刪除
     *
     * @param name 查詢條件的值
     */
    void removeByUserName(@Param("userName") String name);

    /**
     * 根據多個條件進行刪除資料
     * 中間使用And進行連線
     *
     * @param name 第一個刪除條件的值
     * @param id   第二個刪除條件的值
     */
    void removeByUserNameAndUserId(@Param("userName") String name, @Param("userId") String id);
}   
複製程式碼

當然方法命名規則不僅上面那一點的方便,詳細介紹請閱讀 使用文件

敬請期待Maven自動化程式碼生成外掛

作為目前開發的環境,不管你是產品專案的研發還是外包專案的研發都應該做到快速實現功能,針對MyBatis Enhance框架來說,我單獨配套編寫了一個程式碼生成工具,能夠把建立實體Mapper等必須需要類的自動化建立以及可以通過freemarker模版來完成自定義的實體類建立,從而實現程式碼上的真正的快速開發,提高編碼效率!!!

敬請期待DSL動態查詢

Enhance內部預設支援了單表的資料操作方法,但是我們平時在專案中多表查詢是最普遍的,我結合了QueryDSL動態查詢框架的優點將部分的基礎實現遷移到了Enhance框架內,極大的方便了多表聯合查詢以及動態返回任意資料實體(Entity)資料對映實體(DTO)等。

相關文章