flying

MyBatis 的扩展插件
授权协议 Apache
开发语言 Java
所属分类 程序开发、 ORM/持久层框架
软件类型 开源软件
地区 国产
投 递 者 葛海阳
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

flying 是一个可以极大增加 mybatis 开发速度的插件组,它提供了一种全新的操作数据的方式,希望能对您有所帮助。

flying 主要特点:

        以前我们在 mapper.xml 中要写很复杂的 sql 语句,但现在在 mapper.xml 中只需这样:

    <select id="select" resultMap="result">
        flying#{?}:select
    </select>

    <select id="selectOne" resultMap="result">
        flying:selectOne
    </select>

    <insert id="insert">
        flying:insert
    </insert>

    <update id="update">
        flying:update
    </update>

    <delete id="delete">
        flying:delete
    </delete>

        再在您的实体类上加上这样一些标注:

package myPackage;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
    
@Table(name = "account")
public class Account {
    @Id
    @Column
    private Integer id;
	    
    @Column
    private java.lang.String name;

    @Column
    private Integer age;
	    
    /* 省略 getter 和 setter */
}

        flying 就完全明白您的数据结构和您想做的事情了。 接下来您增删改查这个实体就会变得非常简单:

    /* 新增 */
    Account newAccount = new Account();
    newAccount.setName("ann");
    newAccount.setAge(18);
    accountService.insert(newAccount);

    /* 按主键查询 */
    Account account = accountService.select(newAccount.getId());
    
    /* 按姓名查询,这里忽略了年龄 */
    Account accountC1 = new Account();
    accountC1.setName("ann");
    Account account1 = accountService.selectOne(accountC1);
    /* account1 和 account 代表相同的业务数据 */
    
    /* 按年龄查询,这里忽略了姓名 */
    Account accountC2 = new Account();
    accountC2.setAge(18);
    Account account2 = accountService.selectOne(accountC2);
    /* account2 和 account 代表相同的业务数据 */
    
    /* 按姓名和年龄查询 */
    Account accountC3 = new Account();
    accountC3.setName("ann");
    accountC3.setAge(18);
    Account account3 = accountService.selectOne(accountC3);
    /* account3 和 account 代表相同的业务数据 */
    
    /* 修改 */
    account.setName("bob");
    accountService.update(newAccount);
    
    /* 按主键删除 */
    accountService.delete(newAccount);

         由于 flying 掌握了您全部的数据结构和实体关系,所以操作数据变得非常简单,您再也不需要定义 “getAccountById、getAccountByName、getAccountByAge” 这样重复性强的方法了,由此带来更大的好处是您的 service 层只需要关注事务方面的逻辑即可,它从低级代码中完全解放了出来。以上只是 flying 功能的冰山一角,其它的功能如多表联查、分页、乐观锁、或逻辑查询、复杂外键关系等 flying 都有简单的解决方案,您可以在 https://flyingdoc.gitee.io/ 中进行查看。

        flying 特点总结如下:

  • 数据操作入参和返回类型都是自定义的实体类,完全 no sql 杜绝各种‘’手滑‘’,项目可随意重构。
  • 支持跨表操作和跨数据源操作。

  • 非侵占工作机制,可以和您已有的 mybatis 方法协同工作。

  • 加入了优化过的缓存插件,可以对多数据源环境下 flying 方法和传统 mybatis 方法同时进行缓存管理。

  • 可以自定义主键生成器,全面支持或逻辑查询。(初雪版新增特性)

  • 可以在 flying 语句中指定查询的数据库和数据源,达到高性能跨库查询。(阳春版新增特性)

flying 获取方式:

        flying 的 maven 坐标为:

<groupId>com.github.limeng32</groupId>
<artifactId>mybatis.flying</artifactId>
<version>0.9.9</version>

        mybatis 版本与 flying 最新版本 清明 的对应关系见下:

mybatis 版本 flying-初雪 flying-阳春 flying-清明
3.3.0、3.3.1 0.8.3 不再支持 不再支持
3.4.0、3.4.1、3.4.2、3.4.3、3.4.4、3.4.5、3.4.6 0.9.3 0.9.4 0.9.9

       之所以采用分版本发布的方式是因为我们对 mybatis 每个版本的用户都认真负责,力求使您得到 flying 最大的好处。

flying 代码示例:

       我们还为您提供了一个快速上手的示例:

  1. 最新版本demo:https://gitee.com/limeng32/flying-demo-use-springboot

        更多内容请您参见软件文档 https://flyingdoc.gitee.io/

清明 新增内容:

  • 支持复杂的外键关系,如  join 的条件是同时满足多个逻辑判断且不仅限于相等
  • 在默认左联接的基础上支持右联接
  • 修正上一版本在高并发场景下 sql 语句有时会混乱的问题
  • demo 完全由 spring-boot 方式重构

