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

网友投稿 3168 2023-02-11

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

解决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)

publisGXulc 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

<result column="END_TIME" jdbcType="VARCHAR" property="endTime" />

<result column="END_TIME" jdbcType="VARCHAR" property="endTime" />

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

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=)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis查询字段为null设置为0的操作
下一篇:解决mybatisPlus null 值更新的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~