sagacity-sqltoy 睿智 ORM 5.1.2、4.18.41 发版,真正睿智的 ORM!

开源地址:

更新内容

1、修复updateSaveFetch锁查询、修改(不存在则插入)、并返回修改后结果功能在复合主键场景下的bug
2、修复sqlite数据库identity主键策略insert的缺陷
3、优化saveOrUpdate,增加当主键值为null时直接走save操作

  • updateSaveFetch特点:
/**
 * @TODO 适用于库存台账、客户资金账等高并发强事务场景,一次数据库交互实现:
 *       <p>
 *       <li>1、锁查询;</li>
 *       <li>2、记录存在则修改;</li>
 *       <li>3、记录不存在则执行insert;</li>
 *       <li>4、返回修改或插入的记录信息</li>
 *       </p>
 * @param <T>
 * @param entity           尽量不要使用identity、sequence主键
 * @param updateRowHandler
 * @param uniqueProps      唯一性字段,用于做唯一性检索,不设置则按照主键进行查询
 * @return
 */
public <T extends Serializable> T updateSaveFetch(final T entity, final UpdateRowHandler 
         updateRowHandler,final String... uniqueProps);

//使用方法范例
public TransLedgerVO updateSaveTrans(TransLedgerVO transVO) {
      return sqlToyLazyDao.updateSaveFetch(transVO, new UpdateRowHandler() {
          @Override
         public void updateRow(ResultSet rs, int index) throws Exception {
            // 一般updateFetch会依托表中的现有值做一些逻辑处理,否则可以直接update
            rs.updateInt("QUANTITY", rs.getInt("QUANTITY") + transVO.getQuantity());
            rs.updateBigDecimal("AMT", rs.getBigDecimal("AMT").add(transVO.getAmt()));
         }
     }, "orderId");
}
  • sqltoy的关键优势:
//------------------了解 sqltoy的关键优势: -------------------------------------------------------------------------------------------*/
//1、最简最直观的sql编写方式(不仅仅是查询语句),采用条件参数前置处理规整法,让sql语句部分跟客户端保持高度一致
//2、sql中支持注释(规避了对hint特性的影响,知道hint吗?搜oracle hint),和动态更新加载,便于开发和后期维护整个过程的管理
//3、支持缓存翻译和反向缓存条件检索(通过缓存将名称匹配成精确的key),实现sql简化和性能大幅提升
//4、支持快速分页和分页优化功能,实现分页最高级别的优化,同时还考虑到了cte多个with as情况下的优化支持
//5、支持并行查询
//6、根本杜绝sql注入问题
//7、支持行列转换、分组汇总求平均、同比环比计算,在于用算法解决复杂sql,同时也解决了sql跨数据库问题
//8、支持保留字自动适配
//9、支持跨数据库函数自适配,从而非常有利于一套代码适应多种数据库便于产品化,比如oracle的nvl,当sql在mysql环境执行时自动替换为ifnull
//10、支持分库分表
//11、提供了取top、取random记录、树形表结构构造和递归查询支持、updateFetch单次交互完成修改和查询等实用的功能
//12、sqltoy的update、save、saveAll、load 等crud操作规避了jpa的缺陷,参见update(entity,String...forceUpdateProps)和updateFetch
//13、提供了极为人性化的条件处理:排它性条件、日期条件加减和提取月末月初处理等
//14、提供了查询结果日期、数字格式化、安全脱敏处理,让复杂的事情变得简单,大幅简化sql或结果的二次处理工作
//-----------------------------------------------------------------------------------*/

sqltoy特点介绍:

  • JPA式的crud是基本共识,但sqltoy改进了update,增加了updateFetch

  • sqltoy的update、updateAll,弹性设置强制修改属性,一次性数据库交互,解决并发问题
/**
 * @todo 修改数据并返回数据库记录变更数量(非强制修改属性,当属性值为null不参与修改)
 * @param entity
 * @param forceUpdateProps 强制修改的字段属性
 * @return Long 数据库记录变更量(插入数据量)
 */
public Long update(Serializable entity, String... forceUpdateProps);
	
/**
 * @TODO 批量修改操作,并可以指定强制修改的属性(非强制修改属性,当属性值为null不参与修改)
 * @param <T>
 * @param entities
 * @param forceUpdateProps
 * @return Long 数据库记录变更量(插入数据量)
 */
public <T extends Serializable> Long updateAll(List<T> entities, String... forceUpdateProps);
	
//保存或修改数据并返回数据库记录变更数量
public Long saveOrUpdate(Serializable entity, String... forceUpdateProps);
  • updateFetch: 一次交互完成锁查询、修改,并返回修改后的结果,尤其适用于库存台账、资金台账场景
// sqltoy的updateFetch是jpa没有的,可以深入了解其原理,一次交互完成查询、锁定、修改并返回修改后结果
/**
 * @todo 获取并锁定数据并进行修改(只支持针对单表查询,查询语句要简单)
 * @param queryExecutor
 * @param updateRowHandler
 * @return
 */
public List updateFetch(final QueryExecutor queryExecutor, final UpdateRowHandler updateRowHandler);
  • sqltoy最佳sql编写模式,便于开发和后期维护

  • 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",同时查询总记录数和单页数据,大幅提升性能
阐述sqltoy为什么秒杀mybatis(plus)
 
  • 便利的跨数据库统计计算:数据旋转
阐述sqltoy为什么秒杀mybatis(plus)
  • 便利的跨数据库统计计算:无限极分组统计(含汇总求平均)
阐述sqltoy为什么秒杀mybatis(plus)
  • 便利的跨数据库统计计算:同比环比
阐述sqltoy为什么秒杀mybatis(plus)
优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/159231/sagacity-sqltoy-5-1-2-released

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。