AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
## 6.2.6 save单个对象保存 ![](https://img.kancloud.cn/ec/97/ec97226d535bd90baabeb5c383d8ad71_997x430.png) 例如: ![](https://img.kancloud.cn/7e/59/7e591fd20080f5f699b35979b5f42c35_603x194.png) ## 6.2.7 saveAll批量对象保存 * 接口提供如下三个。 ![](https://img.kancloud.cn/00/fb/00fb4e7ea2008442aca4f4a6b5f4bda5_1111x656.png) * 应用范例:ReflectPropertyHandler 是一个针对saveAll的集合数据的反调,通过反调给集合属性赋值。 ![](https://img.kancloud.cn/0c/45/0c45df4ea4579f40544d0e5e3287f688_925x449.png) ## 6.2.8 saveAllNotExist保存并忽视已经存在的数据 ![](https://img.kancloud.cn/ba/28/ba28349f88c8e3bbbb963968d2eaf048_1038x667.png) 链式操作:save().saveMode(IGNORE).many(staffInfos); ## 6.2.9 update单对象修改操作 ![](https://img.kancloud.cn/db/d7/dbd719fa41c7f1562c2186109d9deea9_1124x659.png) * 使用说明 update操作默认不会对属性值为null对应的字段值修改,场景:一个审核流程,不同的角色只维护特定的字段值,如果全部字段进行update就必然需要先加载对象值然后再update,在高并发环境下,可能会将其他用户刚维护的数据覆盖成之前的数据。如果要对某个字段进行强制修改,通过forceUpdateProps数组提供(对应VO对象的属性名称,无关大小写)。 注:update操作相对于hibernate先load后update节约了一次查询,效率提升1倍多。 ## 6.2.10 updateDeeply深度和updateCascade级联对象修改 ![](https://img.kancloud.cn/0b/a9/0ba9b5bbf7716972dba89e3706a550ff_1054x740.png) * 使用说明: updateCascade操作一般针对主子表形式,在主对象中包含子表集合的数据,当进行修改操作时,会同时修改主表和子表。forceCascadeClasses一般当子集合数据为空时会执行子集合对应的表的清空和修改操作。 请参看quickvo.xml有关cascade的配置,delete表示对主表关联的子表的存量数据直接删除,也可以写成一个sql片段,如enabled=0 表示对修改关联的子表存量数据置为无效(请跟进实际表字段书写) ![](https://img.kancloud.cn/60/81/6081bd5e48d15304faad758952601c25_872x173.png) **源码解读,参见**: org.sagacity.sqltoy.dialect.utils.DialectUtils类,方法: ![](https://img.kancloud.cn/37/63/37632256bef0848ac46cfb419baab1e3_1174x85.png) 片段: ![](https://img.kancloud.cn/51/81/518151a4edbbf73dee115aa9d5f20a3e_1019x679.png) ## 6.2.11 updateAll批量修改操作 ![](https://img.kancloud.cn/d2/16/d2161ebee7cca5432e6601cb7737322a_1112x778.png) 注:批量更新不涉及级联更新,只针对当前VO对象的表进行修改。 ## 6.2.12 updateAllDeeply批量深度修改 ![](https://img.kancloud.cn/1e/d2/1ed2e7357d0859219e90c8973432ce0b_1120x532.png) 注:参数ReflectPropertyHandler一般设置为null,仅仅在极为特殊情况下使用。 ## 6.2.13 updateByQuery基于单表查询完成数据修改 * 方法定义,在SqlToyLazyDao中提供 ![](https://img.kancloud.cn/65/e1/65e134b96cd7c42b97918689ff0ad298_845x179.png) * 使用范例 ![](https://img.kancloud.cn/08/0e/080ea69569e0b8c92aaec6f80d2fedc8_1255x747.png) ## 6.2.14 saveOrUpdate保存或修改操作 ![](https://img.kancloud.cn/f8/11/f811a3c7dc11ccf9cc45be5c2ca25a2b_1186x516.png) * 使用说明:sqltoy的saveOrUpdate底层充分利用数据库的特性只做一次性数据库交互完成操作,如oracle、sqlserver、db2等数据库使用merge into 语法,而mysql则使用 insert into xxxx ON DUPLICATE KEY UPDATE postgresql9.4和9.5+版本类似功能存在很大差异,sqltoy在底层分别进行了实现,建议使用postgresql9.6+版本。 ## 6.2.15 saveOrUpdateAll批量保存和修改操作 ![](https://img.kancloud.cn/b1/8a/b18a251a1c5154afe5ed060d53fbf2ab_1103x555.png) ## 6.2.18 updateFetch修改并将修改的记录返回 * 场景用于:需要对数据进行一些逻辑判断再做相应的动作,一次性数据库交互完成多个步骤: 1、 查询记录并增加锁 2、 通过反调对数据进行逻辑处理 3、 最终返回处理后的结果 * 优点:不同于其他框架要2次数据库交互,1、先锁记录查询,获取结果后对记录进行处理,2、调用更新操作 ![](https://img.kancloud.cn/03/a2/03a29c70879be7a331cd0e6b7245347e_1097x247.png) 注意注意: 1、 **updateFetch 是针对查询语句,且查询语句中必须要明确字段,不能写成select \* from,** updateFetch是拿来更改的意思! 2、 **updateFetch 的查询语句无需自己写for update这类语句,框架会自动补充** 用法: ![](https://img.kancloud.cn/ce/0c/ce0cc9ee2a306be648173519915a7dbf_786x259.png) 注:updateFetch目的是用于记录同步操作,先获取到数据然后完成修改操作,避免其他资源形成竞争。一般用于多用户高并发情况下随机抢占。 ![](https://img.kancloud.cn/ff/2d/ff2d849ae17bee058ec03417b068936d_1484x859.png) ## 6.2.19updateSaveFetch 锁查询修改(不存在则保存)并返回修改后结果 主要用于高并发强事务场景,比如库存台账的实时扣减、客户资金账余额的实时扣减 ![](https://img.kancloud.cn/60/b1/60b1aac8e11f37ada06c9363e14c0ac8_2568x860.png) ![](https://img.kancloud.cn/29/2f/292feb3c763d1d67d798c1533a4727cf_1711x462.png) ## 6.2.23 batchUpdate批量更新操作 ![](https://img.kancloud.cn/a3/da/a3da8ec6c1687a93e29538280ea20d00_1237x676.png)提供传统sql批量执行机制(一般都可以通过saveOrUpdateAll等POJO实现) **调用范例** * 对象传参模式 ![](https://img.kancloud.cn/4f/ee/4fee531c3c1525f97105ba223395e997_1246x239.png) * **数组传参模式** ![](https://img.kancloud.cn/36/1e/361ea5d90ae4195b7f559b3161228e03_1012x265.png)