Спросите о весна4.3.11 + mybatis 3.2 8 <TypeHandler> - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть вопрос.Спасибо за ваше понимание того, что английский неопытен.

У меня проблема с моим веб-проектом, использующим mybatis в среде Spring Web MVC.

Проблема заключается в следующем.В моделировании БД значение флага задается как VARCHAR2.В VO.java примитивный тип задается как логическое значение.Однако во время операции выбора произошла ошибка.

Итак, когда я создал свой 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.'to required type' org.apache.ibatis.type.TypeHandler 'для свойства' typeHandlers [0] ': не найдено подходящих редакторов или стратегии преобразования

Не могу запустить сервер с ошибкой .............. Мне нужен твой совет.

1 Ответ

0 голосов
/ 14 декабря 2018

Проблема в том, что вы указали typeHandlers в SqlSessionFactoryBean неправильно.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 не может создать экземпляр компонента, потому что он не может преобразовать строку в TypeHandler.

...