mybatis plus 3.1.0
user中的genderEnum枚举类insert的时候显示正常,但是在查询的时候,没genderEnum无法获取到数据库字段映射的值。
重现步骤
user.java `@TableId(value = "id", type = IdType.NONE) private Long id;
private String mobile;
private String encodedPassword;
private String name;
private String nickName;
private String headIcon;
@TableField(value = "gender", el = "gender, jdbcType=BIGINT")
private GenderEnum gender;`
GenderEnum.java
`public enum GenderEnum implements IEnum
/**
* male
*/
MALE(1, "女"),
/**
* female
*/
FEMALE(2, "男");
private int code;
private String descritpion;
GenderEnum(int code, String descritpion) {
this.code = code;
this.descritpion = descritpion;
}
public void setCode(int code) {
this.code = code;
}
public int getCode() {
return code;
}
@JsonValue
public String getDescritpion() {
return descritpion;
}
public void setDescritpion(String descritpion) {
this.descritpion = descritpion;
}
@Override
public Integer getValue() {
return this.code;
}
}`
configuration: map-underscore-to-camel-case: true default-enum-type-handler: com.baomidou.mybatisplus.extension.handlers.EnumTypeHandler
userMapper.java
public interface UserMapper extends BaseMapper<User> {
}
报错信息
查询时,gender没有值。
Comment From: miemieYaho
把你配置的default-enum-type-handler删掉试试
Comment From: pleasecallmeleifeng
删掉不行的,还是没有查询出来
User(mobile=17816853545, encodedPassword=12345678, name=春晓sir, nickName=virgil, headIcon=http://f.hiphotos.baidu.com/image/pic/item/4610b912c8fcc3ce863f8b519c45d688d53f20d0.jpg, **** gender=null ****, deleted=0)
INSERT INTOcnasir_driver.user(id,mobile,encoded_password,name,nick_name,head_icon,gender,deleted,created_date,last_modified_date,version) VALUES (22, '17816853545', '12345678', '春晓sir', 'virgil', 'http://f.hiphotos.baidu.com/image/pic/item/4610b912c8fcc3ce863f8b519c45d688d53f20d0.jpg', **** '2' ****, 0, '2019-04-19 11:33:02', '2019-04-19 11:33:02', 1);
Comment From: nieqiurong
去除你的 jdbcType=BIGINT试试.
Comment From: pleasecallmeleifeng
你好,大佬 ~ 我把jdbcType去掉了还是不行 我把代码push到github了,大佬有空的帮我看看 https://github.com/pleasecallmeleifeng/cnasir-driver
Comment From: yhan219
看下数据库字段类型是什么,如果是tinint(1)的话会有问题
Comment From: nieqiurong
看下数据库字段类型是什么,如果是tinint(1)的话会有问题 提醒到了,应该是这问题.
Comment From: pleasecallmeleifeng
我把数据库的gender字段类型写成了varchar, 导致了读取没有匹配到GenderEnum, 谢谢大佬的解答。
Comment From: pleasecallmeleifeng
结论:枚举类型所对应的数据库字段必须设置为int。
Comment From: yuxiaobin
implements IEnum:
@Override public Integer getValue() { return this.code; }
这里是指定数据库用到字段值,这里是integer,数据库当然得匹配用int
Comment From: Jiiiiiin
我也是改成tinint(1)就出问题了~~ 哈哈 大佬能解释一下么 科普科普
Comment From: lehug
插入的时候从0开始的,怎么根据enum的code插入到数据库呢?
Comment From: yuxiaobin
@TableField(value = "gender") private GenderEnum gender;
参考枚举使用sample:
https://gitee.com/baomidou/mybatis-plus-samples/tree/master/mybatis-plus-sample-enum
Comment From: okcgogogo
yhan219 commented on 19 Apr 2019 看下数据库字段类型是什么,如果是tinint(1)的话会有问题
大佬正解