Mybatis的Mapper文件报错:Method 'insert' not found or there is an overload method (same name with differe

版权声明:尊重原作者劳动,转载请标明出处 https://blog.csdn.net/MedusaSTears/article/details/80904781

报错内容:

Method 'insert' not found or there is
 an overload method (same name with different parameters) in 
 mapper interface dao.StudentDao

情景回顾:

  1. 所有代码均正常
  2. 所有配置文件正常
  3. 只有其中一个StudentMapper.xml里面的配置有黄色感叹号提示,提示内容如上

解决方法:(在最下面)

  1. 重新建立动态web项目
  2. 按照包的布局重新建立项目
  3. 把原项目里面的代码,用记事本打开之后,粘贴到你新建的文件里面
  4. 第三步千万不要复制旧项目文件,粘贴到新项目里
  5. 基本上得以解决

原因分析(这是一种情况):

基本上很少有人遇到这个问题吧,不过还是索性写下来,如果正好有需要,或者自己做个备份

事情的经过是,我在配置Mapper文件之前,先写的configuration.xml里面,导入的db.properties这个文件,

一般来说Eclipse里面的properties文件编码都是ISO....编码的,想输入中文注释不太可能,所以我就改成了UTF-8编码

而且,我索性把Eclipse里面所有打开文件的编码都改成了UTF-8

而改的时候,我的项目进行到了一半,也就是中间出现了"混码"的情况

这也是后来为什么导致Mapper文件找不到java代码里的insert的原因了

附上修改所有Eclipse新建文件时的编码设置:(中文版Eclipse,英文版请自行对照翻译即可)

窗口→首选项→常规→内容类型→右侧上面的折叠框里,挨个选择→在下面"缺省编码"的位置填写 utf-8 即可→右下角 OK确定


项目控制的时候,编码也是个很大的问题啊,特此记录


2018.7.3 22.00.50


——————————————————————————————————


2018.07.05更新

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for insert
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for insert
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:200)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:180)
	at dao.StudentDao.insert(StudentDao.java:41)
	at test.Mains.main(Mains.java:9)
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for insert
	at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:875)
	at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:708)
	at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:701)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
	... 4 more

发现又出现新的问题

刚开始以为是编码的问题(好像还真是编码的问题)

发了这篇文章之后,我心血来潮,把文件类型编码都改成了utf-8

结果又出现了片头的问题

所以按照流程新建项目,重跑一遍

结果有意思了,出现了如上这个提示


千回百转发现问题出现在mapper.xml文件指向上

        <mappers>
		<!-- 自动扫描该包中的所有映射文件(上下随便选一个)-->
		<package name="com.mappers" />
		<mapper resource="com/mappers/StudentMapper.xml"/>
	</mappers>

如果用resource指向

<mapper resource="com/mappers/StudentMapper.xml"/>

可以正常运行


如果用package name

<package name="com.mappers" />
那么必然报错


言外之意就是没有解析到mapper里面的xml文件

log4j记录的是:

DEBUG - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG - Class not found: org.jboss.vfs.VFS
DEBUG - JBoss 6 VFS API is not available in this environment.
DEBUG - Class not found: org.jboss.vfs.VirtualFile
DEBUG - VFS implementation org.apache.ibatis.io.JBoss6VFS is not valid in this environment.
DEBUG - Using VFS adapter org.apache.ibatis.io.DefaultVFS
DEBUG - Find JAR URL: file:/D:/UltimateEclipse/WorkSpace/2018.06.25FixMybatis/build/classes/po
DEBUG - Not a JAR: file:/D:/UltimateEclipse/WorkSpace/2018.06.25FixMybatis/build/classes/po
DEBUG - Reader entry: Student.class
DEBUG - Listing file:/D:/UltimateEclipse/WorkSpace/2018.06.25FixMybatis/build/classes/po
DEBUG - Find JAR URL: file:/D:/UltimateEclipse/WorkSpace/2018.06.25FixMybatis/build/classes/po/Student.class
DEBUG - Not a JAR: file:/D:/UltimateEclipse/WorkSpace/2018.06.25FixMybatis/build/classes/po/Student.class
DEBUG - Reader entry: ����

暂时没有找到问题原因和解决办法

——————————————————————————————————

2018.07.12补充:

其实出现问题的原因,不仅仅是上文提到的那种情况

如果出现本文标题的警告错误,那么很可能你的Mybatis的configuration.xml文件里

的mapper是用的扫描包的方式<package name="com.mappers" />

而用<mapper resource="com/mappers/StudentMapper.xml"/>这种方式不会出错


为什么?写本文的时候我没有详细叙述

我在刚出现这个问题的时候,用的是原生sqlSession方式,也就是说,在目录结构上

我只有 configuration.xml StudentMapper.xml 而并没有StudentMapper.java这个接口类

所以在扫描包的时候,没有扫描到StudentMapper.java,也就没有对应的insert方法继而报错


而且,如果想在configuration.xml的里面用

        <mappers>
		<!-- 自动扫描该包中的所有映射文件(上下随便选一个)-->
		<package name="com.mappers" />
	</mappers>

这种方式的话,前提必须是用接口Mapper的方式,即:

必须有 StudentMapper.xml

和       StudentMapper.java

这两个文件








猜你喜欢

转载自blog.csdn.net/MedusaSTears/article/details/80904781