Mybatis-Plus查询映射实体下划线的字段为null

问题描述

1、表设计

create table mi_outpatient_reg_result
(
    id             bigint auto_increment comment 'id'
        primary key,
    insuplc_admdvs varchar(100)  null comment '参保地区划',
    psn_no         varchar(100)  null comment '人员编号',
    ipt_otp_no     varchar(100)  null comment '住院/门诊流水号',
    mdtrt_id       varchar(100)  null comment '就诊id',
    vola_type      varchar(100)  null comment '违规类型',
    vola_dscr      text null comment '违规描述',
)

2、Java实体

@Data
public class MiOutpatientRegResult {
    /**
     * 参保地区划
     */
    private String insuplcAdmdvs;
    /**
     * 人员编号
     */
    private String psn_no;
    /**
     * 住院/门诊号
     */
    private String ipt_otp_no;
    /**
     * 就诊id
     */
    private String mdtrt_id;
    /**
     * 违规类型
     */
    private String vola_type;
    /**
     * 违规说明
     */
    private String vola_dscr;
}

3、问题:当使用Mybatis-Plus进行查询的时候发现只有id、insuplcAdmdvs字段不为Null;其余下划线的字段都映射为Null。

原因

之前有了解过Mybatis的映射是通过实体的Getter-Setter方法进行赋值,mybatis又开启了驼峰映射。
1、开启驼峰导致的、实体命名又没按照驼峰命名
mytais源码:

 public static String methodToProperty(String name) {
 	// 布尔值类型的命名
    if (name.startsWith("is")) {
      name = name.substring(2);
    } else if (name.startsWith("get") || name.startsWith("set")) {
      name = name.substring(3);
    } else {
      throw new ReflectionException("Error parsing property name '" + name + "'.  Didn't start with 'is', 'get' or 'set'.");
    }
    // 单个的字段或者多个的字段并且第二个字母是小写
    // 比如setPsn_no返回psn_no与数据库字段转了驼峰的不一致,所以才一直映射为null
    // setPsnNo返回psnNo与数据库转了驼峰一致赋值成功
    if (name.length() == 1 || (name.length() > 1 && !Character.isUpperCase(name.charAt(1)))) {
      name = name.substring(0, 1).toLowerCase(Locale.ENGLISH) + name.substring(1);
    }
    return name;
  }

解决

1、实体命名按驼峰规范命名,就可以直接配合@Data注解(我这里业务命名就要求这样不能改)
2、手动生写Getter-Setter方法,按照驼峰格式命名(如下)
3、关闭mybatis驼峰映射

// Lombok生成的
public void setPsn_no(String psn_no) {
   this.psn_no = psn_no;
}
// 手动生成的
public void setPsnNo(String psn_no) {
   this.psn_no = psn_no;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值