解析SQL Mapper配置处理程序时,MyBatis不解析Inner类

时间:2015-03-04 13:36:37

标签: mybatis

使用MyBatis 3.2.8,我正在尝试将枚举类型(Status)映射到jdbc VARCHAR类型(只能使用我的实体bean中的枚举)。所以我定义了TypeHandler UserStatusHandler

import com.sample.User.Status;
import org.apache.ibatis.type.EnumTypeHandler;

public class UserStatusHandler extends EnumTypeHandler<Status>
{
  public UserStatusHandler(Class<Status> type)
  {
    super(type);
  }
}

我在xml配置文件和UserDao.xml中正确声明了处理程序(将属性Status映射到resultMap中的VARCHAR ...) 样本:

In the XML config file:
<typeHandlers>
    <typeHandler handler="com.sample.dao.UserStatusHandler" javaType="com.sample.User.Status"/>
</typeHandlers>

In the DAO mapper XML file:
<resultMap id="UserResultMap" type="User">
  <id property="id" column="ID" javaType="long"/>
  <result property="status" column="STATUS" typeHandler="com.sample.dao.UserStatusHandler" javaType="com.sample.User.Status"/>
  xxxxx
</resultMap>

但MyBatis传入的问题是MyBatis找不到我的java enum类,因为它是在另一个接口中定义的

public interface User
{
  public enum Status
  {
    A, B, C
  }
  ...
}

当我在一个单独的文件中定义这个枚举类时,它没有问题,但是我不喜欢改变我的设计(因为有限制?),我搜索了解为什么MyBatis找不到这个类案件 ?这是解决这个问题的方法吗?

MyBatis无法构建SqlSession。在执行简单测试以查找用户时,我得到以下异常

Cause: org.apache.ibatis.builder.BuilderException: 
Error parsing SQL Mapper Configuration. Cause:  
org.apache.ibatis.builder.BuilderException: Error resolving class. 
Cause:     org.apache.ibatis.type.TypeException: Could not resolve type 
alias 'com.sample.User.Status'.  
Cause: java.lang.ClassNotFoundException: Cannot find class: 
com.sample.User.Status

1 个答案:

答案 0 :(得分:27)

最后,我通过在XML配置文件中编写内部枚举的名称来解决它,就像在jar中关联的编译文件名一样,即在封装内层和内层类之间添加一个美元$。 / p>

com.sample.User$Status

MyBatis中出现了错误或限制..