sqltoy-orm-5.0.0 发版,分享给大家最睿智的 ORM 框架!

来源: 投稿
作者: zhongxuchen
2021-06-30
  • 写在开头

    sagacity-sqltoy 是JPA+超强查询有机融合体,是个人长期项目实践的归纳总结,极为注重项目过程实践,尤其是项目痛点,如:sql注入、动态条件sql编写、树形结构查询、sql跨数据库、查询性能极致优化、极致的分页查询、涉及统计分析的行列转换、分组汇总计算等等,都有极为独特的解决策略!

    感谢广大网络用户的支持和反馈,sagacity-sqltoy5.0 在拥有良好特性的基础上进一步完善了代码结构,必将更好的为大家的选择提供坚实的支撑!

1. 规整4.x版本的代码目录,使其更加科学

  • 去除executor目录,将QueryExecutor 对外的模型统一移入model目录下面
  • 将非对外的内部模型移入到model.inner 包下面,将一些配置化的模型移入到config.model下面

2. 将PaginationModel 改为Page,并将PageNo 由Long改为long,避免需要写1L,简化书写
3. 优化support下面的LinkSupport,BaseSupport

  • 剔除掉LinkSupport和BaseSupport,合并到SqlToyDaoSupport

4. 去除一些根本用不到的方法,避免产生疑问和混淆,使得SqlToyDao更加清晰

  • 去除updateFetchTop、updateFetchRandom
  • 去除:public Long executeSql(String sqlOrNamedSql, Serializable entity, ReflectPropsHandler reflectPropertyHandler)带有reflectPropertyHandler 的开放方法

5. 去除@ListSql  @PageSql @LoadSql 这些注解,尽量让使用方法归一
6. 去除ObtainDataSource,避免跟DataSourceSelector产生功能重叠
7. 将ConnectonFactory移入org.sagacity.sqltoy.plugins.datasource包下
8. 剔除findAll方法,用findEntity(Class voClass,null) 代替findAll方法属于极小众方法
9. 并行查询设置分页模型方法:pageMode(Pagination pageModel)改为page(Page page)
10. 增加loadEntity方法,通过EntityQuery获得单条记录:

 public <T extends Serializable> T loadEntity(Class<T> entityClass, EntityQuery entityQuery);

11. 增加numFmt(numberFormat) 对英文金额转大写的支持

   <number-format columns="total_amt" format="capital-en"/>

12. 删除对SybaseIQ数据库的支持
13. 优化部分不使用的代码和注释

4.x 升级5.0 修改点

  • 分页查询PaginationModel 类改为Page
  • org.sagacity.sqltoy.executor.QueryExecutor 改为 org.sagacity.sqltoy.model.QueryExecutor
  • 拥有JPA模式的对象CRUD

对象式CRUD是ORM框架的基本共识,这里不做更多介绍。

  • 超强查询:最理想的状态就是:第一在数据库客户端调试好的sql 最直观高效的移入项目工程中;第二、在需求变化时最简单快速的可以从工程中放入数据库客户端中进行调试。也就是说要最大限度的保持sql的原始面貌;

  • 用ORM我们真真正正的痛点是什么?

1、sql的编写和后期维护,上面的图例已经说明问题。

2、执行效率:当同样功能效率有几倍差距时其实就是天地之别了,带来的直接效果就是:一边是用户的高度夸赞、一边是用户的鄙视,您能理解这是什么差距吗?

  • sqltoy的缓存翻译,大幅减少表关联简化sql,让你的查询性能成几何级提升

阐述sqltoy为什么秒杀mybatis(plus)

  • 极致的分页,同样帮助你实现查询的性能大幅提升
  1. 快速分页:@fast() 实现先取单页数据然后再关联查询,极大提升速度
  2. 分页优化器:page-optimize 让分页查询由两次变成1.3~1.5次(用缓存实现相同查询条件的总记录数量在一定周期内无需重复查询
  3. sqltoy的分页取总记录的过程不是简单的select count(1) from (原始sql);而是智能判断是否变成:select count(1) from 'from后语句', 并自动剔除最外层的order by
  4. sqltoy支持并行查询:parallel="true",同时查询总记录数和单页数据,大幅提升性能
  5. 在极特殊情况下sqltoy分页考虑是最优化的,如:with t1 as (),t2 as @fast(select * from table1) select * from xxx 这种复杂查询的分页的处理,sqltoy的count查询会是:with t1 as () select count(1) from table1, 如果是:with t1 as @fast(select * from table1) select * from t1 ,count sql 就是:select count(1) from table1
阐述sqltoy为什么秒杀mybatis(plus)
 
  • 做过统计分析的您,害怕数据旋转吗?害怕同比环比吗?
阐述sqltoy为什么秒杀mybatis(plus)

 

  • 无限极分组统计(含汇总求平均),算法配置简单又跨数据库!
阐述sqltoy为什么秒杀mybatis(plus)

 

  • 同比环比
阐述sqltoy为什么秒杀mybatis(plus)
展开阅读全文
7 收藏
分享
加载中
最新评论 (2)
Bravo
2021-07-01 08:42
0
回复
举报
👍
2021-06-30 14:39
0
回复
举报
更多评论
2 评论
7 收藏
分享
返回顶部
顶部