第二次編輯:
離大譜就,出現這個錯的根本原因是我的加載映射文件寫錯了包的位置,本來加載映射已經在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);