解决mybatis plus字段为null或空字符串无法保存到数据库的问题
背景
项目中集成了mybatisplus,今天在做后台的一个常规的增删改查时,发现字段值为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
packagecom.wang.common.mybatis.handler;
importorg.apache.ibatis.executor.result.ResultMapException;
importorg.apache.ibatis.type.BaseTypeHandler;
importorg.apache.ibatis.type.JdbcType;
importorg.apache.ibatis.type.MappedJdbcTypes;
importorg.apache.ibatis.type.MappedTypes;
importjava.sql.CallableStatement;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
/**
*@Name:CustomStringTypeHandler
*@Desc:自定义mybatis处理类,将null返回为空串(‘')
*@Author:Administrator
*@Date:2019-09-0318:20
*/
@MappedTypes({String.class})
@MappedJdbcTypes(JdbcType.VARCHAR)
publicclassCustomStringTypeHandlerextendsBaseTypeHandler{
@Override
publicStringgetResult(ResultSetrs,StringcolumnName){
Stringresult;
try{
result=getNullableResult(rs,columnName);
}catch(Exceptione){
thrownewResultMapException("Errorattemptingtogetcolumn'"+columnName+"'fromresultset.Cause:"+e,e);
}
returnresult;
}
@Override
publicvoidsetNonNullParameter(PreparedStatementps,inti,Stringparameter,JdbcTypejdbcType)
throwsSQLException{
ps.setString(i,parameter);
}
@Override
publicStringgetNullableResult(ResultSetrs,StringcolumnName)
throwsSQLException{
returnrs.getString(columnName)==null?"":rs.getString(columnName);
}
@Override
publicStringgetNullableResult(ResultSetrs,intcolumnIndex)
throwsSQLException{
returnrs.getString(columnIndex)==null?"":rs.getString(columnIndex);
}
@Override
publicStringgetNullableResult(CallableStatementcs,intcolumnIndex)
throwsSQLException{
returncs.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-0613:36,endTime=2019-05-0713: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-0613:36,endTime=2019-05-0713:36,reason=,remark=)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。