Thay đổi trình liên kết như sau
<resultMap type="detail" id="myResultMap" >
<result property="objectNamee" column="P_OBJECT_NAME" />
<result property="objectStatus" column="p_object_status" />
</resultMap>
<select id="getLearnerMap" parameterType="spInOut" statementType="CALLABLE">
{call p1.data_collection_append(#{objList, jdbcType=CURSOR, mode=OUT, resultMap=myResultMap, javaType=java.sql.ResultSet})}
</select>
tạo một kiểu trong SpInOut trong thư mục tên miền của bạn
public class SpInOut {
private Object objList;
//getter setting follows
}
Đây là một ví dụ đơn giản hoàn chỉnh
Phía DB
Tạo loại tùy chỉnh
PACKAGE KP_EMP_PCK AS
type empType is ref cursor;
END KP_EMP_PCK;
Tạo một thủ tục được lưu trữ
create or replace PROCEDURE KPLISTEMP
( empList OUT kp_emp_pck.empType
) AS
BEGIN
open empList for select empid, fname, lname,address from kpemployee order by fname;
END KPLISTEMP;
Bên Java
Tạo lớp miền
public class User {
private String fName;
private String company;
private int age;
private int salary;
//getter Setter
}
Tạo miền cho SpInOut
public class SpInOut {
private Object empList;
//getter setting follows
}
Giao diện người lập bản đồ
public interface EmployeeMapper {
void getEmployees(SpInOut param);
}
Tệp xml ánh xạ
<mapper namespace="com.kp.swasthik.db.oracle.persistence.EmployeeMapper">
<resultMap type="employee" id="empResultMap" >
<id property="empId" column="EMPID" />
<result property="fName" column="FNAME" />
<result property="lName" column="LNAME" />
<result property="address" column="ADDRESS" />
</resultMap>
<select id="getEmployees" statementType="CALLABLE" parameterType="spInOut" >
{call kplistemp(#{empList, jdbcType=CURSOR, mode=OUT, resultMap=empResultMap, javaType=java.sql.ResultSet})}
</select>
</mapper>
Và cuối cùng là lớp dịch vụ
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
EmployeeMapper mapper;
@Override
public List<Employee> getEmps() {
try{
SpInOut data= new SpInOut();
mapper.getEmployees(data);
return (List<Employee>) data.getEmpList();
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}