使用myBatis 3映射嵌套的Oracle CURSOR(ResultSet)?

时间:2017-06-20 08:26:01

标签: java oracle mybatis spring-mybatis

社区问候我在返回与过程关联的游标时遇到问题。

PROCEDURE USP_SEL_TAB_ANIOS(po_Lr_Recordset OUT SYS_REFCURSOR) IS
    BEGIN
         SELECT A.COD_ANIO , A.DESCRIPCION FROM BAH_MAE_ANIO A ;
    END ;

包中包含两个类:

public class ItemBean implements Serializable {

    private Integer icodigo;
    private String descripcion;
    private String descripcionCorta;

    // get and set

}

-

public class ResultItemBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private List<ItemBean> itemBeans;

    // get and set

}

映射

public interface ControlCalidadMapper {

    public abstract List<ItemBean> listarAnios(ItemBean item) throws Exception;

}

ControlCalidadMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pe.com.sigbah.mapper.gestion_almacenes.ControlCalidadMapper">

    <resultMap id="mapAnio" type="pe.com.sigbah.common.bean.ItemBean">
        <result property="descripcionCorta" column="COD_ANIO" />        
        <result property="descripcion" column="DESCRIPCION" />
    </resultMap>

    <parameterMap id="getAnio" type="pe.com.sigbah.common.bean.ResultItemBean">
<!--        <parameter property="start_from" jdbcType="INTEGER" mode="IN"  /> -->
        <parameter property="itemBeans" jdbcType="CURSOR" mode="OUT" resultMap="mapAnio" />
    </parameterMap>

    <select id="listarAnios" parameterMap="getAnio" statementType="CALLABLE">
        {call BAH_PKG_GENERAL.USP_SEL_TAB_ANIOS(?)}
    </select>

</mapper>

服务

@Service
public class ControlCalidadServiceImpl extends GenericServiceImpl implements ControlCalidadService {

    private static final long serialVersionUID = 1L;

    @Autowired
    private ControlCalidadMapper controlCalidadMapper;

    /* (non-Javadoc)
     * @see pe.com.sigbah.service.gestion_almacenes.ControlCalidadService#listarAnios(pe.com.sigbah.common.bean.ItemBean)
     */
    @Override
    public List<ItemBean> listarAnios(ItemBean item) throws Exception {
        return controlCalidadMapper.listarAnios(item);
    }

}

错误:

DEBUG: pe.com.sigbah.mapper.gestion_almacenes.ControlCalidadMapper.listarAnios - ooo Using Connection [jdbc:oracle:thin:@200.48.54.22:1521:INTEGRAL, UserName=SINPAD, Oracle JDBC driver]
DEBUG: pe.com.sigbah.mapper.gestion_almacenes.ControlCalidadMapper.listarAnios - ==>  Preparing: {call BAH_PKG_GENERAL.USP_SEL_TAB_ANIOS(?)} 
DEBUG: pe.com.sigbah.mapper.gestion_almacenes.ControlCalidadMapper.listarAnios - ==> Parameters: 
ERROR: pe.com.sigbah.web.controller.gestion_almacenes.ControlCalidadController - nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'itemBeans' of 'class pe.com.sigbah.common.bean.ItemBean' with value '[ItemBean [icodigo=null, descripcion=Seleccione, descripcionCorta=%], ItemBean [icodigo=null, descripcion=Año del buen servicio al ciudadano, descripcionCorta=2017], ItemBean [icodigo=null, descripcion=null, descripcionCorta=2018], ItemBean [icodigo=null, descripcion=null, descripcionCorta=2019], ItemBean [icodigo=null, descripcion=null, descripcionCorta=2020]]' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'itemBeans' in 'class pe.com.sigbah.common.bean.ItemBean'
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'itemBeans' of 'class pe.com.sigbah.common.bean.ItemBean' with value '[ItemBean [icodigo=null, descripcion=Seleccione, descripcionCorta=%], ItemBean [icodigo=null, descripcion=Año del buen servicio al ciudadano, descripcionCorta=2017], ItemBean [icodigo=null, descripcion=null, descripcionCorta=2018], ItemBean [icodigo=null, descripcion=null, descripcionCorta=2019], ItemBean [icodigo=null, descripcion=null, descripcionCorta=2020]]' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'itemBeans' in 'class pe.com.sigbah.common.bean.ItemBean'

我希望你能帮助我使用mapper 我希望你可以帮我用映射器 我希望你可以帮我使用mapper

1 个答案:

答案 0 :(得分:0)

你应该在Mapper中传递一个ResultItemBean对象,如下所示:

public abstract List<ItemBean> listarAnios(ResultItemBean items) throws Exception;

在ControlCalidadMapper.xml文件中,将parameterMap定义为   pe.com.sigbah.common.bean.ResultItemBean 因此您可以将此对象作为参数传递。