# quattro **Repository Path**: markerccc/quattro ## Basic Information - **Project Name**: quattro - **Description**: 生态交互,原项目train - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-10-23 - **Last Updated**: 2024-11-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **使用协议:**
The Apache Software License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0.txt
**开发中,全代码不开源:**
**项目规划:** ``` native-api:api调用层 native-crawler: 爬虫层 native-jdbc: jdbc数据交互层 native-swagger: 文档 native-tx: 分布式事务 native-shiro: 权限 native-workflow: 工作流 native-verify: 数据验证 ``` **使用方案:** **1. 数据库表构建体系** ``` ``` **验证规则:** | | | |---|---| | type | 数据库该列数据类型(应映射为java类型,示例int->integer) | | cfa | 传入参数的合法性验证,示例(1,9) = 1 session交互 启用缓存, ref缓存数据库默认redis,state=true默认开启,refClass=自定义缓存处理类,继承cn.lesper.cacheRule **3. 默认CRUD,及手动构造** 查询(如果不写SQL语句,会自动根据前面配置好的数据映射构建SQL语句),支持关联查询: 分页参数:page,limit ``` SELECT * FROM sys_log WHERE r_id = :rId id=:id id=:id id=:id id=:id id=:id 1=1 1=1 ``` 链接跳转查询: 使用referto指定下一节点,最终查询将合并结果(支持跨xml链接) ``` SELECT * FROM sys_log id=:id id=:id 1=1 1=1 SELECT * FROM sys_log id=:id id=:id 1=1 1=1 SELECT * FROM sys_log id=:id id=:id 1=1 1=1 ``` 增加: ``` 不配置将默认组装 多表保存(支持跨xml指定) ``` 删除: ``` 不配置将默认组装 多表删除(支持跨xml指定) id=:id id=:id id=:id id=:id ``` | | | |---|---| | 默认节点(page=分页,info=详细查询,save=增改,del=删除) return="Object" 返回结果是一个对象,可手动指定entity。 | | | : | 条件构造均采用具名参数 | | from以下参数均可用 | 参数数据来源,默认从httpRequest body中取出,亦可from="session"表示从session中取出。示例 id=:id | | sql | sql语句,不填写默认根据实体组装 | | eq | 条件expression,条件满足才会组装sql条件| | where | sql where条件 | | and | sql and条件 | | forward |ref="跨xml跳转查询(test2.page,test2.info1),本地链接跳转查询(info不可带点),后台拼接结果集" | | info>referto="info1,info2" | 子节点指定 | | info>major | 主节点语句 | | info>majorParam | 主节点条件 | | info1>minor| 子节点语句 | | info1>minorParam | 子节点条件 | **4. 事务:**
default:
- TransactionUtils.start(开启) - TransactionUtils.commit(提交) - TransactionUtils.rollback(回滚) **5. 分布式事务(sharding):** 一.柔性事务
**_1.最大努力送达型_**
![输入图片说明](https://images.gitee.com/uploads/images/2018/0906/114546_2bb3e51a_1132713.png "QQ截图20180906114425.png") **适用场景:**
- 根据主键删除数据。
- 更新记录永久状态,如更新通知送达状态。
**使用规则:**
- 使用最大努力送达型柔性事务的SQL需要满足幂等性。
- INSERT语句要求必须包含主键,且不能是自增主键。
- UPDATE语句要求幂等,不能是UPDATE xxx SET x=x+1
- DELETE语句无要求。
**_2.TCC型_**
~待正 **_3.分库分表**
``` CREATE TABLE IF NOT EXISTS t_order_x ( order_id INT NOT NULL, user_id INT NOT NULL, PRIMARY KEY (order_id) ); CREATE TABLE IF NOT EXISTS t_order_item_x ( item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, PRIMARY KEY (item_id) ); ``` _均匀分布:_ ``` db0 ├── t_order_0 └── t_order_1 db1 ├── t_order_0 └── t_order_1 ``` _规则构建:_ ` TableRule orderTableRule = TableRule.builder("t_order").actualTables(Arrays.asList("t_order_0", "t_order_1")).dataSourceRule(dataSourceRule).build();` _自定义分布:_ ``` db0 ├── t_order_0 └── t_order_1 db1 ├── t_order_2 ├── t_order_3 └── t_order_4 ``` _规则构建:_ ` TableRule orderTableRule = TableRule.builder("t_order").actualTables(Arrays.asList("db0.t_order_0", "db0.t_order_1", "db1.t_order_2", "db1.t_order_3", "db1.t_order_4")).dataSourceRule(dataSourceRule).build();` _案例:_ ``` db0 ├── t_order_0 user_id为偶数 order_id为偶数 ├── t_order_1 user_id为偶数 order_id为奇数 ├── t_order_item_0 user_id为偶数 order_id为偶数 └── t_order_item_1 user_id为偶数 order_id为奇数 db1 ├── t_order_0 user_id为奇数 order_id为偶数 ├── t_order_1 user_id为奇数 order_id为奇数 ├── t_order_item_0 user_id为奇数 order_id为偶数 └── t_order_item_1 user_id为奇数 order_id为奇数 ``` _逻辑表与实际表:_ ``` select * from t_order where user_id = ? and order_id = ?; 当user_id=0且order=0时,Sharding-JDBC将会将SQL语句转换为如下形式: select * from db0.t_order_0 where user_id = ? and order_id = ?; 其中原始SQL中的t_order就是 逻辑表,而转换后的db0.t_order_0就是 实际表 ``` 更多详细配置参见:[sharding-jdbc](http://shardingsphere.io) **技术选型:**
xml解析框架:dom4j
数据交互:java jdbc
数据交互优化方案:sharding-jdbc(可选。大型分布式采用)
web框架:Spring 4.3.8[用于测试可移除使用其他web框架,例如Struts]
**正在优化中~**