MyBatis-Plus中update的用法
·
mybatis-plus中,
capitalInfoMapper.update(null, updateWrapper);
与
capitalInfoMapper.update( updateWrapper);
有什么区别?
在MyBatis-Plus中,这两种写法没有区别,最终效果是相同的。
让我详细解释一下:
核心区别
java
// 写法1:显式传入null作为实体参数 capitalInfoMapper.update(null, updateWrapper); // 写法2:只传入updateWrapper capitalInfoMapper.update(updateWrapper);
实际上,第二种写法 capitalInfoMapper.update(updateWrapper) 在编译时会自动转换为第一种写法。这是因为:
-
语法糖机制:MyBatis-Plus通过方法重载和默认参数实现了这个语法糖
-
内部实现:当你只传入一个参数时,框架会自动填充第一个实体参数为
null
实际应用示例
java
UpdateWrapper<CapitalInfo> updateWrapper = new UpdateWrapper<>();
updateWrapper
.set("balance", balance + 100)
.set("update_time", new Date())
.eq("id", 1)
.eq("status", "ACTIVE");
// 两种写法完全等价
capitalInfoMapper.update(null, updateWrapper);
// 等同于
capitalInfoMapper.update(updateWrapper);
什么时候需要传入实体对象?
java
// 如果需要同时使用实体对象和条件构造器
CapitalInfo entity = new CapitalInfo();
entity.setBalance(1000);
entity.setUpdateTime(new Date());
UpdateWrapper<CapitalInfo> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("user_id", 123);
// 实体对象中的字段会作为SET部分,条件构造器作为WHERE部分
capitalInfoMapper.update(entity, updateWrapper);
注意事项
-
推荐写法:使用
capitalInfoMapper.update(updateWrapper)更简洁 -
版本兼容:两种写法在所有MyBatis-Plus版本中都支持
-
代码可读性:第二种写法更符合直觉,明确表示只通过条件构造器更新
SQL生成对比
两种写法都会生成相同的SQL:
sql
UPDATE capital_info SET balance = ?, update_time = ? WHERE id = ? AND status = ?
总结:两者完全等价,选择哪种取决于个人编码习惯。建议使用更简洁的 update(updateWrapper) 写法。
更多推荐



所有评论(0)