解決mybatis plus字段為null或空字符串無(wú)法保存到數(shù)據(jù)庫(kù)的問(wèn)題
項(xiàng)目中集成了mybatis plus, 今天在做后臺(tái)的一個(gè)常規(guī)的增刪改查時(shí),發(fā)現(xiàn)字段值為null時(shí),這個(gè)字段不會(huì)被保存到數(shù)據(jù)庫(kù)
解決辦法在字段上加上
@TableField(strategy = FieldStrategy.IGNORED)
strategy字段更新插入策略屬性說(shuō)明:
IGNORED(0): “忽略判斷”, 所有字段都更新和插入
NOT_NULL(1): “非 NULL 判斷”, 只更新和插入非NULL值
NOT_EMPTY(2): “非空判斷”, 只更新和插入非NULL值且非空字符串
另外一種方式可全局配置,未親手實(shí)踐。
補(bǔ)充:Mybatis查詢數(shù)據(jù)部分字段顯示為null,怎么轉(zhuǎn)成空串('')
1、先定義一個(gè)handler,來(lái)把字段為null的轉(zhuǎn)成空串('')
2、在Mapper.xml中,把可能為空的字段,加上typeHandler屬性,指定處理的handler類(lèi)的全路徑。
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處理類(lèi),將null返回為空串(‘’) * @Author: Administrator * @Date: 2019-09-03 18:20 */@MappedTypes({String.class})@MappedJdbcTypes(JdbcType.VARCHAR)public class CustomStringTypeHandler extends BaseTypeHandler<String> { @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
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-mapper.dtd'><mapper namespace='com.wang.sss.fw.mapper.BusinessTripMapper'> <resultMap type='com.wang.sss.fw.pojo.BusinessTrip'> <result column='REQUEST_ID' jdbcType='VARCHAR' property='requestId' /> <result column='JOB_NUMBER' jdbcType='VARCHAR' property='jobNumber' /> <result column='REQUEST_DATE' jdbcType='VARCHAR' property='requestDate' /> <result column='DEPARTMENT' jdbcType='VARCHAR' property='department' /> <result column='BUSINESS_DAYS' jdbcType='VARCHAR' property='businessDays'/> <result column='CFD' jdbcType='VARCHAR' property='cfd' /> <result column='MDD' jdbcType='VARCHAR' property='mdd' /> <result column='START_TIME' jdbcType='VARCHAR' property='startTime' /> <result column='END_TIME' jdbcType='VARCHAR' property='endTime' /> <result column='REASON' jdbcType='VARCHAR' property='reason' typeHandler='com.wang.common.mybatis.handler.CustomStringTypeHandler'/> <result column='REMARK' jdbcType='VARCHAR' property='remark' typeHandler='com.wang.common.mybatis.handler.CustomStringTypeHandler'/> </resultMap></mapper>
沒(méi)有加typeHandler屬性,處理之前的查詢結(jié)果:
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屬性,處理后的結(jié)果:(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=)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. Oracle 數(shù)據(jù)字典2. Oracle的PDB數(shù)據(jù)庫(kù)創(chuàng)建DIRECTORY時(shí)遇到ORA-65254問(wèn)題及解決方法3. Sqlserver之死鎖查詢以及批量解鎖的實(shí)現(xiàn)方法4. SQL Server自動(dòng)備份無(wú)法刪除過(guò)期的備份文件5. SQLite3數(shù)據(jù)庫(kù)的介紹和使用教程(面向業(yè)務(wù)編程-數(shù)據(jù)庫(kù))6. 總結(jié)幾種MySQL中常見(jiàn)的排名問(wèn)題7. MySQL數(shù)據(jù)庫(kù)備份恢復(fù)實(shí)現(xiàn)代碼8. mysql查詢的控制語(yǔ)句圖文詳解9. MySql 存儲(chǔ)引擎和索引相關(guān)知識(shí)總結(jié)10. Windows10系統(tǒng)中Oracle完全卸載正確步驟
