Smart Retry 1.3.7 发布,声明式的异步持久化重试框架
Smart Retry 主要是用来进行方法重试的。和 Guava Retry、Spring Retry 相比,Smart Retry 最大的特点是异步重试,支持持久化,系统重启之后可以继续重试。 如果你是做后台微服务的,一定会有用到的场景,千万不要错过。 本次更新 1:优化了内部生成 Aop 代理的逻辑 最新的 jar 已经 deploy 到 maven 的中央仓库了 Smart Retry 1.3.7,欢迎使用
sqlHelper是基于 spring-data-jdbc 的 orm,支持 sqlite、mysql、postgresql 三种数据库,主要特点是像 mongodb 一样使用 sql 数据库。
sqlHelper 为 mongoHelper 的兄弟项目,旨在为关系型数据库提供近似 mongodb 的使用体验。即开发过程中完全不用关心数据库结构,在任意一个空白或是有结构的数据库中,在项目启动的瞬间都可以立刻构建出与 pojo 类对应的数据库结构,可以立即开始进行业务开发。除了查询 sql 语句的执行效果,已经完全不必打开数据库客户端对数据库结构进行管理了。
本项目只适用于 springBoot 项目,项目也依赖 springBoot 相关库,springMVC 项目无法使用。另外项目依赖了 hutool 提供的诸多 Util 工具,让代码更简洁。
演示应用项目:https://gitee.com/cym1102/nginxWebUI 此项目是nginx的WebUI项目,数据库使用 sqlite,因此服务器上不需要安装任何数据库。
1. 基本操作
本orm会在容器中注入一个对象SqlHelper,这个对象拥有诸多单表查询功能,如下
这个SqlHelper能够完成所有查询任务,插入和更新操作能够自动判断pojo的类型操作对应表,查询操作根据传入的Class进行对应表操作,本orm所有数据库操作都基于SqlHelper的功能,不用像mybatis一样,每个表都要建立一套Mapper,xml,Service,model,大大减少数据层的代码量。可以将SqlHelper直接注入到controller层,简单的操作直接调用SqlHelper进行操作,不需要调用service层。
而复杂的操作及事务处理需要service层,将SqlHelper注入service,并使用service层的@Transactional注解就能使用springBoot管理的事务功能。
2. 复杂查询功能
本orm的查询功能都在SqlHelper的findByQuery,findPage方法中.使用CriteriaAndWrapper和CriteriaOrWrapper对象作为sql的拼接对象
// 根据输入条件进行查询 public List<User> search(String word, Integer type) { CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper(); if (StrUtil.isNotEmpty(word)) { criteriaAndWrapper.and(new CriteriaOrWrapper().like("name", word).like("phone", word)); } if (type != null) { criteriaAndWrapper.eq("type", type); } List<User> userList = SqlHelper.findListByQuery(criteriaAndWrapper, User.class); return userList ; }
以上代码组装了类似于select * from user where (name like '%xxx%' or phone like '%xxx%') and type = xxx的查询语句。
本项目不支持使用left join rigth join等连接查询,关系型数据库的连表查询能解决很多问题,但在大公司中已不再推荐使用,因为很难做数据库优化,数据量庞大时查询时间很慢而且很难进行优化。需要连表查询时,先查出对方id集,再使用in进行包含查询,可以很方便的走索引,而且分库的时候很容易修改。这样使用的话,实际是将关系型数据库用成了近似文档型数据库,表之间不再产生关联。
基于以上理念,本orm还提供了一些小功能用于完善这种多次连接查询,在mongoHelper中有以下方法
用法示例:
// 查出订单下的所有商品(OrderProduct.class为订单商品对照表) public List<Product> getProductList(String orderId) { List<String> productIds = mongoHelper.findPropertiesByQuery(new CriteriaAndWrapper().eq("orderId", orderId), OrderProduct.class, "productId", String.class); return mongoHelper.findListByQuery(new CriteriaAndWrapper().in("id", productIds), Product.class); } // 根据产品名查出所有订单 public Page search(Page page, String keywords) { CriteriaOrWrapper criteriaOrWrapper = new CriteriaOrWrapper(); if (StrUtil.isNotEmpty(keywords)) { List<String> productIds = mongoHelper.findIdsByQuery(new CriteriaAndWrapper().like("name", keywords), Product.class); List<String> orderIds = mongoHelper.findPropertiesByQuery(new CriteriaAndWrapper().in("productId", productIds), OrderProduct.class, "orderId", String.class); criteriaOrWrapper.in("id", orderIds); } page = mongoHelper.findPage(criteriaOrWrapper, page, Order.class); return page; }
3. 分页查询,
本orm提供一个Page类,包含count总记录数,limit每页记录数,curr起始页(从1开始),records结果列表四个属性,只要将包含curr和limit数据的Page对象传入findPage,即可查询出records,count的数据并自动返回到Page对象中。这里三个属性参考了layui的分页参数,可直接无缝对接layui的分页控件。
public Page search(Page page, String word, Integer type) { CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper(); if (StrUtil.isNotEmpty(word)) { criteriaAndWrapper.and(new CriteriaOrWrapper().like("name", word).like("phone", word)); } if (type != null) { criteriaAndWrapper.eq("type", type); } Sort sort = Sort.by(Direction.DESC, "creatTime"); page = SqlHelper.findPage(criteriaAndWrapper, sort, page, User.class); return page; }
微信关注我们
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。
Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。