亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

最近逛開源社區(qū)的時(shí)候,偶爾發(fā)現(xiàn)了一個(gè) MyBatis 增強(qiáng)框架-MyBatis-Flex ,感覺挺不錯(cuò)的,集合了 MyBatis-Plus、Fluent-MyBatis 的優(yōu)點(diǎn)。

 

MyBatis-Flex 的作者是一位技術(shù)大佬,還開源了知名 CMS 系統(tǒng) JPress 以及微服務(wù)框架 JFinal。

個(gè)人認(rèn)為這個(gè)框架還是挺有潛力的,準(zhǔn)備后面在個(gè)人項(xiàng)目中試試。同時(shí),也希望這個(gè)項(xiàng)目能夠持續(xù)維護(hù)下去,不斷完善。

MyBatis-Flex 介紹

根據(jù)官網(wǎng)介紹,MyBatis-Flex 是一個(gè)優(yōu)雅的 MyBatis 增強(qiáng)框架,具備下面這些特點(diǎn):

  • 輕量:除了 MyBatis 本身,再無任何第三方依賴。
  • 靈活且強(qiáng)大:提供了非常靈活的 QueryWrApper,支持關(guān)聯(lián)查詢、多表查詢、多主鍵、邏輯刪除、樂觀鎖更新、數(shù)據(jù)填充、數(shù)據(jù)脫敏、等等....。
  • 性能高:性能比傳統(tǒng)的 MyBatis 增強(qiáng)框架比如 MyBatis-Plus 要更優(yōu)秀。

MyBatis-Flex 幾乎支持所有主流的數(shù)據(jù)庫,例如,MySQL、MariaDB、DB2、PostgreSQL、SQLite、達(dá)夢、人大金倉等等。并且,還可以通過自定義方言的方式,持續(xù)添加更多的數(shù)據(jù)庫支持。

多提一點(diǎn):QueryWrapper 是 MyBatis-Flex 的核心類,增刪改、查詢和分頁都是借助 QueryWrapper 實(shí)現(xiàn)的。并且,QueryWrapper 可以被序列化通過 RPC 進(jìn)行傳輸,因此,在微服務(wù)項(xiàng)目中,我們可以在客戶端(網(wǎng)關(guān)、Controller 層等)構(gòu)造出 QueryWrapper,傳給 Provider 層進(jìn)行查詢返回?cái)?shù)據(jù)。

MyBatis-Flex vs MyBatis-Plus

MyBatis-Flex 直接對標(biāo)老牌 MyBatis 增強(qiáng)框架 MyBatis-Plus,根據(jù)官方文檔顯示,其在功能性和性能上都要更優(yōu)秀一些。

MyBatis-Flex 和 MyBatis-Plus 的功能對比如下(數(shù)據(jù)來源于 MyBatis-Flex 官方文檔):

 

從上圖可以看到,像數(shù)據(jù)填充、數(shù)據(jù)脫敏、字段權(quán)限等 MyBatis-Plus 收費(fèi)才能使用的功能,MyBatis-Flex 直接可以免費(fèi)使用。

