今天在学习mybatis的注解,遇到如下报错信息:
Exception in thread "main" org.apache.ibatis.binding.BindingException: Type interface com.hbk.map.StudentMapper 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:675)
at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:250)
at com.hbk.test.StudentTest.main(StudentTest.java:21)
网上查了相关资料,找到了解决办法,知道了Mybatis注解一定要注册自己写的接口类。
注解接口类:
package com.hbk.map;
import org.apache.ibatis.annotations.Delete;
public interface StudentMapper{
@Delete("delete from student where id=#{id}")
public void deleteById(int id);
}
测试类:
package com.hbk.test;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.hbk.map.StudentMapper;
public class StudentTest {
public static void main(String[] args) {
String resource = "com/hbk/map/mybatis-config.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 加上了下面这句,解决了问题
sqlSessionFactory.getConfiguration().addMapper(StudentMapper.class);
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
studentMapper.deleteById(1);
sqlSession.commit();
sqlSession.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
测试结果: