解决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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。