MyBatis-Flex 和 MybAIts-Plus 的性能對比,大家可以直接看官方文檔提供的數(shù)據(jù)即可(地址:https://mybatis-flex.com/zh/intro/benchmark.html)。根據(jù)官方提供的案例的測試結(jié)果顯示,MyBatis-Flex 的綜合性能表現(xiàn)大概是 MyBatis-Plus 的 5~10 倍左右。

  • MyBatis-Flex 的查詢單條數(shù)據(jù)的速度,大概是 MyBatis-Plus 的 5 ~ 10+ 倍。
  • MyBatis-Flex 的查詢 10 條數(shù)據(jù)的速度,大概是 MyBatis-Plus 的 5~10 倍左右。
  • Mybatis-Flex 的分頁查詢速度,大概是 Mybatis-Plus 的 5~10 倍左右。
  • Mybatis-Flex 的數(shù)據(jù)更新速度,大概是 Mybatis-Plus 的 5~10+ 倍。

測試源碼在這里:https://gitee.com/mybatis-flex/mybatis-benchmark ,如果對數(shù)據(jù)存疑的話,可以自行本地測試一下。

下面再來簡單對比一下 MyBatis-Flex 和 Mybaits-Plus 在寫法上的區(qū)別。

1、基礎(chǔ)查詢

MyBatis-Flex:

QueryWrapper query = QueryWrapper.create()
        .where(EMPLOYEE.LAST_NAME.like(searchword)) //條件為null時(shí)自動(dòng)忽略
        .and(EMPLOYEE.GENDER.eq(1))
        .and(EMPLOYEE.AGE.gt(24));
List<Employee> employees = employeeMapper.selectListByQuery(query);

MyBatis-Plus:

QueryWrapper<Employee> queryWrapper = Wrappers.query()
        .like(searchWord != null, "last_name", searchWord)
        .eq("gender", 1)
        .gt("age", 24);
List<Employee> employees = employeeMapper.selectList(queryWrapper);

或者 MyBatis-Plus 的 lambda 寫法:

LambdaQueryWrapper<Employee> queryWrapper = Wrappers.<Employee>lambdaQuery()
        .like(StringUtils.isNotEmpty(searchWord), Employee::getUserName,"B")
        .eq(Employee::getGender, 1)
        .gt(Employee::getAge, 24);
List<Employee> employees = employeeMapper.selectList(queryWrapper);

2、多表查詢

MyBatis-Flex:

QueryWrapper query = QueryWrapper.create()
    .select().from(ACCOUNT)
    .leftJoin(ARTICLE).on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID))
    .where(ACCOUNT.AGE.ge(10));

List<Account> accounts = mapper.selectListByQuery(query);

MyBatis-Plus:

// 不支持~~~~

3、部分字段更新

MyBatis-Flex :

Account account = UpdateEntity.of(Account.class);
account.setId(100); //設(shè)置主鍵
account.setUserName("michael");
account.setAge(18);
account.setBirthday(null);

accountMapper.update(account);

MyBatis-Plus:

UpdateWrapper<Account> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 100);
updateWrapper.set("user_name", "michael");
updateWrapper.set("age", 18);
updateWrapper.set("birthday", null);

accountMapper.update(null, updateWrapper);

MyBatis-Flex 的核心功能

MyBatis-Flex 的核心功能非常多,這里挑選個(gè)別比較有意思的進(jìn)行簡單介紹,官方文檔已經(jīng)介紹的非常詳細(xì)了。

 

數(shù)據(jù)脫敏

數(shù)據(jù)脫敏說的就是我們根據(jù)特定的規(guī)則對敏感信息數(shù)據(jù)進(jìn)行變形,比如我們把手機(jī)號、身份證號某些位數(shù)使用 * 來代替。

MyBatis-Flex 提供了 @ColumnMask() 注解,以及內(nèi)置的 9 種脫敏規(guī)則,開箱即用:

  • 用戶名脫敏
  • 手機(jī)號脫敏
  • 固定電話脫敏
  • 身份證號脫敏
  • 車牌號脫敏
  • 地址脫敏
  • 郵件脫敏
  • 密碼脫敏
  • 銀行卡號脫敏
/**
 * 內(nèi)置的數(shù)據(jù)脫敏方式
 */
