There is no getter for property named 'XXX' in class 'aaa.bbb.ccc'(终极骚操作的解决方法)...
使用SpringBoot整合Mybatis時,遇到了像標題的異常,博主當時是用Bean類對象作為參數的,所以百度了很久都沒有建設性答案。貼一下報錯的xxxDao文件和xxxMapper.xml文件:
package com.cjs.dao;import com.cjs.bean.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.*;@Mapper public interface UserDao {public int insertUser(User user);}?
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.cjs.dao.UserDao"><insert id="insertUser" parameterType="user">insert into tb_users(username, loginname, password, phone, address)values (#{user.username},#{user.loginname}, #{user.password}, #{user.phone}, #{user.address})</insert> </mapper>?
?
?
嗯~按照常規SSM的操作,上面的代碼不會出異常的,但實際上就報了nested exception is org.apache.ibatis.reflection.ReflectionException的異常,完整的標題語句是There is no getter for property named 'user' in class 'com.cjs.bean.User',他的意思是在User對象里沒有user的getter方法。什么???(黑人問號.jpg)user是一個對象,怎么會搞個getter方法進去?!于是博主又寫了一個簡單的方法,參數是一個String類型,按照優良編碼習慣,在Dao方法的參數上加上@Param("username"),很正常,完美插入一條數據,于是大膽在原來的方法加上@Param("user"),運行,喲~竟然插入成功了,這是一個神奇的操作。
修改后的Dao文件代碼:
package com.cjs.dao;import com.cjs.bean.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.*;@Mapper public interface UserDao {public int insertUser(@Param("user") User user); }其實就是一個簡單的操作,現在來分析一下,加上@Param("user")是為了在XXXMapper.xml文件能夠準確找到該參數,parameterType="user",這里的user是類型,表示傳進來的參數類型是user,其實是User對象,這里設定了User的別名是user;#{user.username}這里的user是參數名,問題就出在這里了(敲黑板),在SpringBoot整合Mybatis里面,如果不設置@Param("user"),它會把#{user.username}里的user當作你傳進去的參數的一個屬性值,即變成了user.user.username,那么User對象里面自然沒有user屬性了,相反,我表明了#{user.username}里的user就是我傳進去的參數,即標明@Param("user")。這種解決方法可以推廣到參數為非bean對象的情況。
按照剛才的分析,如果使用#{user.username},就要加@Param("user")來標記user參數,換句話說,如果不加,就把#{user.username}里的user當作是參數里的一個屬性(注意上面有下劃線的一句話),那么這里出現第二種修改方式:將#{user.username}換成#{username}
package com.cjs.dao;import com.cjs.bean.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.*;@Mapper public interface UserDao {public int insertUser(User user);} <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.cjs.dao.UserDao"><insert id="insertUser" parameterType="user">insert into tb_users(username, loginname, password, phone, address)values (#{username},#{loginname}, #{password}, #{phone}, #{address})</insert> </mapper>?
轉載于:https://www.cnblogs.com/SysoCjs/p/9880223.html
總結
以上是生活随笔為你收集整理的There is no getter for property named 'XXX' in class 'aaa.bbb.ccc'(终极骚操作的解决方法)...的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Docker容器的管理
- 下一篇: Linux学习 命令部分
