多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 6.7 sqltoy跨库说明 sqltoy跨库有3个策略: 1. 通过算法减少数据库方言特性的使用,比如link、旋转、分组汇总、树形表格查询等。 2. 函数替换,sqltoy通过函数自动适配,将mysql的sql可以执行于oracle。 3. 通过多方言sql定义策略,框架根据当前使用数据库类型自动执行该方言的sql ### 6.7.1 Sqltoy函数替换 * 函数替换定义 ![](https://img.kancloud.cn/e6/57/e65792106522e2b6d091964400c471b6_661x192.png) 如包含自定义的函数: * 实现sqltoy里面的IFunction抽象类 ![](https://img.kancloud.cn/01/80/0180b39b691adc310dd1e9d116eef466_1147x1057.png) * 放入函数扩展定义中 FunctionConverts: default,com.xxxx.functions.GroupConcat Sqltoy中的default默认包含了下面的函数 ![](https://img.kancloud.cn/1c/c0/1cc0ed51e3ec783ed5d20b054a56bbd8_226x371.png) * 函数替换的规则 如果想要用自定义的实现类覆盖sqltoy自带的,只要类名称在不区分大小写的情况下跟sqltoy的函数类名称一致就会优先使用自定义的。 ### 8.5 函数替换 很多时候大家强调跨数据库,针对对象的操作较容易实现跨库,但直接编写的sql语句呢? 你的产品用mysql写的,能够直接用于oracle或sqlserver吗? sqltoy提供了可能!Sqltoy在首次加载或者动态执行时根据数据库类型替换自定义sql语句中的函数 ![](https://img.kancloud.cn/f5/5b/f55b8d7eaf180fc05e2f700edfaf6d2d_1021x494.png) ![](https://img.kancloud.cn/63/1f/631f67e9a4755327132785aa864f3c7c_509x809.png) ### 6.7.2 自带获取带方言的sqlId 备注:4.15.9 版本功能 * 不同数据库编写方式 * 数据库类型(小写)\_sqlId * sqlId\_数据库类型(小写) * 范例 ![](https://img.kancloud.cn/d3/d6/d3d6be9d82a2b2406b9a749c5823d10e_898x816.png) * 调用方式: 开发者直接使用不带数据库类型的id调用,sqltoy框架执行逻辑: 1. 获取当前执行的数据库类型名称小写,如:mysql 2. 逐步获取get(mysql\_sqlId)、get(sqlId\_mysql),get(sqlId) ![](https://img.kancloud.cn/5a/58/5a58ce219065057ee4d7d561e8c56130_867x165.png) * 小提示:如果是单一类型数据库,推荐配置sqltoy的方言,会减少一些判断 ![](https://img.kancloud.cn/9c/2b/9c2ba09ab38db84e7b1f22edf4ff0406_779x280.png)