开源项目地址:https://github.com/chenrenfei/sagacity-sqltoy
文档地址:https://chenrenfei.github.io/sqltoy/
1、sqltoy-orm 在对象操作领域类似于hibernate和jpa模式,提供load/loadAll、save/saveAll、update、delete等常规的对象操作。这个方向上大家差异性不大,并不需要写sql。但update sqltoy则更具优势,提供了update(entity,String[] forceUpdateProps) 类型的操作,可以实现一次数据库交互完成部分字段变更,对项目实际场景的把握非常到位。
2、sqltoy-orm 提供了updateFetch功能,可以实现一次数据库交互完成修改并返回修改结果,尤其适用于高并发场景锁记录操作,比如:库存台账、资金台账、订单台账,如客户下单并扣除客户资金的场景(往常需要先lockLoad,然后再更新数据再调用update)。
3、sqltoy-orm在sql编写上,风格极为简化直观,尤其动态查询条件场景下,更加符合开发习惯、更加符合后期阅读和变更,同样的功能实现,看一下mybatis和sqltoy的编写方式
- mybatis的写法(看不明白意思,不利于运维和变更,而且学习成本很高,太多复杂的xml模式):
<code> select * from sqltoy_device_order_info t and t.ORDER_ID=#{orderId} and t.ORGAN_ID in #{order_id} and t.STAFF_ID in #{staff_id} and t.TRANS_DATE>=#{beginDate} and t.TRANS_DATE /<code>
- sqltoy的写法,简洁直观,dbeaver上调试完直接黏贴进来,很容易学习,基本上只有一个概念:#[]
等于if(null),且支持嵌套。当然少数情况下会结合类似于来对参数做转null的逻辑归一处理。
<code>select * from sqltoy_device_order_info t where #[t.ORDER_ID=:orderId] #[and t.ORGAN_ID in (:authedOrganIds)] #[and t.STAFF_ID in (:staffIds)] #[and t.TRANS_DATE>=:beginDate] #[and t.TRANS_DATE/<code>
4、sqltoy-orm 提供了极为畅快淋漓的缓存翻译,可以大幅减少表关联,同时大幅提升查询的性能。
比如:穿查询订单表,要体现下单员姓名、部门、订单状态名称、客户名称、商品名称,你的sql怎么写?又长又臭性能还低是必然的!
而sqltoy则利用缓存翻译几乎可以变成单表查询:
5、sqltoy提供了极为通透的分页优化,几乎可以肯定了解sqltoy的分页优化策略完全可以不care其他的分页了,因为其他的分页只考虑了最初级的模式。分页共分4个等级:
- 实现基于数据库方言的分页
- 考虑count语句的优化,避免select 和from之间的计算、避免有order by等影响性能的不必要的性能浪费。
- 实现快速分页,即在多表关联场景下,针对条件区域先实现分页,然后再跟其他表进行关联或计算。
- 利用缓存模式,直接避免每次都取count记录。
6、sqltoy是根本上杜绝sql注入的,因为sqltoy对查询条件不是拼接,而是全部转为预编译传参模式。
7、sqltoy 提供了非常符合开发者的算法集成,如无限级的分组汇总求平均、行转列、列转行、同比环比计算,而这些往往都是普通开发者的弱点(靠sql写不出或者换了数据库又不通用)
具体参见:https://chenrenfei.github.io/sqltoy/#/
8、sqltoy提供了常规的直接调用:如取随机记录、取top记录、唯一性校验(isUnique)、取总记录数等
9、sqltoy提供了对树形结构表的跨数据库解决方案wrapTreeTableRoute,将表结构中统一构建节点路径、节点等级、是否叶子节点。
10、sqltoy提供了分库分表功能,而且执行过程是并行计算的。
11、sqltoy提供了统一字段赋值,解决创建时间、创建人、修改时间、修改人等信息的统一赋值。
12、sqltoy提供了跨数据库函数自动替换功能,比如concat、ws_concat、decode、date_format、if、instr、nvl、sysdate 、length、to-char、to-number、trim 等函数的自动转换适配。有助于软件产品在一种数据库下开发,不同数据库下执行。
13、其他的还有很多特性,如sql变更自动加载便于开发调试;超时sql打印等,就不一一介绍了。
sqltoy-orm已经在多家银行和企业应用,有兴趣我们可以一起来发展完善一个属于中国人的ORM框架!