背景
項(xiàng)目中集成了mybatis plus, 今天在做后臺(tái)的一個(gè)常規(guī)的增刪改查時(shí),發(fā)現(xiàn)字段值為null時(shí),這個(gè)字段不會(huì)被保存到數(shù)據(jù)庫
解決辦法
在字段上加上
1
|
@TableField (strategy = FieldStrategy.IGNORED) |
strategy字段更新插入策略屬性說明:
IGNORED(0): “忽略判斷”, 所有字段都更新和插入
NOT_NULL(1): “非 NULL 判斷”, 只更新和插入非NULL值
NOT_EMPTY(2): “非空判斷”, 只更新和插入非NULL值且非空字符串
另外一種方式可全局配置,未親手實(shí)踐。
補(bǔ)充:Mybatis查詢數(shù)據(jù)部分字段顯示為null,怎么轉(zhuǎn)成空串("")
1、先定義一個(gè)handler,來把字段為null的轉(zhuǎn)成空串("")
2、在Mapper.xml中,把可能為空的字段,加上typeHandler屬性,指定處理的handler類的全路徑。
CustomStringTypeHandler.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
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<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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<? 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 id = "BaseResultMap" 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 > |
沒有加typeHandler屬性,處理之前的查詢結(jié)果:
1
|
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字段都變成了空串)
1
|
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ù)器之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
原文鏈接:https://blog.csdn.net/toalaska/article/details/90085250