sqltoy的分页取总记录的过程不是简单的select count(1) from (原始sql);而是智能判断是否变成:select count(1) from 'from后语句', 并自动剔除最外层的order by
sqltoy支持并行查询:parallel="true",同时查询总记录数和单页数据,大幅提升性能
在极特殊情况下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
并行查询:同时执行多个查询,提升性能
String[] paramNames = new String[] { "userId", "defaultRoles", "deployId", "authObjType" };
Object[] paramValues = new Object[] { userId, defaultRoles, DEPLOY_ID,GROUP };
List<QueryResult<TreeModel>> list = super.parallQuery(
Arrays.asList(
ParallQuery.create().sql("webframe_searchAllModuleMenus").resultType(TreeModel.class),
ParallQuery.create().sql("webframe_searchAllUserReports").resultType(TreeModel.class)),
paramNames, paramValues);
sqltoy-orm 4.18.20 发版,您还在坚持 mybatis(plus) 吗?
开源地址:
更新内容
1、优化wrapTreeTable 表名取schemaTable,即当pojo中含schema时为schema.xxxx 形式
2、在QueryExecutor中增加pivot和Unpivot操作,为开发者提供动态设置操作
个人的观念是:JPA+更加灵活高效的sql组织和执行机制,任何单独强调jpa和mybatis都是有失偏颇的。
1、互联网项目很多人认为JPA就足够了(常问jpa够好了为什么有人还在鼓吹mybatis),忽视了面向管理端和数据统计分析时场景的复杂性,有人说jpa有qsl也可以写原生sql,但真的还不够强!
2、ToB的项目很多人认为mybatis灵活便于sql优化,但希望普通的单表操作能跟jpa一样,因此产生了mybatis的各种plus,甚至plus plus!
3、更有甚者:强调jooq模式用对象实现sql,简单查询的对象式并无过错,但复杂的其实就矫枉过正了,sql本身就是一个普世的语言,在客户端调试完再转成java对象模式,修改的时候再转成sql再调试,这种过程本质而言就是自虐,开发懂sql、产品懂sql、测试懂sql,变成对象模式就只有开发自己懂!
总之:我们希望有JPA那种对象式的简单直接,也想要有sql的灵活高效。
1、sqltoy有jpa式的对象操作,且针对jpa的一些不足进行了加强
2、sqltoy的sql 充分考虑了开发、调试、变更、后期维护的全过程,让sql更加接近于客户端调试完的结果
3、sqltoy不是简单地重复jpa和优化mybatis,而是针对性能优化和统计分析提供了独特新颖的解决思路,你会第一次了解到缓存翻译、分页优化、快速分页、并行查询、行列转换等极为有帮助的特性(当然分库分表等人人皆知的功能自然也是支持的)。
sql编写模式上秒杀mybatis
将多表查询变成了单表查询,性能不秒杀mybatis?
1、oracle 11g+
2、db2 9.5+,建议从10.5 开始
3、mysql(mariadb/innosql)支持5.6、5.7、8.0 版本
4、postgresql(greenplum) 支持9.5 以及以上版本
5、sqlserver 2012+
6、sqlite
7、DM达梦数据库
8、elasticsearch 只支持查询,版本支持5.7+版本,建议使用7.3以上版本
9、clickhouse、dorisdb
10、oceanBase
11、guassdb
12、tidb
13、kingbase
14、mongodb (只支持查询)
15、sybase_iq 支持15.4以上版本,建议使用16版本
因为篇幅原因,关于其他的例如分库分表、跨数据库sql自适应、json类型支持等可通过sqltoy的文档深入了解。