第二次编辑:
离大谱就,出现这个错的根本原因是我的加载映射文件写错了包的位置,本来加载映射已经在sqlMapConfig.xml文件中配置完了,但因为我配置的路径错误,导致我下一个查询时也出了很多错误,检查了一个早上,都没找到错误在哪,刚刚不知道咋又看了一遍,突然发现包路径错误
之前写的包一直是com.mapper,但是基本的查询也能查询出来,是因为之前其他模块内都写了,直到使用复杂的就查不出来了,一直找不到原因
劝诫:一定要看对自己的包位置!!!
报错内容:
org.apache.ibatis.binding.BindingException: Type interface com.dao.UserMapper 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:779) at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:291) at com.test.MapperTest.before(MapperTest.java:32)
项目目录:
UserMapper接口:
public interface UserMapper { @Insert("insert into user values (#{id},#{username},#{password},#{birthday})") public void save(User user); @Update("update user set username = #{username} ,password = #{password} where id = #{id}") public void update(User user); @Delete("delete from user where id = #{id}") public void delete(int id); @Select("select * from user where id = #{id}") public User findById(int id); @Select("select * from user") public List<User> findAll(); }
测试代码:
public class MapperTest { private UserMapper mapper = null; private SqlSession sqlSession = null; @Before public void before() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); // sqlSessionFactory.getConfiguration().addMapper(UserMapper.class); sqlSession = sqlSessionFactory.openSession(true); mapper = sqlSession.getMapper(UserMapper.class); } @Test public void save() throws IOException { User user = new User(); user.setUsername("nihao"); user.setPassword("123456"); mapper.save(user); } @Test public void update(){ User user = new User(); user.setId(1); user.setUsername("zhanzhan"); user.setPassword("fhg"); mapper.update(user); } @Test public void delete(){ mapper.delete(2); } @Test public void findById(){ User user = mapper.findById(1); System.out.println(user); } @Test public void findAll(){ List<User> userList = mapper.findAll(); for (User user : userList) { System.out.println(user); } } @After public void after(){ sqlSession.close(); } }
报错原因:
写完接口类之后没有让mybatis注册这个类
解决办法:
在生成sqlSession工厂之后加入如下代码:
sqlSessionFactory.getConfiguration().addMapper(UserMapper.class);