轻量级前端框架助力开发者提升项目效率与性能
1622
2022-11-18
Mybatis无法获取带有下划线前缀的字段的值问题
目录Mybatis无法获取带有下划线前缀的字段的值打了断点,发现真相在这里解决办法Mybatis无法给带有下划线属性赋值1、配置问题2、增加set方法转换值的方式
Mybatis无法获取带有下划线前缀的字段的值
今天下面,把几张表里的字段都加了前缀,如 article_id,article_title,acticle_content,article_status。
然后通过Mybatis-generator 生成了 po和mapper,替换后。
原本正常的网页,这下数据全没了。当时,很淡定,推测可能是哪里写错了,改改就好。但是就是这改改,改了几个小时都没成功,调试了很久。打断点一直是显示:All Element are null
后来,Ctrl+Z 撤销所有修改,并把字段的前缀全部去掉。这时候,突然想到,之前有一次就是因为字段加了下划线导致什么报错,当时为了省事,就全改为没有下划线的。同时也关注到 Mybatis-generator 会把带有下划线的字段按照驼峰法命名,会不会是这里呢?
这时候,试了一下不带下划线和带下划线字段混合的表。
打了断点,发现真相在这里
带有下划线的字段,都无法获取值,不带的则可以。
最终百度找到了解决方案。
这里感谢一下 valder fields
解决办法
在mybatis-config.xml文件里配置
Mybatis无法给带有下划线属性赋值
1、配置问题
或者
//开启驼峰映射
bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
mybatis配置文件设置了这项后,查询出来的字段如果带下划线,那么就会去掉下划线,然后采用java驼峰规则。比如数据库字段Parent_id,那么查询出来后,会转为parentid,然后去实体类匹配对应的字段。 因为你实体类里有下划线,所以匹配不上。要么采用resultMap 要么禁用掉驼峰规则(不建议禁用)。如果不想改实体类的话,建议采用resultMap。
2、增加set方法转换值的方式
原实体类
public class demo {
private String user_name;
private Striing pass_word;
public String getPass_word(){
return pass_word;
}
public void setPass_word(String pass_word){
this.pass_word=pass_word;
}
}
原sql
select user_name,pass_word from demo;
这句sql在数据库可以查到数据,但是使用mybatis的实体类查询就查不到了。
解决方法
在实体类中增加以下两个set方法并把sql改为
select user_name as username,pass_word as password from demo;
使用实体类查询数据库实际上就是一个set的过程只需要把每个属性增加一个set方法就好了
public void setUsernaem(String user_name){
this.user_name=user_name;
}
public void setPassword(String pass_word){
this.pass_word=pass_word;
}
仅适用于不方便改实体类的情况
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~