# anyline
**Repository Path**: amtech/anyline
## Basic Information
- **Project Name**: anyline
- **Description**: 基于spring生态的D-ORM,兼容各种数据库。动态注册切换数据源,生成或执行DDL/DML。读写元数据。常用于动态结构的场景,如:数据中台、可视化、低代码后台、SAAS、自定义表单、异构数据库迁移同步、物联网车联网数据处理、数据清洗、运行时自定义报表/查询条件/数据结构、爬虫数据解析等,只需要一个注解即可与springboot,mvc等框架项目完美整合。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: http://doc.anyline.org/
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 846
- **Created**: 2023-08-26
- **Last Updated**: 2023-08-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
***详细说明请参考:***
[http://doc.anyline.org/](http://doc.anyline.org/)
下载的源码在执行前,首先要配置好maven环境,请参考[【maven配置】](http://doc.anyline.org/ss/35_1148)
关于多数据源,请先阅读
[【三种方式注册数据源】](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)
或
[【AnylineDao】](https://gitee.com/anyline/anyline/blob/master/anyline-data/src/main/java/org/anyline/dao/init/springjdbc/DefaultDao.java)
***快速开始请参考示例源码(各种各样最简单的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解析引擎或适配器出现 ,
就是根据用户提交的参数,翻译成不同数据库的方言(DML/DDL)
如:数据中台、可视化、低代码、SAAS、自定义表单、异构数据库迁移同步、物联网车联网数据处理、数据清洗、运行时自定义报表/查询条件/数据结构、爬虫数据解析等。参考【[适用场景](http://doc.anyline.org/ss/ed_14)】
也可以这样理解,ORM相当于总成、而anyline相当于散件DIY。
如果你的开发出来的产品面向的终端业务用户,如作个CRM/MRP或**管理系统之类的,那你选ORM不会有什么大问题,最多也就是写SQL和配置文件费点代码。
但你既然都找到这了,那你的需求当然不会这么简单了。有可能考虑的重点是团队的技术积累,面向的是基础程序员,
比如要给大家提供一个低代码之类的基础平台。这就不是三言两语的事了,参考【[技术选型](http://doc.anyline.org/ss/3e_1199)】
### 与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
AnyLine的用户按来源大概分两类,一类是技术选型过程中选到了AnyLine,这类用户既然有造型能力,那他需要什么以及AnyLine能提供什么自己是非常清晰的。对于这类用户也不需要解释什么了。
主要是第二类用户,是参与的项目中已经有了AnyLine,属于被动接收。
对于这类用户首先会有个疑问:已经了有spring-data,hibernate,mybatis 为什么还多此一AnyLine
如果只是Hello World似的增删改查,那确实不需要,但实际工作中发现太难了、工作量太大了
(补充:工作不是指找工作不是求职面试,找工作的话anyline可能是个减分项)
还是从动态、简单、结果集说起
### 动态、运行时
即运行时才能最终确定 动态的数据源、数据结构、展现形式
如我们需要开发一个数据中台或者一个数据清洗插件,编码阶段我们还不知道数据来源、什么类型的数据库甚至不是数据库、会有什么数据结构对应什么样的实体类,
如果需要前端展示的话,更不会知道不同的终端需要什么各种五花八门的数据组合
那只能定义一个高度抽象的实体了,想来想去也只有Collection