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) 个答案