java 数据库字段为空_解决mybatis plus字段为null或空字符串无法保存到数据库的问题...

背景

项目中集成了mybatis plus, 今天在做后台的一个常规的增删改查时,发现字段值为null时,这个字段不会被保存到数据库

解决办法

在字段上加上

@TableField(strategy = FieldStrategy.IGNORED)

strategy字段更新插入策略属性说明:

IGNORED(0): “忽略判断”, 所有字段都更新和插入

NOT_NULL(1): “非 NULL 判断”, 只更新和插入非NULL值

NOT_EMPTY(2): “非空判断”, 只更新和插入非NULL值且非空字符串

另外一种方式可全局配置,未亲手实践。

补充:Mybatis查询数据部分字段显示为null,怎么转成空串("")

1、先定义一个handler,来把字段为null的转成空串("")

2、在Mapper.xml中,把可能为空的字段,加上typeHandler属性,指定处理的handler类的全路径。

CustomStringTypeHandler.java

package com.wang.common.mybatis.handler;

import org.apache.ibatis.executor.result.ResultMapException;

import org.apache.ibatis.type.BaseTypeHandler;

import org.apache.ibatis.type.JdbcType;

import org.apache.ibatis.type.MappedJdbcTypes;

import org.apache.ibatis.type.MappedTypes;

import java.sql.CallableStatement;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

/**

* @Name: CustomStringTypeHandler

* @Desc: 自定义mybatis处理类,将null返回为空串(‘')

* @Author: Administrator

* @Date: 2019-09-03 18:20

*/

@MappedTypes({String.class})

@MappedJdbcTypes(JdbcType.VARCHAR)

public class CustomStringTypeHandler extends BaseTypeHandler {

@Override

public String getResult(ResultSet rs, String columnName) {

String result;

try {

result = getNullableResult(rs, columnName);

} catch (Exception e) {

throw new ResultMapException("Error attempting to get column '" + columnName + "' from result set. Cause: " + e, e);

}

return result;

}

@Override

public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType)

throws SQLException {

ps.setString(i, parameter);

}

@Override

public String getNullableResult(ResultSet rs, String columnName)

throws SQLException {

return rs.getString(columnName) == null? "" : rs.getString(columnName);

}

@Override

public String getNullableResult(ResultSet rs, int columnIndex)

throws SQLException {

return rs.getString(columnIndex) == null? "" : rs.getString(columnIndex);

}

@Override

public String getNullableResult(CallableStatement cs, int columnIndex)

throws SQLException {

return cs.getString(columnIndex) == null? "" : cs.getString(columnIndex);

}

}

Mapper.xml

没有加typeHandler属性,处理之前的查询结果:

BusinessTrip(requestId=11925, jobNumber=5721, requestDate=2019-05-06, department=57, businessDays=21, cfd=上海, mdd=南京, startTime=2019-05-06 13:36, endTime=2019-05-07 13:36, reason=null, remark=null)

增加typeHandler属性,处理后的结果:(reason和remark字段都变成了空串)

BusinessTrip(requestId=11925, jobNumber=5721, requestDate=2019-05-06, department=57, businessDays=21, cfd=上海, mdd=南京, startTime=2019-05-06 13:36, endTime=2019-05-07 13:36, reason=, remark=)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
问题的原因可能是由于使用了Mybatis-Plus对JSON字段的操作时出现了一些问题。在Mybatis-Plus中,对于JSON字段的操作有几种方式。首先,可以在实体类的字段上使用@TableField注解,并指定typeHandler为FastjsonTypeHandler。这样可以将JSON字符串自动转换成对应的Java对象。例如,在Doc实体类中使用了FastjsonTypeHandler对tag字段进行了处理。另外一种方式是在查询时使用Mybatis-Plus提供的自带方法对JSON字段进行处理。可以使用lambda表达式或者QueryWrapper来进行查询,通过指定JSON字段的属性名和属性值来进行查询。如果查询结果为空,可能是因为没有匹配到对应的JSON字段。最后,还可以通过自定义SQL语句来对JSON字段进行操作。可以使用Mybatis-Plus提供的SQL方法,或者编写自定义的SQL来进行操作。如果取出的JSON字符串为空,可能是因为数据表中对应的JSON字段没有值或者值为null。需要检查数据表中的数据是否正确。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mybatis-plus 操作json字段](https://blog.csdn.net/A434534658/article/details/126806270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [mybatis-plus数据库存JSON字符串java使用实体接收](https://blog.csdn.net/evalsys/article/details/129298067)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值