简介

重要提醒 [2025-03-31]
  当前最新快照版本:8.7.2-SNAPSHOT
 【最新版本号查看】【各版本主要差异】【anyline,jdk,spring版本对应】【示例代码

下载的源码在执行前,首先要配置好maven环境,请参考【maven配置
关于多数据源,请先看阅读 【六种方式注册数据源】【三种方式切换数据源】【多数据源事务控制】【异构数据库迁移

数据中台等场景需要生成SQL/操作元数据参考【JDBCAdapter】【返回SQL方言、导出SQL】【service.metadata】【SQL.metadata】【表结构差异对比及生成DDL
低代码平台等重前端场景提供了几种约定格式用来实现快速开发:【约定格式
习惯JPA(mybatis,hibernate,spring-data-jdbc,spring-data-jpa等)的用户,或原项目是基于JPA的 参考【这里
几个容易造成混淆与疑惑的操作【rename】【几个实体类属性的数据类型】【condition()参数】【metadata缓存】【删除列

有问题请不要自行百度,因为百度收录的内容(包括本站)有可能过期或版本不一致,有问题请联系【技术支持】中的群
【入门】【动态数据源】【低代码、自定义查询条件】【元数据】【事务】【性能】【非Spring】【源码】


QQ群
微信群

AnyLine MDM的核心是一个面向运行时的 元数据动态映射
主要用来操作数据库结构以及读写元数据
常用于动态场景的底层支持,作为SQL合成引擎或适配器出现
如:数据中台、可视化数据源、低代码、SAAS、自定义表单、异构数据库迁移同步、 物联网车联网数据处理、 动态表单、动态查询条件、 爬虫数据解析等。

核心功能:

  1. 动态数据源管理
    支持运行时动态注册、切换、注销各种不同类型数据源
    提供七种数据源注册方式和三种切换机制

  2. 数据库结构和元数据管理
    支持数据库结构的动态管理(如自动建表、字段扩展)和元数据的标准化采集(包括数据类型、注释、约束规则等),实现数据结构与元数据的统一治理
    表结构差异对比
    异构数据库结构复制及数据同步

  3. 动态DDL
    基于元数据信息比对,分析表结构差异并生成跨数据库的动态DDL,支持字段类型映射、约束转换、索引等,常用于数据库迁移与版本同步。

  4. 动态查询条件
    基于元数据的动态查询条件解决方案,实现灵活的数据筛选、排序和分页功能。    
    支持多层复杂条件组合、跨数据库兼容,可通过JSON、String、ConfigStore等多种格式自动生成查询条件。    
    尤其适合低代码平台,避免繁琐的判断、遍历、格式转换,同时保持高性能和可维护性。  

  5. 数据库兼容适配
    统一各种数据库方言 实现元数据对象在各个数据库之间无缝兼容
    关系型、键值、时序、图谱、文档、列簇、向量、搜索、空间、RDF、Event Store、Multivalue、Object
    特别是对于国产数据库的支持

  6. 对动态数据结构(DataSet<DataRow>),内存计算
    基于动态表达式引擎和类SQL过滤并内置各种数学计算公式,实现一键完成对结果集的聚合/过滤/行列转换等数学运算,避免传统ORM的繁琐遍历操作

  7. 多数据源事务管理
    实现数据源任意切换 保持多个事务状态 支持跨线程事务

  8. 权限管理
    对角色、用户、权限的管理

