今晚做项目遇上了一个需求,需要插入嵌套对象。
对象结构是这样的:
public class RegisterMsg{
private Header header;
private short provinceId;
}
public class Header{
private String terminalPhone;
}
mapper.xml里是这样的:
扫描二维码关注公众号,回复:
7584740 查看本文章
<insert id="add_resgister" parameterType="net.virtuemed.jt808.vo.req.RegisterMsg" > insert into terminal_register(terminalPhone,provinceId) values(#{Header.terminalPhone},#{provinceId}) </insert>
发生了报错:
exceptionCaughtorg.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException:
There is no getter for property named 'Header' in 'class net.virtuemed.jt808.vo.req.RegisterMsg'
大致意思是不能识别Header
通过把Header改成header,就不会报错了。
这个BUG的产生原因是因为我犯了以下错误:
1.不应该是#{属性对象的类型.属性},应该是#{属性对象的名字.属性}。
2.当时脑子短路了,下意识的不区分大小写。
收获:
1.嵌套对象的引用是#{属性对象的名字.属性}。
2.说到大小写,顺便回想起了一个知识点,数据库不区分大小写,Java属性严格区分大小写。