There is no getter for property named 'XXX' in class 'aaa.bbb.ccc'(终极骚操作的解决方法)...
使用SpringBoot整合Mybatis時,遇到了像標(biāo)題的異常,博主當(dāng)時是用Bean類對象作為參數(shù)的,所以百度了很久都沒有建設(shè)性答案。貼一下報錯的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>?
?
?
嗯~按照常規(guī)SSM的操作,上面的代碼不會出異常的,但實際上就報了nested exception is org.apache.ibatis.reflection.ReflectionException的異常,完整的標(biāo)題語句是There is no getter for property named 'user' in class 'com.cjs.bean.User',他的意思是在User對象里沒有user的getter方法。什么???(黑人問號.jpg)user是一個對象,怎么會搞個getter方法進(jìn)去?!于是博主又寫了一個簡單的方法,參數(shù)是一個String類型,按照優(yōu)良編碼習(xí)慣,在Dao方法的參數(shù)上加上@Param("username"),很正常,完美插入一條數(shù)據(jù),于是大膽在原來的方法加上@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); }其實就是一個簡單的操作,現(xiàn)在來分析一下,加上@Param("user")是為了在XXXMapper.xml文件能夠準(zhǔn)確找到該參數(shù),parameterType="user",這里的user是類型,表示傳進(jìn)來的參數(shù)類型是user,其實是User對象,這里設(shè)定了User的別名是user;#{user.username}這里的user是參數(shù)名,問題就出在這里了(敲黑板),在SpringBoot整合Mybatis里面,如果不設(shè)置@Param("user"),它會把#{user.username}里的user當(dāng)作你傳進(jìn)去的參數(shù)的一個屬性值,即變成了user.user.username,那么User對象里面自然沒有user屬性了,相反,我表明了#{user.username}里的user就是我傳進(jìn)去的參數(shù),即標(biāo)明@Param("user")。這種解決方法可以推廣到參數(shù)為非bean對象的情況。
按照剛才的分析,如果使用#{user.username},就要加@Param("user")來標(biāo)記user參數(shù),換句話說,如果不加,就把#{user.username}里的user當(dāng)作是參數(shù)里的一個屬性(注意上面有下劃線的一句話),那么這里出現(xiàn)第二種修改方式:將#{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>?
轉(zhuǎn)載于:https://www.cnblogs.com/SysoCjs/p/9880223.html
總結(jié)
以上是生活随笔為你收集整理的There is no getter for property named 'XXX' in class 'aaa.bbb.ccc'(终极骚操作的解决方法)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker容器的管理
- 下一篇: c模拟内存分配算法(首次适应算法,最佳适