解決Mybatis報(bào)錯(cuò):org.apache.ibatis.reflection.ReflectionException: There is no getter for property named問(wèn)題
錯(cuò)誤提示
服務(wù)器處理發(fā)生異常:
nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘userTaskqueryDTO’ in ‘class com.lz.platform.trauma.api.interfaces.dto.task.UserTaskqueryDTO’
解決方式
可能錯(cuò)誤原因一
解決方法一:
DTO沒(méi)有寫(xiě)getter/setter方法,需要添加上。SpringBoot在DTO上加@Data
@Data是一個(gè)Lombok提供的注解,可以自動(dòng)為Java類(lèi)生成一些常用的方法,包括getter、setter、toString、equals、hashCode等方法,從而簡(jiǎn)化Java類(lèi)的編寫(xiě)。
使用@Data注解可以讓代碼更加簡(jiǎn)潔,提高開(kāi)發(fā)效率。
@Data @ApiModel(value = "模糊查詢(xún)列表") public class UserTaskqueryDTO implements Serializable { private String idno; private String Code; private String keyWord; }
可能錯(cuò)誤原因二
解決方法二:
DAO文件上沒(méi)有加上注入方法@Repository
DAO文件上需要加上@Repository
@Repository是Spring框架中的一個(gè)注解,用于標(biāo)識(shí)一個(gè)類(lèi)作為數(shù)據(jù)訪問(wèn)對(duì)象(DAO)的組件。它的作用是將DAO層的Bean標(biāo)記為Spring容器中的Bean,并自動(dòng)執(zhí)行Bean的注冊(cè)、依賴(lài)注入等操作。
可能錯(cuò)誤原因三
解決方法三:
JAVA中Mapper文件不識(shí)別#{dto.propertyName}語(yǔ)法,將dto.去掉
Mapper文件中方法DTO注入不能帶上DTO名稱(chēng)。
錯(cuò)誤Mapper:
<select id="queryUserTraumaTaskList" resultType="com.lz.task.TraumaTask" parameterType="com.lz.task.UserTaskqueryDTO"> select * from task t where 1=1 <if test=" userTaskqueryDTO.no != null and userTaskqueryDTO.no != ''"> and t.NO = #{userTaskqueryDTO.no} </if> <if test="userTaskqueryDTO.keyWord != null and userTaskqueryDTO.keyWord !=''"> and ( t.STERNO like concat( concat('%',#{userTaskqueryDTO.keyWord}),'%') or t.NAME like concat( concat('%',#{userTaskqueryDTO.keyWord}),'%') or t.IClass like concat( concat('%',#{userTaskqueryDTO.keyWord}),'%')) </if> order by t.date desc </select>
按照上邊的寫(xiě)法會(huì)出現(xiàn)報(bào)錯(cuò):
服務(wù)器處理發(fā)生異常:nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘userTaskqueryDTO’ in ‘class com.lz.platform.trauma.api.interfaces.dto.task.UserTaskqueryDTO’
下邊的寫(xiě)法才是正確的寫(xiě)法:
把DTO去掉之后,報(bào)錯(cuò)就消失了,加了DTO系統(tǒng)讀取不到,去掉之后句好了
<select id="queryUserTraumaTaskList" resultType="com.lz.task.TraumaTask" parameterType="com.lz.task.UserTaskqueryDTO"> select * from task t where 1=1 <if test=" no != null and no != ''"> and t.NO = #{no} </if> <if test="keyWord != null and keyWord !=''"> and ( t.STERNO like concat( concat('%',#{keyWord}),'%') or t.NAME like concat( concat('%',#{keyWord}),'%') or t.IClass like concat( concat('%',#{keyWord}),'%')) </if> order by t.date desc </select>
錯(cuò)誤原因
在Mapper文件中,使用DTO(Data Transfer Object)來(lái)傳遞數(shù)據(jù),可以將數(shù)據(jù)從Java代碼傳輸?shù)綌?shù)據(jù)庫(kù),也可以將數(shù)據(jù)從數(shù)據(jù)庫(kù)傳輸?shù)絁ava代碼。
通常情況下,我們將DTO中的屬性名與數(shù)據(jù)庫(kù)表的列名進(jìn)行對(duì)應(yīng),以便在Mapper文件中使用這些屬性來(lái)構(gòu)建SQL語(yǔ)句。
- 在使用DTO的屬性名填充Mapper文件數(shù)據(jù)時(shí),不需要在屬性名前面添加DTO名稱(chēng)。這是因?yàn)镈TO通常是一個(gè)Java類(lèi),而不是一個(gè)數(shù)據(jù)庫(kù)表,它的屬性名稱(chēng)是在Java類(lèi)中定義的,而不是在數(shù)據(jù)庫(kù)表中定義的。
- 在Mapper文件中,我們使用#{propertyName}來(lái)引用DTO的屬性。如果我們?cè)趯傩悦懊嫣砑恿薉TO名稱(chēng),例如#{dto.propertyName},則會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤,因?yàn)镸apper文件不能識(shí)別這個(gè)語(yǔ)法。
因此,在使用DTO的屬性名填充Mapper文件數(shù)據(jù)時(shí),應(yīng)該只使用屬性名本身,而不需要添加DTO名稱(chēng)。
例如,如果DTO中有一個(gè)屬性名為id,我們可以在Mapper文件中使用#{id}來(lái)引用這個(gè)屬性,而不需要使用#{dto.id}。
可能錯(cuò)誤原因四
解決方法四:
sql語(yǔ)句中的屬性名稱(chēng),跟接收,或者入?yún)⒌膶傩悦Q(chēng)不一致
例如:我傳進(jìn)來(lái)的參數(shù)名稱(chēng)為tmID,但是我sql語(yǔ)句里邊寫(xiě)的確是tmhosID
把屬性名稱(chēng)改為一致就可以了
注意:
- 出參和入?yún)⒌念?lèi)型不要弄錯(cuò)了
- 出參是一個(gè)list的話(huà),resultType放的是list參數(shù)的類(lèi)型。
- 例如:出參List《TraumaTask》 ,resultType放的就是TraumaTask路徑
- 出參List《String 》,resultType放的就是java,util.lang
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 解決mybatis generator MySQL自增ID出現(xiàn)重復(fù)問(wèn)題MySQLIntegrityConstraintViolationException
- MyBatis嵌套查詢(xún)collection報(bào)錯(cuò):org.apache.ibatis.exceptions.TooManyResultsException
- 解決springboot3:mybatis-plus依賴(lài)錯(cuò)誤:org.springframework.beans.factory.UnsatisfiedDependencyException
- 解決Mybatis出現(xiàn)報(bào)錯(cuò)Error querying database.Cause: java.lang.IndexOutOfBoundsException: Index 9 out of
- 解決mybatis plus報(bào)錯(cuò)com.microsoft.sqlserver.jdbc.SQLServerException:必須執(zhí)行該語(yǔ)句才能獲得結(jié)果
- 關(guān)于MyBatisSystemException異常產(chǎn)生的原因及解決過(guò)程
相關(guān)文章
java.io.File的renameTo方法移動(dòng)文件失敗的解決方案
這篇文章主要介紹了java.io.File的renameTo方法移動(dòng)文件失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07ByteArrayOutputStream與InputStream互相轉(zhuǎn)換方式
這篇文章主要介紹了ByteArrayOutputStream與InputStream互相轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12淺談java Properties類(lèi)的使用基礎(chǔ)
下面小編就為大家分享一篇淺談java Properties類(lèi)的使用基礎(chǔ),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01SpringBoot項(xiàng)目統(tǒng)一枚舉轉(zhuǎn)換實(shí)踐過(guò)程
文章介紹了在Spring Boot項(xiàng)目中統(tǒng)一枚舉轉(zhuǎn)換的實(shí)踐,通過(guò)使用自定義的父枚舉接口和AttributeConverter、ConverterFactory、JsonSerializer和JsonDeserializer等工具,實(shí)現(xiàn)了枚舉與數(shù)據(jù)庫(kù)、請(qǐng)求參數(shù)、響應(yīng)參數(shù)和消息參數(shù)之間的自動(dòng)轉(zhuǎn)換2024-12-12