好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

背景

项目中集成了mybatis plus, 今天在做后台的一个常规的增删改查时,发现字段值为null时,这个字段不会被保存到数据库

解决办法

在字段上加上

?

1

@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

?

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属性,处理之前的查询结果:

?

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属性,处理后的结果:(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=)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/toalaska/article/details/90085250

查看更多关于解决mybatis plus字段为null或空字符串无法保存到数据库的问题的详细内容...

  阅读:37次