public class Masks {
    /**
     * 手機(jī)號脫敏
     */
    public static final String MOBILE = "mobile";
    /**
     * 固定電話脫敏
     */
    public static final String FIXED_PHONE = "fixed_phone";
    /**
     * 身份證號脫敏
     */
    public static final String ID_CARD_NUMBER = "id_card_number";
    /**
     * 中文名脫敏
     */
    public static final String CHINESE_NAME = "chinese_name";
    /**
     * 地址脫敏
     */
    public static final String ADDRESS = "address";
    /**
     * 郵件脫敏
     */
    public static final String EMAIL = "email";
    /**
     * 密碼脫敏
     */
    public static final String PASSWORD = "password";
    /**
     * 車牌號脫敏
     */
    public static final String CAR_LICENSE = "car_license";
    /**
     * 銀行卡號脫敏
     */
    public static final String BANK_CARD_NUMBER = "bank_card_number";
    //...
}

使用示例:

@Table("tb_account")
public class Account {

    @Id(keyType = KeyType.Auto)
    private Long id;

    @ColumnMask(Masks.CHINESE_NAME)
    private String userName;

    @ColumnMask(Masks.EMAIL)
    private String email;

}

如果這些內(nèi)置的脫敏規(guī)則不滿足你的要求的話,你還可以自定義脫敏規(guī)則。

多數(shù)據(jù)源

MyBaits-Flex 內(nèi)置了功能完善的多數(shù)據(jù)源支持,無需借助其他第三方插件或者依賴,支持包括 druid、hikaricp、dbcp2、beecp 在內(nèi)的任何數(shù)據(jù)源。

Spring 框架下的配置如下(無 Spring 框架的場景下,同樣也可以編碼的形式使用):

mybatis-flex:
  datasource:
    ds1:
      type: druid
      url: jdbc:mysql://127.0.0.1:3306/db
      username: root
      password: 123456
      asyncInit: true
    ds2:
      type: com.your.datasource.type2
      url: jdbc:mysql://127.0.0.1:3306/db2
      username: root
      password: 123456

默認(rèn)使用第一個(gè)配置的數(shù)據(jù)源,可以通過編碼的方式其他的數(shù)據(jù)源。

List<Row> rows =  DataSourceKey.use("ds2"
    , () -> Db.selectAll("tb_account"));

在多租戶等某些場景下,動(dòng)態(tài)的添加新的數(shù)據(jù)源也是支持的。

FlexDataSource flexDataSource = (FlexDataSource) FlexGlobalConfig
        .getDefaultConfig().getConfiguration()
        .getEnvironment().getDataSource();

//新的數(shù)據(jù)源
HikariDataSource newDataSource = new HikariDataSource();

flexDataSource.addDataSource("newKey", newDataSource);

字段加密

字段加密指的是我們從數(shù)據(jù)庫中取出數(shù)據(jù)的時(shí)候,對其中的一些字段進(jìn)行加密,這樣返回的內(nèi)容為加密內(nèi)容,而非明文內(nèi)容。

字段加密的功能實(shí)現(xiàn)依賴于 MyBatis-Flex 實(shí)體類監(jiān)聽:

public class AccountOnSetListener implements SetListener {
    @Override
    public Object onSet(Object entity, String property, Object value) {

        if (value != null){
            //對字段內(nèi)容進(jìn)行加密
            value = encrypt(value);
        }

        return value;
    }
}

@Table(value = "tb_account", onSet = AccountOnSetListener.class)
public class Account {

    @Id(keyType = KeyType.Auto)
    private Long id;

    private String userName;

    private String password;

    //getter setter
}

除了字段加密之外,字典回寫、字段權(quán)限、字段脫敏等功能的實(shí)現(xiàn)都依賴于實(shí)體類監(jiān)聽。

總結(jié)

這篇文章我們簡單對比了 MyBatis-Flex 和 MyBatis-Plus ,并對 MyBatis-Flex 的個(gè)別核心功能進(jìn)行了簡單介紹。

更多關(guān)于 MyBatis-Flex 的介紹,大家可以去 MyBatis-Flex 的官網(wǎng)看看,地址:https://mybatis-flex.com/ 。

來源:
https://mp.weixin.qq.com/s/wvk_twc-DCURiNiE5njFXA

分享到:
標(biāo)簽:框架 ORM
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定