问一下spring4.3.11 + mybatis 3.2 8 <TypeHandler>
Ask about spring4.3.11 + mybatis 3.2 8 <TypeHandler>
我有一个问题。英语不熟练,谢谢理解
我在 spring web mvc 环境下使用 mybatis 的 web 项目有问题。
问题是这样的。在 DB 建模中,标志值以 VARCHAR2 形式给出。在 VO.java 中,原始类型作为布尔值给出。但是,在 select 操作期间出现错误。
因此,当我创建 SqlSessionFactoryBean 时,我可以通过将 typeHandlers 传递给 属性.
来改进它
所以当我尝试编码时
YesNoBooleanTypeHandler.java
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.annotation.HandlesTypes;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
@MappedJdbcTypes(value = JdbcType.VARCHAR)
@MappedTypes(Boolean.class)
public class YesNoBooleanTypeHandler extends BaseTypeHandler<Boolean> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType)
throws SQLException {
ps.setString(i, parameter ? "true" : "false");
}
@Override
public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
return rs.getString(columnName) != null && "true".equalsIgnoreCase(rs.getString(columnName));
}
@Override
public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return rs.getString(columnIndex) != null && "true".equalsIgnoreCase(rs.getString(columnIndex));
}
@Override
public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return cs.getString(columnIndex) != null && "true".equalsIgnoreCase(cs.getString(columnIndex));
}
}
SqlSessionFactoryBean 设置。
<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="mapperLocations" value="classpath:edu/kosta/kdc/mapper/*Mapper.xml" />
<beans:property name="typeAliasesPackage" value="edu.kosta.kdc.model.dto" />
<beans:property name="typeHandlers" value="edu.kosta.kdc.util.YesNoBooleanTypeHandler"/>
</beans:bean>
ResultMap 配置
<result column="MEMBER_ISWITHDRAWAL" property="memberIsWithdrawal" typeHandler="edu.kosta.kdc.util.YesNoBooleanTypeHandler" />
我是这样设置的
然后
嵌套异常是java.lang.IllegalStateException:无法将类型'java.lang.String'的值转换为属性所需的类型'org.apache.ibatis.type.TypeHandler' 'typeHandlers [0]':没有匹配的编辑器或找到转化策略
我无法运行服务器出现错误......
我需要你的建议。
问题是您在 SqlSessionFactoryBean
中指定的 typeHandlers
不正确。 typeHandlers
是一个 TypeHandler
数组,但您提供了一个 String
值。配置应该是这样的:
<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="mapperLocations" value="classpath:edu/kosta/kdc/mapper/*Mapper.xml" />
<beans:property name="typeAliasesPackage" value="edu.kosta.kdc.model.dto" />
<beans:property name="typeHandlers">
<array>
<beans:bean class="edu.kosta.kdc.util.YesNoBooleanTypeHandler" />
</array>
</beans:property>
</beans:bean>
Spring 无法实例化 bean,因为它无法将字符串转换为 TypeHandler
.
我有一个问题。英语不熟练,谢谢理解
我在 spring web mvc 环境下使用 mybatis 的 web 项目有问题。
问题是这样的。在 DB 建模中,标志值以 VARCHAR2 形式给出。在 VO.java 中,原始类型作为布尔值给出。但是,在 select 操作期间出现错误。
因此,当我创建 SqlSessionFactoryBean 时,我可以通过将 typeHandlers 传递给 属性.
来改进它所以当我尝试编码时
YesNoBooleanTypeHandler.java
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.annotation.HandlesTypes;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
@MappedJdbcTypes(value = JdbcType.VARCHAR)
@MappedTypes(Boolean.class)
public class YesNoBooleanTypeHandler extends BaseTypeHandler<Boolean> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType)
throws SQLException {
ps.setString(i, parameter ? "true" : "false");
}
@Override
public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
return rs.getString(columnName) != null && "true".equalsIgnoreCase(rs.getString(columnName));
}
@Override
public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return rs.getString(columnIndex) != null && "true".equalsIgnoreCase(rs.getString(columnIndex));
}
@Override
public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return cs.getString(columnIndex) != null && "true".equalsIgnoreCase(cs.getString(columnIndex));
}
}
SqlSessionFactoryBean 设置。
<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="mapperLocations" value="classpath:edu/kosta/kdc/mapper/*Mapper.xml" />
<beans:property name="typeAliasesPackage" value="edu.kosta.kdc.model.dto" />
<beans:property name="typeHandlers" value="edu.kosta.kdc.util.YesNoBooleanTypeHandler"/>
</beans:bean>
ResultMap 配置
<result column="MEMBER_ISWITHDRAWAL" property="memberIsWithdrawal" typeHandler="edu.kosta.kdc.util.YesNoBooleanTypeHandler" />
我是这样设置的
然后
嵌套异常是java.lang.IllegalStateException:无法将类型'java.lang.String'的值转换为属性所需的类型'org.apache.ibatis.type.TypeHandler' 'typeHandlers [0]':没有匹配的编辑器或找到转化策略
我无法运行服务器出现错误...... 我需要你的建议。
问题是您在 SqlSessionFactoryBean
中指定的 typeHandlers
不正确。 typeHandlers
是一个 TypeHandler
数组,但您提供了一个 String
值。配置应该是这样的:
<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="mapperLocations" value="classpath:edu/kosta/kdc/mapper/*Mapper.xml" />
<beans:property name="typeAliasesPackage" value="edu.kosta.kdc.model.dto" />
<beans:property name="typeHandlers">
<array>
<beans:bean class="edu.kosta.kdc.util.YesNoBooleanTypeHandler" />
</array>
</beans:property>
</beans:bean>
Spring 无法实例化 bean,因为它无法将字符串转换为 TypeHandler
.