文章目录
Spring中 使用Mybatis调用 Oracle 存储过程返回结果集,然后从游标中获取数据结果
亲测有效
实例代码
交互层:TestController
@Tag(name = "我的demo管理", description = "")
@RestController
@CrossOrigin
@RequestMapping("/test")
@Log4j2
public class TestController {
@Autowired
private IMyDemoService myDemoService;
@Operation(summary = "调用Oracle存储过程", description = "调用Oracle存储过程接口")
@PostMapping("/myDemo")
public MyBean<List<MyDemoVO>> getMyDemo(@RequestBody String MyDemoDTO myDemoDTO) {
return MyBean.success(mySignTaskService.getMySignTaskRecord(myDemoDTO));
}
}
Service层:IMyDemoService
public interface IMyDemoService {
/**
* @Function: getMyDemoRecord
* @Return MyDemoVO
**/
List<MyDemoVO> getMyDemoRecord(MyDemoDTO myDemoDTO);
}
Mapper层:IMyDemoMapper
package com.foxconn.sign.work.mapper;
import com.cjw.xxx.entity.dto.MyDemoDTO;
import com.cjw.xxx.entity.vo.MyDemoVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface IMyDemoMapper {
List<MyDemoVO> getMyDemoRecord(@Param("myDemoDTO") MyDemoDTO myDemoDTO, @Param("cursor") Integer cursor);
}
sql层:DemoMapper.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="com.foxconn.cjw.xxx.mapper.IMyDemoMapper">
<resultMap id="myResultMap" type="com.cjw.xxx.entity.vo.MyDemoVO">
<result property="name" column="f_name"/>
<result property="age" column="f_age"/>
</resultMap>
<!--自定义SQL-->
<select id="getMyDemoRecord" statementType="CALLABLE" resultType="com.cjw.xxx.entity.vo.MyDemoVO">
{ call call_me(
#{myDemoDTO.id, mode=IN},
#{myDemoDTO.deleted, mode=IN},
#{myDemoDTO.cursor, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=myResultMap}
) }
</select>
service实现层:MyDemoServiceImpl
/**
* @ClassName: MyDemoServiceImpl
**/
@Service
public class MyDemoServiceImpl implements IDemoService {
@Autowired
private IDemoMapper demoMapper;
@Override
public List<MyDemoVO> getMyDemoRecord(MyDemoDTO myDemoDTO) {
// 執行存儲過程
demoMapper.getMyDemoRecord(myDemoDTO, cursor);
// 獲取數據記錄
List<MyDemoVO> myDemoVOList = (List<MyDemoVO>) myDemoDTO.getCursor();
reteurn myDemoVOList;
}
END