简介
AnyLine MDM的核心是一个面向运行时的 元数据动态映射
主要用来操作数据库结构以及读写元数据
常用于动态场景的底层支持,作为SQL合成引擎或适配器出现
如:数据中台、可视化数据源、低代码、SAAS、自定义表单、异构数据库迁移同步、 物联网车联网数据处理、 动态表单、动态查询条件、 爬虫数据解析等。
核心功能:
-
动态数据源管理
支持运行时动态注册、切换、注销各种不同类型数据源
提供七种数据源注册方式和三种切换机制
-
数据库结构和元数据管理
支持数据库结构的动态管理(如自动建表、字段扩展)和元数据的标准化采集(包括数据类型、注释、约束规则等),实现数据结构与元数据的统一治理
表结构差异对比
异构数据库结构复制及数据同步
-
动态DDL
基于元数据信息比对,分析表结构差异并生成跨数据库的动态DDL,支持字段类型映射、约束转换、索引等,常用于数据库迁移与版本同步。
-
动态查询条件
基于元数据的动态查询条件解决方案,实现灵活的数据筛选、排序和分页功能。
支持多层复杂条件组合、跨数据库兼容,可通过JSON、String、ConfigStore等多种格式自动生成查询条件。
尤其适合低代码平台,避免繁琐的判断、遍历、格式转换,同时保持高性能和可维护性。
-
数据库兼容适配
统一各种数据库方言 实现元数据对象在各个数据库之间无缝兼容
关系型、键值、时序、图谱、文档、列簇、向量、搜索、空间、RDF、Event Store、Multivalue、Object
特别是对于国产数据库的支持
-
对动态数据结构(DataSet<DataRow>),内存计算
基于动态表达式引擎和类SQL过滤并内置各种数学计算公式,实现一键完成对结果集的聚合/过滤/行列转换等数学运算,避免传统ORM的繁琐遍历操作
-
多数据源事务管理
实现数据源任意切换 保持多个事务状态 支持跨线程事务
-
权限管理
对角色、用户、权限的管理
已经有了ORM了,为什么还要用AnyLine,两者有什么不同:
-
一、面向场景不同
AnyLine:主要面向动态场景,即运行时随时可变的场景。例如,动态数据源可能在不确定的时间由不确定的用户提供,表结构等元数据也可能随着用户或数据源的不同而随时变化。
传统ORM:更适用于静态或相对稳定的场景,其中数据库表结构、实体类等在开发阶段就已经明确,并且在使用过程中不会发生频繁变化。
-
二、针对产品不同
AnyLine:通常不会直接用来开发面向终端用户的产品(如ERP、CRM等),而是用来开发中间产品(如低代码平台),让用户通过中间产品来生成最终产品。例如,可以使用AnyLine开发一个自定义查询分析工具,让用户根据业务需求生成动态报表。
传统ORM:则更常用于直接开发面向终端用户的应用系统,通过ORM框架提供的对象关系映射功能,简化数据库操作,提高开发效率。
-
三、操作对象不同
AnyLine:主要操作元数据,因为在项目开发之初可能还没有一个明确的产品,也就没有具体的对象及属性可操作。AnyLine通过操作元数据来帮助用户实现对业务数据的设计与操作。
传统ORM:则主要操作具体的实体类及其属性,这些实体类与数据库表结构相对应,通过ORM框架提供的映射关系进行数据库操作。
-
四、面向用户不同
AnyLine:面向基础工具或底层设计人员,特别是那些需要设计动态、灵活的应用系统的用户。AnyLine提供了强大的动态元数据引擎和结果集操作能力,以满足这些用户对系统灵活性和可扩展性的需求。
传统ORM:则更面向广大开发人员,特别是那些需要快速开发、维护关系型数据库应用系统的用户。ORM框架通过提供对象关系映射功能和各种高级特性(如事务管理、缓存等),降低了数据库操作的复杂度,提高了开发效率。
-
五、对用户要求不同
AnyLine:要求用户(特别是开发设计人员)对系统的动态性和灵活性有较高的认识和理解。由于AnyLine主要操作元数据并支持动态场景,因此用户需要具备一定的元数据操作能力和对业务需求的深入理解。
传统ORM:则相对更易于上手和使用。ORM框架通过提供直观的映射关系和面向对象的数据库操作方式,降低了数据库操作的门槛。即使是没有丰富数据库操作经验的开发人员,也能通过ORM框架快速上手并开发出功能完善的应用系统。
-
六、设计理念与实现方式不同
-
动态 VS 静态
AnyLine:基于运行时元数据驱动,支持动态数据源注册(如用户运行时提供数据库地址/类型),无需预定义实体类或映射关系。
传统ORM(如Hibernate):依赖静态实体类与数据库表的预映射,需提前配置方言和表结构。
-
元数据操作 VS 对象操作
AnyLine:面向数据库结构(如表、视图、列等)和元数据(数据类型、长度、精度等),适用于低代码平台或未知业务场景。
传统ORM:通过对象模型(Class/Property)间接操作数据库,需预先定义对象关系
-
多数据库适配
AnyLine:通过动态元数据引擎和智能方言适配,实现异构数据库的无缝兼容。内置200+种SQL语法转换规则,自动识别数据库类型并生成目标方言SQL,将不同数据库的元数据抽象为标准化对象,通过统一接口操作,实现元数据对象在各个数据库之间无缝兼容。
传统ORM:需硬编码实体类和方言,无法动态适配异构数据库的元数据差异和自动转换SQL语法,扩展性和兼容性受限。
-
动态 VS 静态
DataSet/DataRow vs 传统ORM实体类对比:
对比维度 | Anyline (DataSet/DataRow) | 传统ORM (Entity Class) |
---|---|---|
数据表示方式 |
动态结构,类似内存数据库表(DataRow 表示行DataSet 表示表)
|
静态强类型类(如User.java )需预定义字段和类型
|
灵活性 | ✅ 动态适应表结构变更(如新增字段无需修改代码) | ❌ 表结构变更需同步修改实体类和映射配置 |
查询结果处理 | 直接操作动态结果集(支持动态聚合、行列转换) | 需通过DTO或投影接口转换查询结果 |
低代码支持 | ✅ 无需预知业务模型,适合动态表单和即席查询 | ❌ 需提前定义实体类,灵活性低 |
性能开销 | 轻量级,无反射和代理生成(直接操作元数据) | 可能因反射/字节码增强(如Hibernate代理)产生额外开销 |
复杂映射支持 | ⚠️ 默认手动处理(如多表JOIN结果)也支持各种ORM注解 |
✅ 自动管理关联(如@OneToMany )
|
适用场景 | 动态业务(如代代码、数据中台)、异构数据库操作 | 固定业务模型(如ERP、CRM) |
如何实现
解析层(自动将标准SQL语法转换为不同数据库的方言表达)
元数据抽象层(构建统一数据视图屏蔽结构差异)
多协议适配层(支持JDBC/ODBC/REST等混合协议接入)
使应用层能够以统一接口透明访问异构数据源,无需关心底层数据库类型、版本差异或分布位置,从而显著降低多源数据整合的技术复杂度
DataSourceHolder
DataRuntime
DriverAdapter
DriverActuator
ServiceProxy
DataSet/DataRow
AnyLine提供了什么:
价值:
优势:
误解
当然我们并不是要抛弃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】还没有的请联系【技术支持】中的管理员