开源地址:
- github: https://github.com/chenrenfei/sagacity-sqltoy
- gitee: https://gitee.com/sagacity/sagacity-sqltoy
更新内容
1、完善了es不同sql插件的支持
2、优化vo中含map时传参,兼容key大小写
3、优化后台日志提示
如何看待sqltoy-orm,记录一次面试模拟
1、sqltoy经历2020年极速发展和较多用户的使用参与,已经得到了极大的完善,
常规数据库发现问题也不是一件容易的事情,已经不会成为大家选择的阻力。
2、使用sqltoy最大的问题在于受众较小,没有mybatis主流,大家担心影响自身未来的择业
这里我给大家演绎一次:
面试官:
你能介绍一下mybatis(plus)的基本特性、分页处理、为什么调用接口就可以实现具体功能?
以及为什么不实用jpa而选择mybatis吗?
面试者:
不好意思,mybatis以前用过,大体原理知道一些但已经忘记不少,未必能答的准确。目前我们用sqltoy-orm,
是一个国人写的开源框架,要比mybatis好用些。
面试官:
哦,没有听说过sqltoy,那你说说sqltoy优点是什么?(面试官提高调门进行深挖反问,目带质疑mybatis都不会还来面试)
面试者:
好的,sqltoy的优势是结合了jpa的对象操作简洁性和sql查询的灵活性
- 在对象操作层面:
除了jpa的增删改、load功能外,针对应用场景强化了update和saveOrUpdate、补充了updateFetch功能,update可以灵活控制属性是否强制更新,
saveOrUpdate则结合数据库自身特性比如oracle、sqlserver用merge into等。
updateFetch则针对强事务性场景提供一次交互完成查询、锁记录、修改、并返回修改后的结果。
因此sqltoy的对象操作并不弱于jpa,且有自身特点,切合项目实践。
- 在查询层面优势非常明显,随着业务的发展,增删改不再是痛点,查询会成为阻碍项目的关键
1、sqltoy起源在于sql语句的编写,强调sql的直观性、可维护性,比如可以在dbeaver上调试完稍微做点调整就可以放入代码中,
如果业务变化也非常方便从代码中copy到dbeaver进行调试,这个就是mybatis和jooq这些框架无法做到的。
2、sqltoy极为重视性能:
提供了缓存翻译极大的减少表关联查询,让sql变得简洁的同时几何级的提升了查询性能。
sqltoy在分页优化层面是最高级别的,这里问一下您,常规的分页优化有几种策略?
面试官:
优化count语句,剔除order by等,或者自行定义count语句
面试者:
嗯,这是一个方面,还有呢?
面试官:
还有?优化索引,用es
面试者:
说的没错,但优化索引和引入其他技术是一些基本解决方式,而sqltoy则针对这些措施用尽后提供另类的解决策略
1、常规的count语句优化,减少select中间的不必要的函数和order by对性能的干扰。
2、sqltoy提供快速分页,多表关联时,对决定数据范围的条件查询先分页,取出单页数据再关联,实现性能的大幅提升。
3、sqltoy提供分页优化,利用缓存在一定周期范围内相同条件避免执行count查询,让分页2次查询变成1次查询。
4、sqltoy提供了并行查询机制,可以同时执行count和取记录查询,让原本顺序执行耗时10秒(各5秒),变成6秒。
您说sqltoy的分页是不是比mybatis更加可取?
面试官:
是的,这个策略确实比较新奇,刚才你说的缓存翻译你再说说为什么能简化sql并大幅提升性?(面试官不再高傲了)
面试者:
好的,我们假设查询订单表,我们需要展示客户名称、商品名称、业务员姓名、业务员所在部门、订单状态这些信息,
往常用mybatis我们需要关联客户表、商品表、员工表、机构表、数据字典表(状态),一个sql查询关联了5、6张表,sql极为庞大,查询性能也极低。
而sqltoy则将客户表、商品、员工、机构、数据字典放入缓存中,订单查询只需要查询订单表,然后通过编码跟缓存对应取得名称
您说缓存是内存,单表查询再通过内存取得名称这种不比5、6张表查询快?sql不更加清爽简洁?
面试官:
嗯,是的,有道理,看来sqltoy确实还不错(心里想值得研究研究,就算不用也不能被用sqltoy的人搞得不知所措)
但sqltoy不知名呀,可能就是这些优势,这种选择存在较大风险
面试者:
sqltoy真正用起来你就会发现,其实不只是这些优势,还有非常多的特点:
1、支持常规的数据库的同时支持mongo、es、clickhouse,这些都是针对不同场景进行针对性的延伸,便于在超大数据场景下提供支撑
2、sqltoy支持分库分表
3、sqltoy对统计分析非常友好,提供了数据旋转、同比环比、分组计算等靠写sql极为复杂的简化策略。
4、sqltoy最跨数据库,提供了函数适配,比如instr,不同数据库语法不一样,sqltoy则可以自行替换,让一个sql适用于多种数据库环境,有利于项目的产品化
关于不知名和风险确实是一个问题,但sqltoy确实有助于项目解决问题,任何事物都有发展的过程,sqltoy重点在于其设计思路和方向是正确的
创新就需要有承担风险的勇气,在中美竞争的大环境下,逐步支持国产不断侵蚀美国的软实力,试想从orm再逐步延伸到数据库,
如果国产产品也跟美国产品一样深入人心,延伸到更多领域,不也算是一份贡献吗?没有开始如何能发展壮大!
在旁听的公司高级领导
不错,有见地,有创新意识、有情怀,我们欢迎您加入我们公司,你什么时候可以入职?