今天按照视频来一步一步敲完之后,发现程序没有办法识别注解文件在哪个位置
但是我在mybatis核心配置文件中,已经说明了接口文件所在位置了,困扰了很久,最后终于找到答案;
<!-- 指定接口所在位置-->
<mappers>
<package name="com.dao.UserDao"/>
</mappers>
在核心配置文件中已经声明;
再看测试类中的启动代码
public static void main(String[] args) throws IOException {
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//非常需要注意下面这一行代码,用来注册注解文件
// factory.getConfiguration().addMapper(UserDao.class);
SqlSession sqlSession = factory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> users = userDao.findAll();
for ( User user : users){
System.out.println(user);
}
sqlSession.close();
inputStream.close();
}
这是原来的启动文件,使用它就会爆出错误:
log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.apache.ibatis.binding.BindingException: Type interface com.dao.UserDao 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.MybatisTest.main(MybatisTest.java:29)
Process finished with exit code 1
原来必须要添加上这一行代码:!!!!!!!!!
factory.getConfiguration().addMapper(UserDao.class);
用来注册注解文件
即:
public static void main(String[] args) throws IOException {
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
factory.getConfiguration().addMapper(UserDao.class);
SqlSession sqlSession = factory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> users = userDao.findAll();
for ( User user : users){
System.out.println(user);
}
sqlSession.close();
inputStream.close();
}
最终成功运行:
log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
log4j:WARN Please initialize the log4j system properly.
User{id=41, username='老王', birthday=Tue Feb 27 17:47:08 CST 2018, sex='男', address='北京'}
User{id=42, username='小二王', birthday=Fri Mar 02 15:09:37 CST 2018, sex='女', address='北京金燕龙'}
User{id=43, username='小san王', birthday=Sun Mar 04 11:34:34 CST 2018, sex='女', address='北京金燕龙'}
User{id=45, username='传智播客', birthday=Sun Mar 04 12:04:06 CST 2018, sex='男', address='北京金燕龙'}
User{id=46, username='老王', birthday=Wed Mar 07 17:37:26 CST 2018, sex='男', address='北京'}
User{id=48, username='小马宝莉', birthday=Thu Mar 08 11:44:00 CST 2018, sex='女', address='北京修正'}
User{id=54, username='nananna', birthday=Sat Aug 21 18:29:06 CST 2021, sex='n', address='666'}
User{id=55, username='nananna', birthday=Sun Aug 29 12:40:45 CST 2021, sex='n', address='666'}
Process finished with exit code 0
在使用 MyBatis 注解时遇到错误:找不到映射 Type interface com.dao.UserDao is not known to the MapperRegistry。尽管已在核心配置文件中指定接口路径,问题依旧存在。解决方案是在测试类启动代码中添加 factory.getConfiguration().addMapper(UserDao.class) 这一行,以注册注解文件,从而成功运行程序。
3099

被折叠的 条评论
为什么被折叠?



