Mybatis查询结果部分字段返回为null

本文探讨了在使用MyBatis进行数据查询时遇到的部分字段返回null的问题,并详细介绍了如何通过配置mybatis-config.xml来解决该问题,包括设置useGeneratedKeys、useColumnLabel和mapUnderscoreToCamelCase等参数。

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

1.在mybatis中查询的时候遇到一些问题,就是有一部分的值是为null,然后其他的是正确的,后来看到那写出问题的变量都是xxx_xxx类型的,那些查出的值都是没有那个"_"的变量,而且查询一条的没有问题,查询多条的就没有问题了,主要是因为查询多条时用的是<select id="selectAll" resultMap="BaseResultMap" >
resultMap可以接受那种类型的变量的转换,而查询一条用的是<select id="findByAreaId" resultType="com.swpu.entity.Area">
resultType对于那种变化不敏感,后来就发现配置一下那个mybatis的配置文件就好了。

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--配置全局属性 -->
    <settings>
        <!--使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
        <setting name="useGeneratedKeys" value="true"/>

        <!--使用标签替换列名 默认:true -->
        <setting name="useColumnLabel" value="true"/>

        <!--开启驼峰命名转换:Table(create_time) ->Entity(createTime) -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

然后在工程的pom.xml文件中配置一下文件就可以了,这样就可以成功查询了

### MyBatis-Plus 中 `updateById` 方法设置字段NULL 的实现方式 在 MyBatis-Plus 中,默认情况下,`updateById` 方法不会将字段更新为 `NULL` 值。这是因为其内置策略通常遵循 `not_null` 或者 `default` 模式[^2]。这意味着当实体对象中的某个字段值为 `NULL` 时,该字段会被忽略而不被写入数据库。 #### 解决方案一:调整字段的填充策略 可以通过修改字段上的注解来改变这一行为。具体来说,在定义实体类属性时,可以使用 `@TableField` 注解并指定 `updateStrategy` 参数为 `ignored`,这样即使字段值为 `NULL`,也会将其更新到数据库中: ```java @TableField(updateStrategy = FieldStrategy.IGNORED, value = "guardian_id") private Long guardianId; ``` 上述配置表示无论字段值为何(包括 `NULL`),都会尝试对其进行更新操作[^3]。 #### 解决方案二:自定义 SQL 更新逻辑 如果不想依赖于框架自动处理机制,则可以直接编写自定义的 UpdateWrapper 来完成更复杂的业务需求。例如下面这段代码展示了如何手动构建条件并将特定列设为空值: ```java LambdaUpdateWrapper<YourEntity> wrapper = new LambdaUpdateWrapper<>(); wrapper.set(YourEntity::getGuardianId, null).eq(YourEntity::getId, id); yourMapper.update(null, wrapper); ``` 这里我们创建了一个 lambda 表达式的 update wrapper 对象,并调用了它的 set 方法把目标字段置零同时匹配记录 ID 进行精准定位最后执行更新动作[^1]。 需要注意的是,这种方式绕过了 mybatis-plus 提供的一些便捷功能,因此开发者需自行确保数据一致性等问题得到妥善解决。 #### 总结 为了使 `updateById` 支持将某些字段设置成 `NULL` ,你可以考虑更改对应表结构映射关系里的元数据声明规则或者是采用更加灵活的手动拼接语句形式达成目的 。每种途径都有各自适用场景以及局限之处,请依据实际项目情况做出合理选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值