当前使用版本(必填,否则不予处理)

3.5.2

业务场景

同一数据库实体,有时候要update所有字段,有时候要update非空字段。

该问题是如何引起的?(确定最新版也有问题再提!!!)

目前MBP提供全局配置来设置默认的updateStrategy,也可以在实体中通过@TableField注解来设置。最终BaseMapper中的updateById方法将根据这些配置上生成一个update语句。

我之前使用过MyBatis官方的代码生成器,可以生成2种update语句,使用起来更灵活。 期望在BaseMapper中额外提供2个方法: updateAllFieldsById(T entity); //总是update全部字段 updateSelectiveById(T entity); //总是update非null非空白字符串字段 这样开发者可以自行调用要使用的update策略,比较灵活,也不必再配置updateStrategy。

insert方法同理。

重现步骤(如果有就写完整)

报错信息

Comment From: qmdx

默认 updateSelective 就是部分更新, updateAll 是一种很危险的行为存在覆盖有效数据的问题(确实有些场景需要完整覆盖有些空值问题,但是安全隐患也是并存的),目前提供 UpdateWrapper.set 字段自行强制覆盖。

Comment From: sephiroka

UpdateWrapper.set 遇到多个字段,还得一个一个判断, @qmdx

Comment From: rocky-peng

支持这个建议,提供insertSelective updateSelective

Comment From: RevisitMoon

MyBatis-Plus 【优化建议】希望BaseMapper提供insertSelective, updateSelective方法 MyBatis-Plus 【优化建议】希望BaseMapper提供insertSelective, updateSelective方法 提供的这个新功能是否等于没有?当我做完一堆的判断.已经处理好这个持久化对象之后.我还要根据要求是否选择性更新来重新设置一次值....那我还不如生成一个xml的sql... 我认为mybatis-plus的使用者的"业务安全隐患"这个问题并不应该是mybatis-plus官方考虑吧.