Mybatis关于int类型字段的判断

本文探讨了在使用MyBatis进行数据库操作时遇到的一个特殊问题:当字段为int类型且值为0时,更新语句无法正确更新该字段。通过分析问题原因,给出了解决方案,并提醒开发者注意相关细节。

出现问题:
有一个字段waterNum 为int类型,在更新语句时判断不为null或空字符串时,更新该字段,问题在于,当waterNum为0的时候,该字段不更新了

代码示例:

<if test="waterNum!=null and waterNum!=''">
    ,waterNum = #{waterNum}
</if>

问题原因:
Mybatis在判断int类型时,0认为是空字符串,因为加了waterNum!=”,所以该判断为false,不更新该字段

解决办法:
去掉waterNum!=”判断

注意:
当表结构有其他为int类型字段,初始化值为0,去掉判断后也要注意更新掉一些不想更新的值

### MyBatis Plus 中布尔类型字段 Getter 方法实现 在使用 MyBatis Plus 进行数据库操作时,对于布尔类型字段,在 Java 实体类中的定义以及其对应的 getter 和 setter 方法有特定的要求。当数据库表中布尔类型字段采用 `is_xxx` 的命名方式时,为了保持一致性和遵循编码规范,建议按照如下方式进行实体类的设计。 #### 数据库字段到实体属性的映射 假设有一个名为 `user_status` 的表,其中包含一个布尔类型字段 `is_deleted` 表示逻辑删除状态: | 字段名 | 类型 | | ----------- | ------- | | id | INT | | name | VARCHAR | | is_deleted | BOOLEAN | 对应于上述表格结构的 Java 实体类应这样设计: ```java import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; @Data public class UserStatus { private Long id; @TableField("name") private String name; // 使用 deleted 来代替 isDeleted 符合 Lombok 推荐做法 @TableField("is_deleted") private Boolean deleted; } ``` 通过移除前缀 `is_` 并保留基础名称作为成员变量的名字来创建实体对象。这样做不仅提高了代码简洁度也便于后续维护工作[^1]。 #### 自动化生成 Getter/Setter 方法 考虑到手写这些访问器函数既耗时又容易出错,推荐借助像 Lombok 这样的第三方库来自动生成所需的 getter/setter 函数。只需添加相应的依赖并声明 `@Data` 注解即可自动完成此过程。需要注意的是,Lombok 默认不会为 boolean 或 Boolean 类型加上 "is" 前缀;因此这里直接命名为 `deleted` 即可让框架正确识别该字段为布尔类型,并为其提供合适的访问接口[^2]。 #### 定制 Getter 名称 (如有必要) 尽管大多数情况下默认行为已经足够好用了,但在某些特殊场景下可能仍需定制 getter 方法的行为。此时可以通过覆写相应的方法来进行调整。例如,如果你确实希望返回的结果带有 `isXXX()` 形式的 getter,则可以在实体类内部显式地定义它而不调用父类版本: ```java // 显式指定 getter 方法的形式 @Override public boolean isDeleted() { return this.deleted != null && this.deleted.booleanValue(); } // Setter 可以继续沿用默认形式 public void setDeleted(Boolean deleted) { this.deleted = deleted; } ``` 这种模式允许开发者灵活控制 API 设计的同时仍然享受自动化带来的便利性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值