目录
Bean
准备返回的数据类型;
@Data
@Accessors(chain = true)
public class EduCanBalance {
private String GSDM;
private String gsmc;
private String ZTH;
private String KJND;
private String KJQJ;
// c、 d、 g、 h
// 3 ~ 29
private String c3;
private String d3;
private String c4;
private String d4;
// ... 省略属性若干;
}
Dao
使用注解调用存储过程;
@Mapper
public interface DyhsDao {
@Options(statementType = StatementType.CALLABLE) // 表示调用存储过程;
// Select注解中的参数包括了入参和出参;
@Select("call edu_can_balance_report(#{gsdm_in},#{zth_in},#{kjnd_in},#{kjqj_in}, #{ResEduCanControl,mode=OUT,jdbcType=CURSOR,resultMap=EduCan} )")
// ResEduCanControl在controller里面使用获取;
@Results(id = "EduCan",value = {
// @Result(column = "B5", property = "B5"),
// @Result(column = "C5", property = "C5"),
// @Result(column = "B6", property = "B6") 字段名和属性名不一致的写在这里对应;
// 不写默认就是ResultType的类型EduCanBalance;
}) // 此注解的id对应Select注解的resultMap;
// 包括 @Results 注解在内的四个注解必须要写!一个也不能少!
@ResultType(com.jhzy.financeReport.entity.EduCanBalance.class)
void callEduCanBalance(Map map);
}
util
工具类
public class Params {
public static Map getParam(Map map) {
String gsdm = map.get("gsdm").toString();
String zth = map.get("zth").toString();
String kjnd = map.get("kjnd").toString();
String kjqj = map.get("kjqj").toString();
map.put("gsdm_in", gsdm);
map.put("zth_in", zth);
map.put("kjnd_in", kjnd);
map.put("kjqj_in", kjqj);
return map;
}
}
Service
@Service
public class DyhsService {
@Autowired
private DyhsDao dyhsDao;
public void listEduCanBalance(Map map) {
Map paramMap = Params.getParam(map); // 使用工具类获取参数;
dyhsDao.callEduCanBalance(paramMap);
}
}
Controller
@RestController
public class DyhsController {
@Autowired
private DyhsService dyhsService;
@CrossOrigin
@PostMapping("/listEduCanBal")
// FIXME 这里要特别注意,结果是用参数 map 传递的, 自始至终 map 都在使用;
// map 传递前端参数和传递传递执行的存储过程结果;
public List<EduCanBalance> listEduCanBalance(@RequestBody Map map) {
dyhsService.listEduCanBalance(map);
List<EduCanBalance> eduCanBalance =
(List<EduCanBalance>) map.get("ResEduCanControl");
// 获取@Select里面返回的最后一个参数ResEduCanControl;
return eduCanBalance;
}
}
类似的,更详细的内容见:使用xml的方式调用Oracle数据库存储过程。