有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java扩展MyBatis映射器接口可能导致异常

为了利用Java 8 lambda函数,我扩展了MyBatis映射器,如下所示:

public interface MyTableMapper extends IBatchInsertUpdateMapper<MyTable> {...}
public interface IBatchInsertUpdateMapper<T> extends IBatchInsertMapper<T>, IBatchUpdateMapper<T> {}
public interface IBatchInsertMapper<T> { public int insert(T record); }
public interface IBatchUpdateMapper<T> { public int updateByPrimaryKey(T record); }

有趣的是,当我在Tomcat7下运行代码时,Eclipsed编译代码运行良好,但使用Maven编译代码,我得到:

java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.xxx.mybatis.mapper.MyTableMapper.selectByPrimaryKey
     at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:660)
     at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:495)
     at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:488)
     at org.apache.ibatis.binding.MapperMethod.setupCommandType(MapperMethod.java:236)
     at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:71)
     at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:39)
     at com.sun.proxy.$Proxy52.selectByPrimaryKey(Unknown Source)
     ...

ibatis似乎可以找到insert()和updateByPrimaryKey()方法,但在MyTableMapper接口中找不到其他方法

知道为什么吗

仅供参考,我正在使用:

  • jdk1。8.0_66
  • 构建助手maven插件:1.7
  • maven enforcer插件:1.3.1

Maven正在使用1.8.0_66进行编译:

Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-14T17:37:52+00:00)
Maven home: C:\Users\Me\workspaceLunaSr2\Dev\EMBEDDED
Java version: 1.8.0_66, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_66\jre
Default locale: en_GB, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

类似地,Eclipse报告我正在使用1.8.0_66:

java.endorsed.dirs=C:\Program Files\Java\jre1.8.0_66\lib\endorsed
java.ext.dirs=C:\Program Files\Java\jre1.8.0_66\lib\ext;C:\Windows\Sun\Java\lib\ext
java.home=C:\Program Files\Java\jre1.8.0_66

如果您想知道,这一切背后的原因是因为我发现MyBatis批量插入使用

<foreach>...</foreach>

效率很低。这里提供了一种更有效的方法:MyBatis Batch Insert/Update For Oracle,在lambda函数的帮助下,我只需要编写一个方法来执行批插入/更新/等等


共 (0) 个答案