MyBatis-Plus使用updateSelective 自动生成sql ,给一些字段加了@TableField(exist = false) ,然而这些字段并没有被忽略依然在自动生成的sql里面有
时间: 2024-05-16 09:16:23 浏览: 101
使用mybatis-plus-generator进行代码自动生成的方法
`@TableField(exist = false)` 注解的作用是告诉 MyBatis-Plus 在生成 SQL 时忽略该字段,但是在实际开发中,我们需要注意以下几点:
1. `@TableField(exist = false)` 注解只在查询时有效,对于更新或插入操作不会生效。
2. 如果你使用的是 MyBatis-Plus 的 `updateById` 方法,那么即使你在实体类中使用了 `@TableField(exist = false)` 注解,该字段也会被更新到数据库中。
3. 如果你使用的是 MyBatis-Plus 的 `update` 方法,那么可以通过设置 `updateWrapper.set()` 方法来指定需要更新的字段,这样就可以排除掉被 `@TableField(exist = false)` 注解标记的字段了。
例如,假设你的实体类中有一个字段 `description`,你希望在更新数据时忽略该字段,可以这样写:
```java
public class User {
private Long id;
private String name;
@TableField(exist = false)
private String description;
// 省略 getter/setter 方法
}
```
然后在更新数据时,可以这样排除掉 `description` 字段:
```java
User user = new User();
user.setId(1L);
user.setName("Tom");
user.setDescription("这是一段描述");
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", user.getId())
.set("name", user.getName()); // 只更新 name 字段,忽略 description 字段
userService.update(updateWrapper);
```
阅读全文