首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析SQL Mapper配置处理程序时,MyBatis不解析内部类

解析SQL Mapper配置处理程序时,MyBatis不解析内部类
EN

Stack Overflow用户
提问于 2015-03-04 21:36:37
回答 1查看 9.3K关注 0票数 13

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

代码语言:javascript
复制
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...)示例:

代码语言:javascript
复制
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枚举类,因为它是在另一个接口中定义的。

代码语言:javascript
复制
public interface User
{
  public enum Status
  {
    A, B, C
  }
  ...
}

当我在一个单独的文件中定义这个枚举类时,它可以正常工作,但我不喜欢更改我的设计(因为限制?),我搜索以了解为什么MyBatis在这种情况下找不到这个类?这是一种解决这个问题的方法吗?

MyBatis无法生成SqlSession。在执行一个简单的测试来查找用户时,我得到了以下异常

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-07 01:53:22

最后,我在可扩展标记语言配置文件中写入了内部枚举的名称,就像它在jar中关联的编译文件名一样,即在封装的类和内部类之间添加一个美元$,从而解决了这个问题。

com.sample.User$Status

它似乎是MyBatis中的错误或限制。

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28855867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档