mybatis mapper互相引用resultMap啟動(dòng)出錯(cuò)的解決
mybatis mapper互相引用resultMap啟動(dòng)出錯(cuò)
問(wèn)題
Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for kulink.cvscloud.core.mapper.OrderSundryMapper.BaseResultMap
at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:888) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.session.Configuration.getResultMap(Configuration.java:640) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.builder.MapperBuilderAssistant.getStatementResultMaps(MapperBuilderAssistant.java:344) ~[mybatis-3.4.5.jar:3.4.5]... 73 common frames omitted
原因
因?yàn)閙ybatis掃描加載的時(shí)候,是按順序加載的A-Z,因?yàn)閙apperA中引用mapperB中的ResultMap
但是啟動(dòng)加載的時(shí)候mapperB加載在mapperA之后,所以造成mapperB.ResultMap找不到的問(wèn)題。
解決方法
升級(jí)新版本,已經(jīng)解決這個(gè)問(wèn)題了
或者在引用mapper.xml中把resultMap直接復(fù)制過(guò)來(lái)
mybatis resultMap引發(fā)的吐血bug
簡(jiǎn)單的講
問(wèn)題背景:如果在寫(xiě)mybatis中的resultMap時(shí),不下心將resultMapde id寫(xiě)成映射接口的名字,會(huì)發(fā)生什么?
結(jié)論:單元測(cè)試進(jìn)度條卡住但不報(bào)錯(cuò), Tomcat運(yùn)行不報(bào)錯(cuò),但是不加載項(xiàng)目
以下是詳細(xì)的
需求:從數(shù)據(jù)庫(kù)中加載之前插入log日志,打印在某一頁(yè)面上。
如:
Java中的pojo:
package pojo; import java.io.Serializable; import java.util.Date; /** * 系統(tǒng)日志 * * @author Administrator */ public class Log implements Serializable { private static final long serialVersionUID = -7372303516713218870L; private int id;// private int userId;// private String userName; private Date createDate;//創(chuàng)建日期 private String content;//日志內(nèi)容 private String operation;//用戶所做的操作 private String url;//用戶所做的操作 public Log() { } public Log(int id, int userId, String userName, Date createDate, String content, String operation, String url) { this.id = id; this.userId = userId; this.userName = userName; this.createDate = createDate; this.content = content; this.operation = operation; this.url = url; } public static long getSerialVersionUID() { return serialVersionUID; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getOperation() { return operation; } public void setOperation(String operation) { this.operation = operation; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } @Override public String toString() { return "Log{" + "id=" + id + ", userId=" + userId + ", userName='" + userName + '\'' + ", createDate=" + createDate + ", content='" + content + '\'' + ", operation='" + operation + '\'' + ", url='" + url + '\'' + '}'; } }
利用mybatis讀取數(shù)據(jù)時(shí),發(fā)生不可理解的事情
public List<Log> listAll(); <resultMap id="LogMapper" type="Log"> <id column="userid" property="userId"/> <result column="username" property="userName"/> <result column="content" property="content"/> <result column="operation" property="operation"/> <result column="createdate" property="createDate"/> <result column="url" property="url"/> </resultMap> <select id="listAll" resultMap="LogMapper"> SELECT * FROM t_log </select>
程序一旦單元測(cè)試就會(huì)進(jìn)入這樣的狀態(tài),
無(wú)限循環(huán),沒(méi)有結(jié)束。不僅這個(gè)方法,所有的測(cè)試方法都進(jìn)入這種“阻塞”的狀態(tài),關(guān)鍵還沒(méi)有異常的提示(哭~)不僅如此,重啟tomcat會(huì)進(jìn)入這樣
一方面tomcat不再加載項(xiàng)目,同時(shí)釋放了幾個(gè)看起來(lái)像是bug的坑,其實(shí)這些都時(shí)正常的信息,沒(méi)有其他的東西!
期間重新導(dǎo)過(guò)jar包,刪除過(guò)tomcat,重新部署項(xiàng)目,但只有一添加上述代碼,就會(huì)崩潰。最后發(fā)現(xiàn),原來(lái)和接口名字重復(fù)了,重復(fù)了。。。。。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于JAVA8的 Stream學(xué)習(xí)
這篇文章主要介紹了JAVA8 Stream學(xué)習(xí)方法的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容2021-09-09基于SpringBoot實(shí)現(xiàn)驗(yàn)證碼功能的代碼及思路
SpringBoot技術(shù)是目前市面上從事JavaEE企業(yè)級(jí)開(kāi)發(fā)過(guò)程中使用量最大的技術(shù),下面這篇文章主要給大家介紹了如何基于SpringBoot實(shí)現(xiàn)驗(yàn)證碼功能的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07Spring Security實(shí)現(xiàn)驗(yàn)證碼登錄功能
這篇文章主要介紹了Spring Security實(shí)現(xiàn)驗(yàn)證碼登錄功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01SpringBoot整合MinIO實(shí)現(xiàn)文件存儲(chǔ)系統(tǒng)的代碼示例
在現(xiàn)代的應(yīng)用程序中,文件存儲(chǔ)和管理是一個(gè)常見(jiàn)的需求,MinIO是一個(gè)開(kāi)源的對(duì)象存儲(chǔ)系統(tǒng),與Spring?Boot框架結(jié)合使用,可以快速構(gòu)建高性能的文件存儲(chǔ)系統(tǒng),本文將介紹如何使用Spring?Boot和MinIO來(lái)實(shí)現(xiàn)文件存儲(chǔ)系統(tǒng)2023-06-06mybatis新增到數(shù)據(jù)庫(kù)后返回當(dāng)前ID問(wèn)題
這篇文章主要介紹了mybatis新增到數(shù)據(jù)庫(kù)后返回當(dāng)前ID問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08java并發(fā)數(shù)據(jù)包Exchanger線程間的數(shù)據(jù)交換器
這篇文章主要為大家介紹了java并發(fā)數(shù)據(jù)包使用數(shù)據(jù)交換器Exchanger來(lái)進(jìn)行線程之間的數(shù)據(jù)交換。有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-03-03SpringBoot整合SpringBoot-Admin實(shí)現(xiàn)監(jiān)控應(yīng)用功能
本文主要介紹如何整合Spring Boot Admin,以此監(jiān)控Springboot應(yīng)用,文中有相關(guān)的示例代碼供大家參考,需要的朋友可以參考下2023-05-05linux系統(tǒng)下java項(xiàng)目在后臺(tái)啟動(dòng)的4種方式總結(jié)
Linux是集多種功能于一身的操作系統(tǒng),它可以讓用戶查看和管理當(dāng)下正在運(yùn)行的進(jìn)程,包括Java程序,這篇文章主要給大家總結(jié)介紹了關(guān)于linux系統(tǒng)下java項(xiàng)目在后臺(tái)啟動(dòng)的4種方式,需要的朋友可以參考下2023-10-10