" MapperRegistry"不知道Type类;在MyBatis

时间:2014-11-12 23:20:20

标签: mybatis ibatis

我的问题

我收到错误Type class myPackage.MyClass is not known to the MapperRegistry

我成功获得了一个会话,并且在调试后我可以看到它看起来配置正确,因此接口关联似乎正在工作;因此,我确信此错误与堆栈溢出建议的Type interface is not known...问题不同。

我是myBatis的新手,但是从文档中我了解到,以下是使resultType自动映射生效所需的全部内容。

更新:当使用xml文件而不是按类映射映射器资源时也会发生这种情况。

我的映射器

public interface MyClassMapper{
    MyClass getMyClass(Integer id);
}

我的模特

public class MyClass{
    private String itemValue;

    public String getItemValue() {
        return itemValue;
    }

    public void setItemValue(String itemValue) {
        this.itemValue = itemValue;
    }
}

我的Sql Map

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="myPackage.orm.sqlMap.MyClassMapper" >

    <select id="getMyClass" resultType="myPackage.MyClass" >
     select itemValue 
     from SOME_TABLE 
     WHERE id = #{id}
    </select> 
</mapper>

我的mybatis-config.xml

 ...
 <mappers>
      <mapper class="myPackage.MyClass" />
 </mappers>
 ...

3 个答案:

答案 0 :(得分:0)

修正:

    public MyClass getMyClassValue(Integer id) throws Exception{
         SqlSession session = MyBatisSessionFactory.openSession();
         MyClassMapper mapper = (MyClassMapper) session.getMapper(MyClass.class);
         return mapper.getMyClass(id);
     }

以下是我用来执行查询的代码,发现我在mapper注册表中通过模型类名称而不是mapper接口名称查找映射器。现在工作得很好。

答案 1 :(得分:0)

在mapper.xml文件中,mapper的命名空间应该是mapper接口的路径。

例如:

<mapper namespace="com.mapper.LineMapper">
<select id="selectLine" resultType="com.jiaotong114.jiaotong.beans.Line">
select * from bus_line where id = #{id}
</select>
</mapper>

你的mapper接口应该在com.mapper包中,它的名字是LineMapper。

希望有所帮助。

答案 2 :(得分:0)

我通过将映射器XML添加到mybatis xml配置文件

来解决了这个问题
  <mappers>    
    <mapper resource="com/java/Mapper.xml"/>
  </mappers>