"Type class is not known to the MapperRegistry" in MyBatis

9k views Asked by At

My Problem

I'm getting the error Type class myPackage.MyClass is not known to the MapperRegistry.

I successfully acquired a session, and upon debugging I can see that it otherwise appears to be configured correctly so the interface association seems to be working; therefor I'm confident this error is distinct from the stack-overflow-suggested Type interface is not known... question.

I'm new to myBatis but from the documentation I understood that the following was all that was required to get resultType auto-mapping to work.

Update: This also happens when mapping the mapper resources by xml file instead of by class.

My Mapper

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

My Model

public class MyClass{
    private String itemValue;

    public String getItemValue() {
        return itemValue;
    }

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

My 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>

My mybatis-config.xml

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

There are 3 answers

0
JHarnach On BEST ANSWER

Fixed:

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

Here is the code I was using to execute the query, discovered that I was looking up the mapper in the mapper registry by the model class name, rather than the mapper interface name. Works just fine now.

0
Stefan Michev On

I solved this issue by adding the mapper XML to the mybatis xml configuration file

  <mappers>    
    <mapper resource="com/java/Mapper.xml"/>
  </mappers> 
0
inter18099 On

In your mapper.xml file mapper's namespace should be the path to the mapper interface.

for example:

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

your mapper interface should be in com.mapper package and the name of it is LineMapper.

hope help.