已经有了ORM了,为什么还要用AnyLine,两者有什么不同:

  • 一、面向场景不同‌
    AnyLine:主要面向动态场景,即运行时随时可变的场景。例如,动态数据源可能在不确定的时间由不确定的用户提供,表结构等元数据也可能随着用户或数据源的不同而随时变化。
    传统ORM‌:更适用于静态或相对稳定的场景,其中数据库表结构、实体类等在开发阶段就已经明确,并且在使用过程中不会发生频繁变化。

  • 二、针对产品不同‌
    AnyLine:通常不会直接用来开发面向终端用户的产品(如ERP、CRM等),而是用来开发中间产品(如低代码平台),让用户通过中间产品来生成最终产品。例如,可以使用AnyLine开发一个自定义查询分析工具,让用户根据业务需求生成动态报表。
    传统ORM‌:则更常用于直接开发面向终端用户的应用系统,通过ORM框架提供的对象关系映射功能,简化数据库操作,提高开发效率。

  • 三、操作对象不同‌
    AnyLine:主要操作元数据,因为在项目开发之初可能还没有一个明确的产品,也就没有具体的对象及属性可操作。AnyLine通过操作元数据来帮助用户实现对业务数据的设计与操作。‌
    传统ORM‌:则主要操作具体的实体类及其属性,这些实体类与数据库表结构相对应,通过ORM框架提供的映射关系进行数据库操作。

  • 四、面向用户不同‌
    AnyLine:面向基础工具或底层设计人员,特别是那些需要设计动态、灵活的应用系统的用户。AnyLine提供了强大的动态元数据引擎和结果集操作能力,以满足这些用户对系统灵活性和可扩展性的需求。‌
    传统ORM‌:则更面向广大开发人员,特别是那些需要快速开发、维护关系型数据库应用系统的用户。ORM框架通过提供对象关系映射功能和各种高级特性(如事务管理、缓存等),降低了数据库操作的复杂度,提高了开发效率。

  • 五、对用户要求不同‌
    AnyLine:要求用户(特别是开发设计人员)对系统的动态性和灵活性有较高的认识和理解。由于AnyLine主要操作元数据并支持动态场景,因此用户需要具备一定的元数据操作能力和对业务需求的深入理解。‌
    传统ORM‌:则相对更易于上手和使用。ORM框架通过提供直观的映射关系和面向对象的数据库操作方式,降低了数据库操作的门槛。即使是没有丰富数据库操作经验的开发人员,也能通过ORM框架快速上手并开发出功能完善的应用系统。

  • 六、设计理念与实现方式不同
    1. 动态 VS 静态
      AnyLine‌:基于运行时元数据驱动,支持动态数据源注册(如用户运行时提供数据库地址/类型),无需预定义实体类或映射关系。
      ‌传统ORM‌(如Hibernate):依赖静态实体类与数据库表的预映射,需提前配置方言和表结构。

    2. 元数据操作 VS 对象操作
      ‌AnyLine‌:面向数据库结构(如表、视图、列等)和元数据(数据类型、长度、精度等),适用于低代码平台或未知业务场景。
      ‌传统ORM‌:通过对象模型(Class/Property)间接操作数据库,需预先定义对象关系

    3. 多数据库适配
      ‌AnyLine‌:通过动态元数据引擎和智能方言适配,实现异构数据库的无缝兼容。内置200+种SQL语法转换规则,自动识别数据库类型并生成目标方言SQL,将不同数据库的元数据抽象为标准化对象,通过统一接口操作,实现元数据对象在各个数据库之间无缝兼容。
      ‌传统ORM‌:需硬编码实体类和方言,无法动态适配异构数据库的元数据差异和自动转换SQL语法,扩展性和兼容性受限。

DataSet/DataRow vs 传统ORM实体类对比:

