본문 바로가기
개발노트

[mysql ] Ibatis procedure OUT 파라미터 받기

by SoonNote 2024. 4. 26.
반응형

개발환경

Egov 3.7

java 1.8

mysql 8.0

 

Mybatis가 아닌 Ibatis를 사용해서 개발해야 하는 상황이였고 Mysql Procedure 사용 OUT변수를 가져오는 것에서 오류를 참 많이 보게 되었다.

 프로시저와 ibatis의 조합이라 정보도 많이 나오지 않았다.

 

 

 

1. Mysql 테이블 생성

 

 

2. 테스트 데이터 입력

insert into new_table
    values(1,'test1','test11'),(2,'test2','test22'),(3,'test3','test33'),(4,'test4','test44');

 

3. Procedure생성

CREATE DEFINER=`user`@`%` PROCEDURE `new_procedure`(
	IN input2 VARCHAR(100),
    IN input1 VARCHAR(100),
    OUT result1 VARCHAR(100),
    OUT result2 VARCHAR(100)
)
BEGIN
	select * from new_table;
	set result1='1';
	set result2='2';
END

 

 

4. 툴에서 결과확인

 

5. ibatis Procedure 작성

<parameterMap id="testProcedure" class="hashMap">
    <parameter property="input2"	jdbcType="VARCHAR"	javaType="java.lang.String"		mode="IN"/>
    <parameter property="input1"  	jdbcType="VARCHAR"	javaType="java.lang.String"		mode="IN"/>
    <parameter property="result1"  	jdbcType="VARCHAR"	javaType="java.lang.String"		mode="OUT"/>
    <parameter property="result2"  	jdbcType="VARCHAR"	javaType="java.lang.String"		mode="OUT"/>
</parameterMap>


<procedure id="test.testProcedure" parameterMap="testProcedure" resultClass="egovMap">
    {call new_procedure(?,?,?,?)}
</procedure>

 

 

6. DAO

@SuppressWarnings("unchecked")
    public List<EgovMap> testProcedure(HashMap<String,Object> param) throws Exception {
		HashMap<String,Object> testParam = new HashMap<String, Object>();
		
		testParam.put("input1", "123");
		testParam.put("input2", "456");
		List<EgovMap> list = (List<EgovMap>) list("test.testProcedure", testParam);
		
    	return list;
    	
    }

 

 

7. 결과값

 

프로시저에서 실행된 select * from new_table; 값은 list에 담기고 out파라미터(result1, result2)는 testParam에 들어간 것을 확인 할 수 있다.

 

 

ParameterMap을 따로 만들고 mode 설정만 잘해준다면 별문제없이 잘 돌아간다

반응형