MyBatis 在解析 SQL Mapper Configuration handlers 时不解析 Inner class
MyBatis does not resolve Inner class when parsing SQL Mapper Configuration handlers
使用 MyBatis 3.2.8,我试图将枚举类型(状态)映射到 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 枚举 class 因为它是在另一个接口中定义的
public interface User
{
public enum Status
{
A, B, C
}
...
}
当我在一个单独的文件中定义这个枚举 class 时,它没有问题,但我不想改变我的设计(因为限制?),我搜索以了解为什么 MyBatis在这种情况下找不到 class?有办法解决这个问题吗?
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
最后我通过在 XML 配置文件中写入内部枚举的名称来解决它,就像它在 jar 中的相关编译文件名一样,即在信封之间添加一个美元 $
和内部 class.
com.sample.User$Status
在 MyBatis 中出现错误或限制..
使用 MyBatis 3.2.8,我试图将枚举类型(状态)映射到 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 枚举 class 因为它是在另一个接口中定义的
public interface User
{
public enum Status
{
A, B, C
}
...
}
当我在一个单独的文件中定义这个枚举 class 时,它没有问题,但我不想改变我的设计(因为限制?),我搜索以了解为什么 MyBatis在这种情况下找不到 class?有办法解决这个问题吗?
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
最后我通过在 XML 配置文件中写入内部枚举的名称来解决它,就像它在 jar 中的相关编译文件名一样,即在信封之间添加一个美元 $
和内部 class.
com.sample.User$Status
在 MyBatis 中出现错误或限制..