Mybatis游标的查询方法,游标的查询跟正常的查询写法稍有不同

需要在<select>标签中定义属性 statementType="CALLABLE"

在调用游标方法时,需要增加事务管理,以下是调用示例

方法调用

@Autowired
private MaterialMapper materialMapper;

/**
 * 示例查询
 */
@Transactional(value = "default_transactionManager", rollbackFor = RuntimeException.class)
public List<MaterialVo> materialList(MaterialVo query) {
	// 游标查询
	materialMapper.mtrlList(query);
	// 产品数据
	List<MaterialVo> resultList = request.getResultList();

	return resultList;
}

产品示例类

/**
 * 产品示例类
 */
@Data
public class MaterialVo implements Serializable {
    private static final long serialVersionUID = -8489601120763675572L;

    /**
     * 产品代码
     */
    private String materialCode;

    /**
     * 产品名称
     */
    private String materialName;

    /**
     * 存储游标返回的结果
     */
    private List<MaterialVo> resultList;

}

游标查询Mapper

/**
 * 产品查询Mapper
 */
public interface MaterialMapper {

    /**
     * 产品信息查询
     */
    void materialList(MaterialVo query);
}

游标查询Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis//DTD Mapper 3.0//EN" "http://mybatis/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.mapper.MaterialMapper">

    <resultMap id="materialListResultMap" type="xxx.material.MaterialVo">
        <result column="material_code" jdbcType="VARCHAR" property="materialCode" />
        <result column="material_name" jdbcType="VARCHAR" property="materialName" />
    </resultMap>

    <select id="materialList"
            parameterType="xxx.material.MaterialVo"
            statementType="CALLABLE"
    >
        {
            #{ resultList, mode=OUT, jdbcType=OTHER, javaType=ResultSet, resultMap=materialListResultMap }
            = call web_material_list
            (
                #{ materialCode, mode=IN }
            )
        }
    </select>

</mapper>

更多推荐

Mybatis查询中使用游标