mybatis/mybatis-plus接收为0或为null的数据时不写入数据库

本文介绍了如何在MyBatis和MyBatis-Plus中处理insert和update操作时遇到的零值或空值问题,包括使用动态SQL避免存储0,实体类注解忽略判断,以及配置文件中的全局更新策略设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当insert或者update时,传输的字段值有为0或者为null的时候,可以进行如下操作

1、mabatis:

①当传入的值为0时:

如果使用了动态sql:

0在mybatis等于 ' ',去掉 != ' ' 条件即可

②当传入的值为null时:

动态sql使用了<trim></trim>标签,就不会保存到数据库中

我的修改方法如下:

2、mybatis-plus:

①在实体类中给指定字段添加注解,使其忽略判断

@TableField(strategy=FieldStrategy.IGNORED)  (3.1.2版本后被弃用)

注解TanleField的strategy属性:

NOT NULL, 非ENULL判断

NOT EMPTY, 非空判断

DEFAULT, 默认

IGNORED,忽略判断;

新版本使用这个:

使用场景:

  • insertStrategy insert操作时的字段策略,是否进行空值判断,插入空值
  • updateStrategy update操作时的字段策略,是否进行空值判断,插入空值
  • whereStrategy where条件组装时的字段策略,是否进行控制判断,将空值作为查询条件

②全局配置

在配置文件中添加配置

mybatis-plus:
  global-config:
    db-config:
      update-strategy: IGNORED
### 使用 `mybatis-plus-boot-starter` 实现批量插入Java Spring Boot 应用程序中,通过集成 `mybatis-plus-boot-starter` 可以简化数据访问层的开发工作。对于批量插入操作,MyBatis-Plus 提供了便捷的方法来处理这类场景。 #### 配置依赖项 首先,在项目的 `pom.xml` 文件中引入必要的依赖: ```xml <dependencies> <!-- MyBatis Plus Starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis.plus.version}</version> </dependency> <!-- Druid 连接池 (可选) --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!-- Sharding-JDBC-Spring-Boot-Starter (如果需要分片支持) --> <dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>${sharding.jdbc.version}</version> </dependency> </dependencies> ``` #### 创建实体类和服务接口 定义一个简单的实体类用于映射数据库表结构,并创建相应的 Mapper 接口继承自 `BaseMapper<T>` 来获取默认 CRUD 方法的支持[^1]。 ```java // User.java - 实体类 public class User { private Long id; private String name; private Integer age; // Getters and Setters... } // UserMapper.java - 映射器接口 @Mapper public interface UserMapper extends BaseMapper<User> {} ``` #### 批量插入逻辑实现 利用 `UserMapper.insertBatchSomeColumn()` 或者 `insertAllColumnsBatch()` 方法可以轻松完成批量记录写入的操作。下面是一个服务方法的例子展示如何调用这些 API 完成多条用户信息的同保存到数据库中[^2]。 ```java @Service public class UserService { @Autowired private UserMapper userMapper; public void batchInsertUsers(List<User> userList){ // 插入指定字段数据, 对于null会执行sql注入 this.userMapper.insertBatchSomeColumn(userList); // 如果希望所有列都参与SQL语句构建,则使用此方式 // this.userMapper.insertAllColumnsBatch(userList); } } ``` 注意:当采用批处理模式,请确保事务管理已正确配置以便保证整个过程的一致性和可靠性。此外,考虑到性能因素,建议合理控制每次提交的数量大小以及优化 SQL 语句生成策略[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值