对比维度 Anyline (DataSet/DataRow) 传统ORM (Entity Class)
数据表示方式 动态结构,类似内存数据库表(DataRow表示行DataSet表示表) 静态强类型类(如User.java)需预定义字段和类型
灵活性 ✅ 动态适应表结构变更(如新增字段无需修改代码) ❌ 表结构变更需同步修改实体类和映射配置
查询结果处理 直接操作动态结果集(支持动态聚合、行列转换) 需通过DTO或投影接口转换查询结果
低代码支持 ✅ 无需预知业务模型,适合动态表单和即席查询 ❌ 需提前定义实体类,灵活性低
性能开销 轻量级,无反射和代理生成(直接操作元数据) 可能因反射/字节码增强(如Hibernate代理)产生额外开销
复杂映射支持 ⚠️ 默认手动处理(如多表JOIN结果)也支持各种ORM注解 ✅ 自动管理关联(如@OneToMany
适用场景 动态业务(如代代码、数据中台)、异构数据库操作 固定业务模型(如ERP、CRM)

AnyLine的应用场景

如何实现

解析层(自动将标准SQL语法转换为不同数据库的方言表达)
元数据抽象层(构建统一数据视图屏蔽结构差异)
多协议适配层(支持JDBC/ODBC/REST等混合协议接入)
使应用层能够以统一接口透明访问异构数据源,无需关心底层数据库类型、版本差异或分布位置,从而显著降低多源数据整合的技术复杂度
DataSourceHolder
DataRuntime
DriverAdapter
DriverActuator
ServiceProxy
DataSet/DataRow

AnyLine提供了什么

  1. 运行时动态数据源与数据结构支持‌:支持运行时动态注册和切换数据源,根据元数据自动生成 SQL 语句处理复杂查询条件。
  2. 简单快速的数据库操作‌:提供简洁 API,简化分页查询、数据插入、更新、删除等数据库操作流程,支持动态查询条件,避免手动拼接 SQL 语句。
  3. 灵活的结果集处理‌:以 Map 类型处理结果集,提供丰富数据处理函数,涵盖空值处理、字符串处理、数学计算等。
  4. 多数据源支持‌:轻松切换数据源,无需复杂设计模式,通过简洁 API 管理多个数据源,让开发者专注业务逻辑。
  5. 减少重复工作‌:支持用户自定义查询条件,可通过配置字典或低代码开发平台实现,自动生成 SQL 语句,避免手动编写的繁琐过程。
  6. 多方言支持‌:支持多种数据库的 DML 和 DDL 操作,包括国产库和小众库,参数化自动生成 SQL,降低对不同数据库语法的熟悉程度要求。

价值‌:

  1. 提高开发效率‌:简化数据库操作流程和自动生成 SQL 语句,减少手动编写 SQL 语句的时间和错误率。
  2. 增强灵活性‌:支持动态数据源和数据结构,以及灵活的结果集处理方式,满足多样化的数据处理需求。
  3. 降低开发难度‌:提供简洁 API 和丰富数据处理函数,使开发人员能更轻松处理数据库操作,不需要熟悉上百数据库语法。

优势‌:

  1. 灵活性‌:支持动态数据源和数据结构,可根据实际运行时需求灵活调整,提供灵活的结果集处理方式,满足多样化数据处理需求。
  2. 高效性‌:简化数据库操作流程,提高开发效率,自动生成 SQL 语句,减少手动编写的时间和错误率。
  3. 易用性‌:提供简洁 API 和丰富数据处理函数,降低开发难度,支持用户自定义查询条件和多方言 SQL 生成

误解

当然我们并不是要抛弃Entity或ORM,不同的场景确实需要不同的解决方案,而 ‌AnyLine‌ 的设计理念正是为了提供灵活性和扩展性,同时不排斥传统的 ‌Entity‌ 或 ‌ORM‌ 使用。

‌AnyLine 与 Entity/ORM 互补而非替代‌:

‌Entity/ORM‌ 在 ‌可预知、固定‌ 的场景下具有强类型、编译时检查、代码可读性强等优势,适合业务逻辑稳定、数据结构明确的场景。
‌AnyLine‌ 则专注于 ‌动态、运行时‌ 的场景,如数据中台、多数据源、动态查询条件、结果集灵活处理等,解决传统 ORM 在这些场景下的不足。
‌场景适配‌:
如果业务逻辑清晰、数据结构固定(如订单系统、用户管理等),使用 ‌Entity/ORM‌ 是更合适的选择。
如果业务逻辑复杂、数据源动态变化(如数据中台、报表系统、多租户系统等),‌AnyLine‌ 的动态能力可以显著提升开发效率。
‌AnyLine 中的 Entity 使用‌:

‌AnyLine‌ 的源码中确实使用了多个 ‌Entity‌(如几何图形等),这说明 ‌AnyLine‌ 本身并不排斥 ‌Entity‌,而是根据场景选择最合适的工具。
在 ‌AnyLine‌ 中,‌Entity‌ 可以作为固定数据结构的载体,与动态数据源和查询条件结合使用,实现更灵活的业务逻辑。
‌如何选择合适的工具‌
‌分辨场景‌:
程序员需要具备分辨场景的能力,根据业务需求选择合适的技术方案。
对于固定场景,优先使用 ‌Entity/ORM‌;对于动态场景,优先使用 ‌AnyLine‌。
‌结合使用‌:

在实际项目中,‌Entity/ORM‌ 和 ‌AnyLine‌ 可以结合使用,发挥各自的优势。
例如,使用 ‌Entity/ORM‌ 处理核心业务逻辑,使用 ‌AnyLine‌ 处理动态查询、多数据源切换等需求。
‌避免过度设计‌:

不要为了使用某种技术而强行适配场景,应根据实际需求选择最简单的解决方案。
‌AnyLine‌ 的目标是降低开发复杂度,而不是增加复杂度。

如何集成

数据操作不要再从生成xml/dao/service以及各种配置各种O开始
只需要一个依赖、一个注解即可实现与springboot,netty等框架项目完美整合,剩下的交给默认的service。参考【入门系列

关于数据库的适配

直接看示例(代码都是一样的、可以用来测试一下自己的数据库是否被支持)

https://gitee.com/anyline/anyline-simple/tree/master/anyline-simple-data-jdbc-dialect

更多数据库请查看【数据库支持

没有示例的看这个目录下有没有 【anyline-data-jdbc-dialect】还没有的请联系【技术支持】中的管理员

相关分类
首页 最近更新 搜索 提交 回复