为了账号安全,请及时绑定邮箱和手机立即绑定

maven工程写了一个mybatis访问数据库。打成jar后,反射调用但是报mapper未注册错误

maven工程写了一个mybatis访问数据库。打成jar后,反射调用但是报mapper未注册错误

慕尼黑8549860 2019-02-19 17:23:20
用mybatis搞了一个访问数据库的maven工程,然后打成jar包,在另外一个工程上用反射调用的方式访问其中的方法。在myeclipse上没有问题可以访问到,但是在idea上出现问题。 public class Test1 { public static void main(String[] args) throws Exception { File file=new File("D:/class/ML/backer.jar"); URL url=file.toURI().toURL(); ClassLoader loader=new URLClassLoader(new URL[]{url}); try{ Class<?> cls=loader.loadClass("com.backer.controller.DataSource"); Object obj=cls.newInstance(); Method method=cls.getMethod("getAllData", String.class); ResponseBean rb=(ResponseBean) method.invoke(obj, new String("admin")); System.out.println(rb.getRetMap()); }catch(Exception e){ } } } 此代码在myeclipse上运行是没有错误的然后放在idea上运行则出现以下错误 Caused by: org.apache.ibatis.binding.BindingException: Type interface com.sunyard.backer.dao.AlgorithmDataMapper is not known to the MapperRegistry. at org.apache.ibatis.binding.MapperRegistry.getMapper(MapperRegistry.java:47) at org.apache.ibatis.session.Configuration.getMapper(Configuration.java:745) at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:292) at com.backer.controller.DataSource.getAllData(DataSource.java:31) ... 5 more 说我写的mapper没有被注册到mybatis里。这个应该不是代码的问题,网上有提到idea和myeclipse的某些差异,应该是某些开发工具的设置?另外jar是在myeclipse中开发的,也是在myeclipse中打的包。请教应该如何设置,或者有什么办法?
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

好气,一层层的调试终于发现问题。最终的错误竟然和一开始描述的问题截然不同。。。
最开始以为是ide的问题,于是分别在myeclipse和idea里用了同样的代码(分别用反射的方法和导包buildpath的方法),发现导过包后反射的方法也可以用了,才发现原来不是idea的问题。
这样酒吧问题锁定在mapper文件未注册上,然后在网上以该问题为关键词搜索。网上结果是说可能文件大小写名称不一致,位置不对等等。可是在myeclispe中是可以运行的,于是再次把范围缩小到jar包里。
用压缩工具打开jar包,果然发现映射的XML文件没有,最后问题缩小到打包环节上。
上网搜索maven打包,发现如果需要保留配置文件等内容需要在pom中配置的。(其实我已经配置过保留resources下的mybatisconfig.xml但是竟然忘记了映射的xml也是需要配置的。。。)
最后终于添加好配置后,运行出结果。
一波三折。。。

查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 1023 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号