sqltoy-orm 4.18.4 发版,并阐述为什么可以秒杀 mybatis(plus)

栏目: 软件资讯 · 发布时间: 3年前

内容简介:开源地址: github: https://github.com/sagframe/sagacity-sqltoy gitee: https://gitee.com/sagacity/sagacity-sqltoy idea 插件(可直接在idea中检索安装): https://github.com/threefish/sqltoy-idea-plugins...

1、增强级联增加OneToOne的支持

2、优化部分代码

3、升级依赖包的版本

4、修复quickvo工具对postgresql int8类型默认匹配,以及lombok chain设置的修复

  • 心中理想的ORM框架应该是什么?

个人的观念是: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的灵活高效。

  • sqltoy-orm 正是为解决上述问题而产生的

1、sqltoy有jpa式的对象操作,且针对jpa的一些不足进行了加强

2、sqltoy的sql 充分考虑了开发、调试、变更、后期维护的全过程,让sql更加接近于客户端调试完的结果

3、sqltoy不是简单地重复jpa和优化mybatis,而是针对性能优化和统计分析提供了独特新颖的解决思路,你会第一次了解到缓存翻译、分页优化、快速分页、并行查询、行列转换等极为有帮助的特性(当然分库分表等人人皆知的功能自然也是支持的)。

  • sqltoy的对象操作介绍,通过框架中的SqlToyLazyDao完成交互
   StaffInfoVO staffInfo = new StaffInfoVO(); 
   //保存
   sqlToyLazyDao.save(staffInfo);
   //删除
   sqlToyLazyDao.delete(new StaffInfoVO("S2007"));

	//update 针对jpa的缺陷进行了改进
   //public Long update(Serializable entity, String... forceUpdateProps);
   // 这里对photo 属性进行强制修改,其他为null自动会跳过
   sqlToyLazyDao.update(staffInfo, "photo");

   //深度修改,不管是否null全部字段修改
   sqlToyLazyDao.updateDeeply(staffInfo);

   List<StaffInfoVO> staffList = new ArrayList<StaffInfoVO>();
   StaffInfoVO staffInfo = new StaffInfoVO();
   StaffInfoVO staffInfo1 = new StaffInfoVO();
   staffList.add(staffInfo);
   staffList.add(staffInfo1);
   //批量保存或修改
   sqlToyLazyDao.saveOrUpdateAll(staffList);
   //批量保存
   sqlToyLazyDao.saveAll(staffList);
   ...............
   sqlToyLazyDao.loadByIds(StaffInfoVO.class,"S2007")
   //唯一性验证
   sqlToyLazyDao.isUnique(staffInfo, "staffCode");
   
   //提供了独特的updateFetch功能,查询、锁定、修改并返回修改后的结果
   // 适用于高并发、高度一致性场景,如:库存台账、财务资金帐实时扣减、叠加等
   public List updateFetch(final QueryExecutor queryExecutor, final UpdateRowHandler updateRowHandler);
  • sqltoy支持代码中对象查询和直接写sql
 // sqltoy中统一的规则是xml中的sqlId 或者直接传具体的sql语句,而不是only xml
 public <T extends Serializable> List<T> findBySql(final String sqlOrNamedSql, final T entity);
//带缓存翻译的代码中动态条件查询,xml中的功能用代码基本都可以实现,xml一般用于复杂查询
public PaginationModel<StaffInfoVO> findStaff(PaginationModel<StaffInfoVO> pageModel, StaffInfoVO staffInfoVO) {
     return sqlToyLazyDao.findEntity(StaffInfoVO.class, pageModel, EntityQuery.create()
	                          .where("#[staffName like :staffName]#[and createTime>=:beginDate]#[and createTime<=:endDate]")
	                          .values(staffInfoVO)
	                           // 将性别代码通过缓存转变成中文名称                    
                        	  .translates(new Translate("dictKeyName").setColumn("sexTypeName")
                                      .setCacheType("SEX_TYPE").setKeyColumn("sexType"))
                            //通过缓存显示员工所在机构的名称
	                          .translates(new Translate("organIdName").setColumn("organName")
                                      .setKeyColumn("organId")));
}

//演示代码中非直接sql模式设置条件模式进行记录修改
public Long updateByQuery() {
     return sqlToyLazyDao.updateByQuery(StaffInfoVO.class,
		EntityUpdate.create().set("createBy", "S0001")
                     .where("staffName like ?").values("张"));
}

//代码中非直接sql模式设置条件模式进行记录删除
sqlToyLazyDao.deleteByQuery(StaffInfoVO.class, EntityQuery.create()
                            .where("status=?").values(0));
  • 通过上面的介绍说明sqltoy在常规的crud领域是跟jpa、mybatis(plus)对等的,一些细节因篇幅不做详细介绍,而不是only sql、only xml!因为下面的篇幅更多会以xml和sql形式表达,上面不铺垫一下容易误解sqltoy就必须是sql必须是xml。
  • sqltoy在sql编写方式上跟客户端(dbeaver) 上极为一致,让sql极为简洁、直观、便于后期维护
sqltoy-orm 4.18.4 发版,并阐述为什么可以秒杀 mybatis(plus)

sql编写模式上秒杀mybatis

  • sqltoy的缓存翻译极大的提升性能同时简化sql,性能还需要对比吗?
sqltoy-orm 4.18.4 发版,并阐述为什么可以秒杀 mybatis(plus)

将多表查询变成了单表查询,性能不秒杀mybatis?

  • sqltoy拥有极致的分页优化
  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-orm 4.18.4 发版,并阐述为什么可以秒杀 mybatis(plus)

 

  • 并行查询:同时执行多个查询,提升性能
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.4 发版,并阐述为什么可以秒杀 mybatis(plus)

 

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

 

  • 同比环比
sqltoy-orm 4.18.4 发版,并阐述为什么可以秒杀 mybatis(plus)

 

  • sqltoy支持哪些数据库?

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

10、oceanBase

11、guassdb

12、tidb

13、kingbase

14、mongodb (只支持查询)

15、sybase_iq 支持15.4以上版本,建议使用16版本

  • sqltoy 还有什么特点?

因为篇幅原因,这里只介绍这么多,至于sqltoy还有什么特点,不要用only思维(介绍A就哦只能A,介绍B,哦只能B),希望用开放式思维去看待,sqltoy拥有极致的动态sql、奇特的缓存翻译、巧妙的分页优化等等,你想其他的常规功能能差吗?


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro CSS and HTML Design Patterns

Pro CSS and HTML Design Patterns

Michael Bowers / Apress / April 23, 2007 / $44.99

Design patterns have been used with great success in software programming. They improve productivity, creativity, and efficiency in web design and development, and they reduce code bloat and complexit......一起来看看 《Pro CSS and HTML Design Patterns》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具