這是我第二次遇到的這個問題了,總結下。
第一次的問題是
mybatis的sqlSessionFactory的mapperLocations,配置的是這個路徑下的所有映射文件,但是我沒寫的沒有在該路徑下,
所有mybatis沒有加載我得映射文件,所有就找不到映射文件對應的id。
這次又是另外一個問題
mbatis加載了你的映射文件,但是呢我的id多了個空格,看了好多遍都沒發現多了個空格,可能是背景黑色的緣故,強行解釋下
哈哈,半個小時沒發現問題所在
先看錯誤信息
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for ProjectStaffDomain_logicDeleteByProjectId
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for ProjectStaffDomain_logicDeleteByProjectId
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371)
at com.sun.proxy.$Proxy28.update(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:254)
at com.hzhy.framework.core.dao.MybatisGenericDao.update(MybatisGenericDao.java:199)
意思是:沒有sql文件中沒有定義id為“xxx",一般有以下幾種情況
1.mybatis的映射文件的命令空間與接口的全限定名不一致;
2有可能mybatis的映射文件名字與接口的類名字不一致;
3.還有一種情況就是接口聲明的方法在映射文件里面沒有。
我的sql
<!-- 邏輯刪除通過 project_id--> <update id=" ProjectStaffDomain_logicDeleteByProjectId" parameterType="com.hzhy.manager.project.domain.ProjectStaffDomain"> update project_staff set sts='N',modify_time = now(),modify_user_id = #{modify_user_id} where project_id = #{project_id} </update>
但我一直沒發現我的id前面多了個空格,各種百度,結果都沒發現這個問題,嗚嗚嗚~ ~ ~ ~
總結:編程不需要眼力,哈哈