报错:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'name' in 'class java.lang.String'。多张表模糊查询代码如下:
<select id="selectAllBedLike" parameterType="String" resultMap="BedResultMap"> select b.number,pat.id,per.name,per.age,pese.id,gro.groupname from bedtable b left join patient pat on b.pat_id = pat.id left join personalinformation per on pat.per_id = per.id left join personalservice pese on pat.id = pese.pat_id left join grouptable gro on pese.gro_id = gro.id left join apartment apa on b.apa_id = apa.id left join apartmenttype apty on apa.apty_id = apty.id where per.name like '%${name}%'; </select>
这样写才是正确的:
<selectid="selectAllBedLike"parameterType="String"resultMap="BedResultMap"><bindname="nameLike"value="'%'+name+'%'"/>selectb.number,pat.id,per.name,per.age,pese.id,gro.groupnamefrombedtablebleftjoinpatientpatonb.pat_id=pat.idleftjoinpersonalinformationperonpat.per_id=per.idleftjoinpersonalservicepeseonpat.id=pese.pat_idleftjoingrouptablegroonpese.gro_id=gro.idleftjoinapartmentapaonb.apa_id=apa.idleftjoinapartmenttypeaptyonapa.apty_id=apty.idwhereper.namelike#{nameLike};</select>
这个答案才是最标准而且是mybatis推荐的。要善用bind标记,还有要注意#{}和${}的区别。这个答案才应该被推荐,不推荐用数据库特有的CONCAT。试了,还是报一样的错
可以这样写····不是报没getter方法吗·····
写了get方法的MySql:SELECT*FROMuserWHEREnamelikeCONCAT('%',#{name},'%')Oracle:SELECT*FROMuserWHEREnamelikeCONCAT('%',#{name},'%')或SELECT*FROMuserWHEREnamelike'%'||#{name}||'%'SQLServer:SELECT*FROMuserWHEREnamelike'%'+#{name}+'%'DB2:SELECT*FROMuserWHEREnamelikeCONCAT('%',#{name},'%')或SELECT*FROMuserWHEREnamelike'%'||#{name}||'%'
谢谢,问题解决了很有用
我想说一句,他的问题在于误用了${variable}!而为什么公孙二狗的答案能解决他的问题,因为避免了楼主的那种错误。而我前面回答的,我的写法已经实践过非常之多,不清楚楼主有没有注意到$和#的区别呢。
恩,我用你的代码又写了几个语句试了也可以。谢谢了版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。