阳春 新增内容:

  • @FieldMapperAnnotation 和 @ConditionMapperAnnotation 增加了 customTypeHandler 属性,其具有最高优先级。

初雪 新增内容:

  • 自定义主键生成器,包括 flying 内置和完全自定义两种形式。

  • 全面支持或逻辑查询,可以用在普通查询和跨表查询中。

  • @QueryMapperAnnotation 现在可以省略,只要您的某个类既继承实体 pojo 又实现 Conditionable 接口 flying 就可以判断出它是相关 pojo 的条件类。

0.9.2 新增内容:

  • 兼容 JPA 中的 @Column、@Id、@Table 标签,这些标签可以和 @FieldMapperAnnotation、@TableMapperAnnotation 协同使用,优先级从高到低为:@Id、@FieldMapperAnnotation 和 @TableMapperAnnotation、@Column 和 @Table。
  • 现在 ignoreTag 对 insert、update、updatePersistent 也会起作用。如果 @Column 中设置 insertable = false 和 updateable = false,会在新增和修改时起到永久性忽略的作用。

  • 关于或逻辑的思考        本篇文章我们来探讨如何使用 flying 的方式来描述带有 ”or” 关键字的 sql 语句(如果您对 flying 还不了解,请参见 https://www.oschina.net/p/flying)。一直以来,flying力求做到的就是,把每一次与数据库交互都变为对象交互,而不是字符串交互,因为对象相比字符串至少有以下好处: 对象是完全解析的。比如我有一个子容器

  • SpringBoot+FreeMarker+flying-saucer-pdf实现PDF预览、分页需求 需求说明 MicroSoft Word文档转换PDF文档 实际工作场景中,类似于业务部门提供合同的Word文档范本,预览合同、签署合同、下载合同均需求使用PDF文档。 程序示例 程序示例说明 示例程序通过两种方式实现了FreeMarker+flying-saucer-pdf的PDF预览、分页需求

 相关资料
  • 如果默认的调度器不满足要求,还可以部署自定义的调度器。并且,在整个集群中还可以同时运行多个调度器实例,通过 podSpec.schedulerName 来选择使用哪一个调度器(默认使用内置的调度器)。 开发自定义调度器 自定义调度器主要的功能是查询未调度的 Pod,按照自定义的调度策略选择新的 Node,并将其更新到 Pod 的 Node Binding 上。 比如,一个最简单的调度器可以用 sh

  • 我正在尝试使用maven assembly插件生成zip文件程序集。我只剩下两个问题,我想知道是否有可能仅仅通过配置来解决,但作为最后的手段,我也在考虑编写自己的maven插件来扩展maven assembly插件 丢失的两块是 > 将与include模式匹配的每个依赖项放入其自己的 这是我的程序集的相关部分 这将使用

  • Kubernetes在设计之初就充分考虑了可扩展性,很多资源或操作都可以通过插件来自由扩展,比如认证授权、网络、Volume、容器执行引擎、调度等。

  •        扩展插件为LSV(LocaSpaceViewer)的扩展应用中心。扩展插件会定期更新各种实用小工具,方便广大朋友使用。插件功能可以独立获取授权,购买授权后,可以在LSV软件内直接使用。授权只和账号绑定,与所用电脑无关。 坐标地址批处理工具 功能介绍        地理编码指将结构化内容转换为经纬度坐标,逆地理编码指将经纬度坐标转换成结构化地址。使用该功能模块,可以快速批量把Excel

  • Simditor only integrates key features and uses extensions to support some optional features. Send your repository to us! We are happy to receive your extensions! Please make your extension has the sim

  • 插件扩展是基于 Highcharts 的基础上进行功能的二次封装,Highcharts 自 2.3 版本开始提供了多种扩展方法,利用这些方法可以很方便的扩展出自己想要的功能或图表类型。 下面是关于插件扩展相关的链接: 官方插件库 如何创建插件 提交插件到官方插件库

  • Kubernetes v1.8 开始增加了 Alpha 版的 Device 插件,用来支持 GPU、FPGA、高性能 NIC、InfiniBand 等各种设备。这样,设备厂商只需要根据 Device Plugin 的接口实现一个特定设备的插件,而不需要修改 Kubernetes 核心代码。 Device 插件原理 使用 Device 插件之前,首先要开启 DevicePlugins 功能,即配置

  • Kubernetes已经提供丰富的Volume和Persistent Volume插件,可以根据需要使用这些插件给容器提供持久化存储。 如果内置的这些Volume还不满足要求,则可以使用 FlexVolume 或者 CSI 实现自己的Volume插件。 CSI Contaner Storage Interface (CSI) 是从 v1.9 引入的容器存储接口(alpha版本),用于扩展 Kube