mybatis plus无法更新null插入
时间: 2024-08-26 08:02:39 浏览: 69
MyBatis Plus 是基于 MyBatis 的一个简化工具包,它提供了一些便捷的操作方法和自动化的增删改查功能。当你尝试使用 MyBatis Plus 更新数据时,如果某个字段值本来就是 null,但在更新操作中没有显式设置这个字段,可能会遇到 "null" 插入的问题,因为默认情况下,MyBatis 不允许将 null 值插入到非空列。
解决这个问题有几种方式:
1. **显式设置**:在调用 `ModelMapper` 或者自定义的 Mapper 中,当更新字段为 null 时,将其设置为 `null`,例如 `model.setSomeField(null)`。
2. **配置属性**:如果你不想在每个地方都手动处理,可以在全局配置中开启对空值的处理,如启用 `GlobalConfig.sqlSession.onUpdate().doNotAllowNull()`,但这可能导致不符合数据库规范的行为。
3. **数据库级策略**:直接在数据库层面设置某些列的默认值为 NULL 或者允许 NULL 插入,这取决于你的具体需求和数据库设计。
4. **忽略更新**:对于不需要更新的 null 字段,可以选择跳过这次更新,比如在 `ModelMapper` 中使用条件判断 `if (someField != null) modelMapper.updateById(model)`。
相关问题
mybatis plus3.3中 插入写法
MyBatis-Plus 3.3 中插入写法可以使用如下方式:
首先,创建一个实体类对象,设置需要插入的数据,例如:
```java
User user = new User();
user.setName("Tom");
user.setAge(18);
user.setEmail("tom@example.com");
```
然后,使用 MyBatis-Plus 提供的 `BaseMapper` 接口中的 `insert` 方法插入数据,例如:
```java
int result = userMapper.insert(user);
```
其中,`userMapper` 是一个继承了 `BaseMapper<User>` 的接口,可以通过 Spring 注入或者 MyBatis 的 XML 映射文件中配置。
如果插入成功,`result` 的值为 1,否则为 0。
另外,如果需要插入的数据的主键是自动生成的,可以使用 `insert` 方法的重载方法 `insert(T entity, boolean selective)`,其中 `selective` 参数表示是否忽略空值字段。例如:
```java
int result = userMapper.insert(user, true);
```
如果 `selective` 参数为 `true`,则会忽略 `user` 对象中值为 `null` 的字段,只插入非空字段。如果 `selective` 参数为 `false`,则会插入所有字段,包括值为 `null` 的字段。
mybatis-plus的如何插入消息之后,获取主键ID?
在 Mybatis-Plus 中,可以使用 `insert` 方法插入数据后,通过实体对象获取自动生成的主键 ID。具体步骤如下:
1. 在实体类中使用 `@TableId` 注解标注主键字段,并设置 `type` 属性为 `IdType.AUTO`,表示使用数据库自增主键。
```java
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
}
```
2. 调用 `insert` 方法插入数据,并将实体对象作为参数传入。插入成功后,实体对象的主键 ID 字段会被自动赋值。
```java
User user = new User();
user.setName("Tom");
user.setAge(18);
userMapper.insert(user);
Long id = user.getId(); // 获取插入成功后的主键 ID
```
注意:如果插入的实体对象中没有主键字段或者主键字段的值为 `null`,则插入成功后,主键 ID 字段不会被自动赋值,需要手动获取。可以通过 `selectKey` 标签或者 `@SelectKey` 注解来实现获取自动生成的主键 ID。具体用法可以参考 Mybatis-Plus 官方文档。
阅读全文