JHarnach
JHarnach

Reputation: 4034

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

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

Upvotes: 0

Views: 9360

Answers (3)

Stefan Michev
Stefan Michev

Reputation: 5093

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

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

Upvotes: 0

inter18099
inter18099

Reputation: 87

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.

Upvotes: 0

JHarnach
JHarnach

Reputation: 4034

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.

Upvotes: 1

Related Questions