Ibatis 2 到 Mybatis 3 转换 - Dao 文件返回游标信息

Ibatis 2 to Mybatis 3 Conversion - Dao Files Returning Cursor Information

我正在从 iBatis 2 升级到 myBatis 3。

该项目包含多个 Dao 文件。我注意到有些 return 数据是直接加载的,而其他 return 数据是加载到输出参数中的。

例如,

theData = (List<SomeDataType>) getSqlMapClientTemplace().queryForList("getData", params);

对比

getSqlMapClientTemplate().queryForList("getOtherData", params);
theData = (List<SomeOtherDataType>) params.get("out_cursor");

我认为不同之处在于 returns 数据的映射器中没有 resultMap:

<parameter property="someData" 
           javaType="java.sql.ResultSet" 
           jdbcType="ORACLECURSOR" 
           mode="OUT" />

但是有一个 return 将它放在参数中:

<parameter property="otherData" 
           javaType="java.sql.ResultSet" 
           jdbcType="ORACLECURSOR" 
           mode="OUT"
           resultMap="getSomeOtherDataResult" />

问题是,MyBatis3 是否允许第一次调用类型,还是像第二次调用一样需要从参数中检索所有内容?

在我转换的 Dao class 中,我使用我的 Mapper class 如下:

MyMapper mapperForSession = getSqlSession().getMapper(MyMapperClass.class);
mapperForSession.getOtherData(params);
return (List<SomeOtherDataType>) params.get("out_cursor");

你没提但是我理解SQL实际上是存储过程或存储函数。

第一个语句适用于函数 "select":

SELECT * FROM theFunction(#{param1}, #{param2})

并且总是有一个结果映射,只是不需要提供自定义的,因为 Mybatis 默认会将结果集映射到键值映射。这意味着映射到自定义类型将需要指定一个可能极简的自定义结果映射:如果列名与属性匹配,则仅目标类型,必要时使用 mapUnderscoreToCamelCase 设置。

用于过程样式调用的第二种方式:

{ #{outList, jdbcType=CURSOR, mode=OUT, javaType=java.sql.ResultSet, resultMap=someResultMapId} = call theFunction(#{param1}, #{param2}) }

对于实际程序:

{ call theProcedure(#{inParam1}, #{inParam2}, #{outList, jdbcType=CURSOR, mode=OUT, javaType=java.sql.ResultSet, resultMap=someResultMapId}) }