使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
我正确地在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>
Run Code Online (Sandbox Code Playgroud)
但是来自MyBatis的问题是MyBatis找不到我的java enum类,因为它是在另一个接口中定义的
public interface User
{
public enum Status
{
A, B, C
}
...
}
Run Code Online (Sandbox Code Playgroud)
当我在一个单独的文件中定义这个枚举类时,它没有问题,但我不喜欢改变我的设计(因为有限制?),我搜索了解为什么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
Run Code Online (Sandbox Code Playgroud)
Jug*_*ugu 28
最后,我通过在XML配置文件中编写内部枚举的名称来解决它,就像在jar中关联的编译文件名一样,即$在封装和内部类之间添加一个美元.
com.sample.User$Status
它似乎是MyBatis中的错误或限制..
| 归档时间: |
|
| 查看次数: |
7374 次 |
| 最近记录: |