Maybatis+lombok数据库有值,程序中获取的部分字段为null

我用的是mybatis+lombok,今天晚上遇到了一个非常奇怪的问题,我的数据库中字段都有值,但是实体类从数据库获得到的值部分为空值
在这里插入图片描述
User.java

import lombok.Data;
import java.util.Date;

@Data
public class User {
    private  int user_no;
    private String user_id;
    private String user_nam;
    private String sex;
    private String phone;
    private String email;
    private String password;
    private String identity_type;
    private Date create_date;
}

进行登录操作是,出现如下情况
在这里插入图片描述
从图中可以看出获取的user_no等部分字段为null,我查了很多文档,终于在一篇博客中查到原因,当我们字段命名用_进行分割是,lombok生成get/set方法是会出现问题,目前的解决方案是将实体类,数据库中的下划线去掉
执行结果如下:
在这里插入图片描述
图中可以看到,在数据库中有值的字段,去掉下划线后,可以正常获取到值
但这不是一个好的办法,后续会继续查找资料,解决存在下划线的字段该怎么处理

-------------------------------------------------------------分割线------------------------------------------------------------------------
上面提到当我在实体类中的属性为_分割是,lombok生成getter/setter方法会出现问题
今天在重新设计了表后,增加了一些字段,实体类如下:

package com.base.myweb.pojo;

import lombok.Data;
import java.util.Date;

@Data
public class Userinfo {
    private  Integer userNo;
    private String userId;
    private String userNam;
    private String sex;
    private Integer age;
    private String phone;
    private String email;
    private String password;
    private Date brithday;
    private String identityType;
    private Date createTime;
    private String motto;
    private Integer country;
    private Integer province;
    private Integer city;
    private String address;
    private String emailSta;
    private String phoneSta;
    private String headImg;

}

然后我进行了登录操作,当执行数据库操作是,产生了以下报错

### SQL: SELECT  userno,userid,usernam,sex,age,phone,email,password,brithday,identity_type,create_time,motto,country,province,city,address,email_sta,phone_sta,head_img  FROM userinfo  WHERE  EMAIL = ?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'identity_type' in 'field list'

从这里我们可以看到,当进行sql转换时,实体类中的属性如果某一个字符中出现大写,生成的sql中的对应字段,会在大写字符前面拼接一个下划线(表也是一样的,如果实体类非首字母存在大写,会在对应大写字母前拼接一个_)
所以如果数据库中存在 XXX_AXX的字段,实体类中则去掉_,并将A大写即可

你可能感兴趣的:(mybatis,lombok)