今天做项目的时候突然遇到一个神奇的问题
关于 mybatis 无法与java类的属性一一对应地赋值
首先看今天遇到的第一种情况
@Data
public class TheTrialCategory {
private int trialId;
private String name;
private String image;
private int cur;
private int nextTrialId;
private int previousTrialId;
private String npcList; //npc列表,值为armyId
private int bossId;
public List<Integer> getNpcList() {
return CommonUtils.strToIntList(this.npcList);
}
public void setNpcList(String npcList) {
this.npcList = npcList;
}
}
这时候遇到一个问题,按道理Mybatis是能通过setNpcList 将数据库的值 赋值给 npcList属性的
然而缺不行,然后我经过一番挣扎,想着会不会要用原始生成的getter和setter 才行?因此进行修改
@Data
public class TheTrialCategory {
private int trialId;
private String name;
private String image;
private int cur;
private int nextTrialId;
private int previousTrialId;
private String npcList; //npc列表,值为armyId
private int bossId;
public List<Integer> getNpcStrToList() {
return CommonUtils.strToIntList(this.npcList);
}
public String getNpcList() {
return npcList;
}
public void setNpcList(String npcList) {
this.npcList = npcList;
}
}
通过这个方法,真的可以! 但是又到了另外一个类的时候,又遇到一个很神奇的情况
这是另外一个类,其中有两个个属性是:
private int[] fightValueForGeneral;
private int[] fightValueForNormal;
以及对应的getter 和 setter方法,我数据库字段类型是varchar的,
因此,我需要自己修改一下setter方法,修改成这样:
public void fightValueForGeneral(String fightValueForGeneral) {
this.fightValueForGeneral= CommonUtils.stringToIntArray(fightValueForGeneral);
}
public void fightValueForNormal(String fightValueForNormal) {
this.fightValueForNormal= CommonUtils.strToIntArr(fightValueForNormal);
}
解释一下CommonUtils.strToIntArr 这个方法就是将字符串转化为int[] 类型
这么看是没问题的对吧,然后getter是用原始生成的。
但是mybatis死活进不去set方法,然后我死活挣扎了一下 将其中一个属性的getter方法删了,结果能进来了!哇!
我项目启动的时候,断了点看看截图
上面的白框就是没进来的淦。
跑完后就是这样
所以解决办法就是把getter方法删除。
后面我想了一下,但是这跟第一个例子是不符合的啊。。。唉,具体真的不知道。
有大神遇到这个问题,并且能解决,能道出个原理原因出来能在评论教教我这个小白吗?