sqltoy-orm 4.13.12 发版,ORM 框架
开源地址:
- github: https://github.com/chenrenfei/sagacity-sqltoy
- gitee: https://gitee.com/sagacity/sagacity-sqltoy
- idea 插件(可直接在idea中检索安装): https://github.com/threefish/sqltoy-idea-plugins
更新内容
1、大幅改进EntityQuery和QueryExecutor,为其增加缓存翻译、filters、分页优化、日期数字格式化、安全脱敏等,为中等规模sql代码中编写提供了便利。
@Test
public void findEntityByVO() {
List<StaffInfoVO> staffVOs = sqlToyLazyDao.findEntity(StaffInfoVO.class,
EntityQuery.create().where("#[staffId=:staffId]#[and staffName like :staffName] #[ and status=:status]")
.values(new StaffInfoVO().setStatus(-1).setStaffName("陈").setStaffId("S0005"))
.filters(new ParamsFilter("status").eq(-1)).filters(new ParamsFilter("staffName").rlike())
.filters(new ParamsFilter("staffId").primary()).secureMask(MaskType.ADDRESS, "address")
.secureMask(MaskType.TEL, "telNo"));
System.err.println(JSON.toJSONString(staffVOs));
}
2、改进isUnique的实现策略,减少一次count查询提升了效率!
3、修复update级联操作时,在mysql、postgresql、sqlite等场景下改用2次交互模式解决上述数据库自身bug导致的问题(非空字段问题)!
参见sqltoy4.2.6 版本反馈的bug
mysql的on duplicate key update 当某个字段在数据库中设置为not null,发生SQL 错误 [1048] [23000]: Column 'NAME' cannot be null
快速了解 sqltoy-orm:
- sqltoy是全新一代的ORM框架,兼顾jpa对象式操作的优势,同时极大增强了查询功能,辅以科学的sql编写模式、巧妙的缓存翻译集成、极致的分页优化以及针对大规模数据下的分库分表、超复杂场景下的mongodb、elastic、clickhouse组合应用!
- sqltoy给你带来了多种主键策略,除常规的UUID、sequence、identity外,还包含雪花算法和基于redis产生有规则的业务主键等。
- sqltoy还提供了针对统计分析的:数据旋转、无限级分组计算、同比环比等来减少开发者写复杂sql。
- sqltoy在很多方面提供了极为实用的方法,如:树形表处理、isUnique、findTop、getRandomResult、updateFetch等等
- sqltoy不走jooq全对象式、mybatis全sql式这种不是天就是地从来没有考虑过后期需求变更和运维苦逼的极端路子,紧贴项目实战发展起来的框架,让各自技术以合理的方式应用于合理的地方!
简要举例介绍(详情请参见sqltoy下面的sqltoy-quickstart演示项目):
- JPA式的CRUD,但规避了其不足,提供了默认的SqlToyCRUDService(简单的则无需写service方法) 和 SqlToyLazyDao(开发无需自己写Dao,只需要写Service业务逻辑),可以了解类似于update、updateAll、saveOrUpdate等内在逻辑,减少了数据库交互,考虑了高并发和业务对象变更的特征!
@Autowired
private SqlToyCRUDService sqlToyCRUDService;
//基于对象保存
sqlToyCRUDService.save(staffInfo);
//基于对象更新(字段值为null的不会参与变更)
sqlToyCRUDService.update(staffInfo);
//深度变更,全部字段都参与变更
sqlToyCRUDService.updateDeeply(staffInfo);
//基于对象更新(制定强制修改的字段)
sqlToyCRUDService.update(staffInfo,"staffName","onDuty");
//基于对象更新
sqlToyCRUDService.saveOrUpdate(staffInfo);
//加载对象
sqlToyCRUDService.load(new StaffInfoVO("S190715009"));
//加锁获取对象
sqlToyCRUDService.load(new StaffInfoVO("S190715009"),LockMode.UPGRADE);
//判断对象是否唯一
sqlToyCRUDService.isUnique(staffInfo, "staffCode");
//delete\deleteAll\updateAll\loadAll 等等不一一写完
- sqltoy提供了最简洁的动态sql编写
- 我们对比一下mybatis的实现! 不要顾首不顾腚式看问题: 产品改需求增加条件增加显示列,后期人员变动!
- 从需求调整和后期维护的角度,你自己分析mybatis这种做调整是不是很麻烦(先放入客户端调试、调试完再整理成mybatis的格式)
- 缓存翻译,利用缓存减少关联查询,简化sql同时大幅提升效率
- 极致分页优化
- 旋转数据并进行环比计算

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
如何有效防止SQL注入攻击
SQL注入攻击是黑客对数据库进行攻击常用的手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想获取的数据,这就是所谓的SQL Injection,即SQL注入。 一 背景 假如某高校开发了一个网课系统,要求学生选课后完成学习,数据库中有一张表course,这张表存放着每个学生的选课信息及完成情况,具体设计如下: 数据如下: 本系统采用mysql做为数据库,使用Jdbc来进行数据库的相关操作。系统提供了一个功能查询该学生的课程完成情况,代码如下。 @RestControllerpublicclassController{@AutowiredSqlInjectsqlInject;@GetMapping("list")publicList<Course>courseList(@RequestParam("studentId")StringstudentId...
-
下一篇
优麒麟 20.04.1 发布,多达 418 处更新!
优麒麟(Ubuntu Kylin)是由麒麟软件有限公司主导开发的全球开源项目,作为 Ubuntu 的官方衍生版本,专注于研发“友好易用,简单轻松”的桌面环境,致力为全球用户带来更智能的用户体验,成为 Linux 桌面操作系统新领航! 自优麒麟 20.04 LTS 发布后,官方汇总了论坛、微信、官网等平台收到的反馈建议,并针对存在的问题进行及时修复,此前共发布 4 次系统更新,今日发布的 20.04.1 版本为第 1 个更新镜像,包括 x86 版本和树莓派版本。优麒麟 20.04.1 集成了此前 4 次系统更新的共计 269 处修改,进行了全面的安全升级、bug 修复和稳定性提升,包括优化 4K 支持,3D 显示性能提升 46%,修复 USN-4432-1(GRUB 2漏洞),以及应用商店持续上新等。使用 20.04 版本遇到异常的用户,欢迎通过下载安装或更新至本次发布的 20.04.1 版本,获取更佳使用体验。 功能改进与BUG修复: 开始菜单 新增自适应透明度变化; 新增国际化翻译文件安装至本地; 修复软件列表部分软件图标缺失问题; 修复开始菜单响应win快捷键问题; 文件管理器 新...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8编译安装MySQL8.0.19
- MySQL数据库在高并发下的优化方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果