问题描述:写了一个BillMapper.xml文件,相应的写了一个dao层操作接口BillMapper.java接口,全部写完ok,在测试类中测试,运行后console窗口报以下异常:
org.apache.ibatis.binding.BindingException:
Type interface com.testmybatis.dao.bill.BillMapper is not known to the
MapperRegistry.
at
org.apache.ibatis.binding.MapperRegistry.getMapper(MapperRegistry.java:42)
at
org.apache.ibatis.session.Configuration.getMapper(Configuration.java:639)
at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:218)
at com.testmybatis.test.BillTest.test3(BillTest.java:75)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
异常的字面意思是com.testmybatis.dao.bill类型接口。MapperRegistry不认识BillMapper。通过字面意思觉得应该是mapper.xml文件未被配置,遂去mybatis-config.xml下去查看<mappers>元素中的mapper映射
<mappers>
<mapper resource="com/testmybatis/dao/UserMapper.xml"></mapper>
<mapper resource="com/testmybatis/dao/provider/ProviderMapper.xml"></mapper>
<mapper resource="com/testmybatis/dao/bill/BillMapper.xml"></mapper>
</mappers>
,发现映射路径无误,正纳闷问题出在哪里呢,遂灵机一动,即然映射路径没错,会不会是BillMapper.xml的namespace命名空间出错了呢?果然:
<mapper namespace="com.testmybatis.bill.BillMapper">
由于之前加过一层包,导致了namespace配置的和包的路径不一致,改为正确的路径后
运行正常
<mapper namespace="com.testmybatis.dao.bill.BillMapper">