# anyline_871
**Repository Path**: anyline/anyline_871
## Basic Information
- **Project Name**: anyline_871
- **Description**: 基于spring生态的D-ORM,兼容各种小众国产数据库。运行时动态注册切换数据源,生成DDL/DML。读写元数据。常用于动态场景的底层支持,如:数据中台、可视化、低代码后台、工作流、自定义表单、异构数据库迁移同步、物联网车联网数据处理、数据清洗、运行时自定义报表/查询条件/数据结构、爬虫数据解析等,只需要一个注解即可与spring完美整合。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: http://doc.anyline.org/
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 848
- **Created**: 2024-03-31
- **Last Updated**: 2024-04-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[【***招募开发合伙伴,个人或组织皆可***】](http://doc.anyline.org/ss/23_1213)
这里有[【400+】](http://doc.anyline.org/dbs)数据库,总有一个是你熟悉的
***详细说明请参考:***
[http://doc.anyline.org/](http://doc.anyline.org/)
开发测试来环境请使用[【8.7.1-SNAPSHOT】](http://doc.anyline.org/aa/aa_3702)版本 语法测试请参考[【各数据库模拟环境】](http://run.anyline.org/)
发版务必到[【中央库】](https://mvnrepository.com/artifact/org.anyline/anyline-core)找一个正式版本,不要把SNAPSHOT版本发到生产环境
关于多数据源,请先阅读
[【三种方式注册数据源】](http://doc.anyline.org/aa/a9_3451)
[【三种方式切换数据源】](http://doc.anyline.org/aa/64_3449)
[【多数据源事务控制】](http://doc.anyline.org/ss/23_1189)
低代码平台、数据中台等场景需要生成SQL/操作元数据参考
[【JDBCAdapter】](http://doc.anyline.org/ss/01_1193)
[【SQL及日志】](http://doc.anyline.org/aa/70_3793)
[【service.metadata】](http://doc.anyline.org/ss/22_1174)
[【SQL.metadata】](http://doc.anyline.org/aa/c1_3847)
***快速开始请参考示例源码(各种各样最简单的hello world):***
[https://gitee.com/anyline/anyline-simple](https://gitee.com/anyline/anyline-simple)
***一个字都不想看,就想直接启动项目的下载这个源码:***
[https://gitee.com/anyline/anyline-simple-clear](https://gitee.com/anyline/anyline-simple-clear)
有问题请不要自行百度,因为百度收录的内容有可能过期或版本不一致, 有问题请联系
[
](http://shang.qq.com/wpa/qunwpa?idkey=279fe968c371670fa9791a9ff8686f86dbac0b5edba8021a660b313e2dd863ad)
QQ群(86020680)
或
微信群
## 简介
AnyLine的核心是一个基于spring生态的D-ORM(动态对象关系影射), 其重点是:
- 以最简单、快速方式操作 ***数据库*** 与 ***结果集***
- 兼容各种数据库,统一读写DML/DDL/元数据(表结构、索引等)
- 一切基于动态、基于运行时(包括数据源、数据结构等)
常用于动态结构场景的底层支持,作为SQL解析引擎或适配器出现,
如:数据中台、可视化、低代码、SAAS、自定义表单、异构数据库迁移同步、 物联网车联网数据处理、
数据清洗、运行时自定义报表/查询条件/数据结构、 爬虫数据解析等。
参考【[适用场景](http://doc.anyline.org/ss/ed_14)】
实际开发过程中主要用来:
- 运行时动态注册切换数据源
- 生成动态SQL(重点是复杂的动态查询条件)
- 查询、操作元数据(如表结构、索引等)
- 屏蔽不同数据库的语法差异(主要是DDL差异)
### 已经有ORM了 为什么还要有AnyLine, 与ORM有什么区别
- ***面向场景不同***
anyline主要面向动态场景,就是运行时随时可变的场景。
如我们常用的动态数据源,不是在部署时可以固定在配置文件中,
而是可能在不确定的时间,由不确定的用户提供的不确定数据源。
表结构等元数据也可能随着着用户或数据源的不同而随时变化。
- ***针对产品不同***
anyline一般不会直接用来开发一个面向终端用户的产品(如ERP、CRM等),
而是要开发一个中间产品(如低代码平台),让用户通过中间产品来生成一个最终产品。
再比如用anyline开发一个自定义查询分析工具,让用户通过这个工具根据业务需求生成动态报表。
anyline不是要提供一个可二次开发的半成品船,而是可以用来造船的动态船坞。
- ***操作对象不同***
anyline主要操作元数据,因为在项目开发之初,可能就没有一个如ERP/CRM之类的明确的产品,
当然也就没有订单、客户之类的具体对象及属性,所以也没什么具体数据可操作。
- ***面向用户(开发设计人员)不同***
anyline要面向的不是开船的人,而是造船的人,而不是使用工具的人,而是设计工具的人。
anyline的大部分代码与灵感也是来自这部分用户的日常实践。
- ***所以对用户(开发设计人员)要求不同***
一个ORM用户用了许多年的连接池,他可以只知道配置哪几个默认参数,也能正常开展工作。
但anyline的用户不行,他要求这个团队中至少有一个人要明白其所以然。
### 实际操作中与ORM最明显的区别是
- ***摒弃了各种繁琐呆板的实体类以及相关的配置文件***
让数据库操作更简单,不要一动就是一整套的service/dao/mapping/VOPODTO有用没用的各种O,生成个简单的SQL也各种判断遍历。
- ***强强化了结果集的对象概念***
面向对象的对象不是只有get/set/注解这么弱
需要把数据及对数据的操作封装在一起,作为一个相互依存的整体,并实现高度的抽象
要关注元数据,不要关注姓名、年龄等具体属性
强化针对结果集的数据二次处理能力
如结果集的聚合、过滤、行列转换、格式化及各种数学计算尽量作到一键...一键...
而不要像ORM提供的entity, map, list除了提供个get/set/foreach,稍微有点用的又要麻烦程序员各种判断各种遍历
参考【[疑问与优劣对比](http://doc.anyline.org/ss/ae_1196)】
### 与如何实现
数据操作的两个阶段,1.针对数据库中数据 2.针对数据库查询的结果集(内存中的数据)
- ***提供一个通用的AnylineService实现对数据库的一切操作***
- ***提供一对DataSet/DataRow实现对内存数据的一切数学计算***
DataSet/DataRow不是对List/Map的简单封装 他将是提高我们开发速度的重要工具,各种想到想不到的数学计算,只要不是与业务相关的都应该能实现
## AnyLine解决或提供了什么
### 动态、运行时
即运行时才能最终确定 动态的数据源、数据结构、展现形式
如我们需要开发一个数据中台或者一个数据清洗插件,编码阶段我们还不知道数据来源、什么类型的数据库甚至不是数据库、会有什么数据结构对应什么样的实体类,
如果需要前端展示的话,更不会知道不同的终端需要什么各种五花八门的数据组合
那只能定义一个高度抽象的实体了,想来想去也只有Collection