DevOps:leehi9817

Map을 사용한 파라미터 바인딩 본문

백엔드 개발/spring

Map을 사용한 파라미터 바인딩

leehi9817 2022. 1. 21. 12:05

파라미터 클래스(Vo)가 존재하지 않고 여러 값을 파라미터로 넘겨야 할 때 Map을 사용한다.

사용할 여러 값의 묶음이 일회성으로 사용되어 Vo를 만들기에 비효율적일 경우에 Map을 사용하면 Vo를 만들지 않고도 파라미터 값들을 넘길 수 있다.

다음 예시에서는 Dao의 personInsert()을 이용하여 phonebook.xml 파일의 insert문으로 파라미터 값을 넘긴다. 

Map<키, 값>에 해당하는 자료형으로 키와 값이 둘다 문자열 자료형일 경우 Map<String, String>으로 표현한다.

Map에 키와 값을 넣을 때는 personMap.put("키", 값) 형태로 넣는다.

Map을 사용했을 때의 파라미터는 Vo의 [변수명=값, 변수명=값, ... ]과 유사한 {키=값, 키=값, ... } 형태로 저장된다.

//phoneDao.java
public int personInsert(PersonVo personVo) {
	//Vo 만드는 대신 Map 형태로 데이터 넘기기
	Map<String, String> personMap = new HashMap<String, String>();
	personMap.put("name", name);
	personMap.put("hp", hp);
	personMap.put("company", company);
	//{키=값, 키=값, ...} 형태로 저장
	//{name=이혜인, hp=010-2222-2222, company=02-2222-2222}
	int count = sqlSession.insert("phonebook.insert", personMap);
}

Dao에서 Map을 사용하기 위해서는 SQL 파일을 수정 해야한다.

SQL의 파라미터 타입을 parameterType="map" 으로 수정해주면 Map에서 넘겨받은 파라미터를 사용할 수 있다.

<!-- phonebook.xml -->
<!-- 전화번호 추가 -->
<insert id="insert" parameterType="map">
	<![CDATA[
		insert into person
		values (seq_person_id.nextval, #{name}, #{hp}, #{company})
	]]>
</insert>

 

Comments