▸Spring MVC/기본 문법

스프링, Mybatis, MySQL_쿼리문 다중 파라미터 사용 [5/5]

코데방 2020. 4. 3.
728x90
- Develop OS : Windows10 Ent, 64bit
- WEB/WAS Server : Tomcat v9.0
- DBMS : MySQL 5.7.29 for Linux (Docker)
- Language : JAVA 1.8 (JDK 1.8)
- Framwork : Spring 3.1.1 Release
- Build Tool : Maven 3.6.3
- ORM : Mybatis 3.2.8

 

쿼리문에 파라미터가 여러개 필요한 경우가 있습니다. 이 경우에 해결책은 두 가지입니다.

 

 

1. 객체를 만들어서 대입

 

보통 VO 객체를 많이 사용합니다. ParameterType과 ResultType 모두 setter와 getter가 있는 객체 타입으로 넣어주고 필드명(정확히는 getter 메소드에서 get을 빼고 앞글자를 소문자로 바꾼 명칭)만 넣어주면 Mybatis가 알아서 값을 찾고 넣어줍니다. 

 

아래와 같이 사용하면 되고, 직접 만든 클래스이기 때문에 Mybatis Config 파일에 Alias로 등록해주는 것을 잊으면 안됩니다.

 

<!-- Mybatis 설정파일 -->

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- VO 클래스와 동일하게 (Table name + VO) -->
<configuration>
	<typeAliases>
		<!-- 회원 정보 -->
		<typeAlias alias="UserInfoVO" type="hs.spring.hsweb.mapper.vo.user.UserInfoVO" />
		<!-- Remember-me Token -->
		<typeAlias alias="UserRememberMeVO"
			type="hs.spring.hsweb.mapper.vo.user.UserRememberMeVO" />
	</typeAliases>
</configuration>

 

<!-- Mybatis mapper 설정 파일 -->

	<!-- 사용자 정보 추가(가입) -->
	<insert id="insertUserInfo" parameterType="UserInfoVO">
		insert into user_info values
		(#{userId},#{userPw},#{userName},#{userPhone},#{userEmail},#{userInitTime})
	</insert>

 

 

 

2. HashMap을 사용

 

그런데 쿼리문 조건을 몇 개 넣고 싶을 때마다 매번 클래스를 생성하는 것은 너무 귀찮고 낭비입니다. 이럴 때는 HashMap을 사용하면 됩니다. 기본 라이브러리의 타입은 Config 설정에 Alias 등록이 필요 없습니다.

 

Map계열은 Key와 Value로 나눠져 있기 때문에 쿼리문에서 #{key}로 값을 찾아서 넣을 수가 있는 것이죠. List 계열도 넣어서 #{0}으로 인덱스를 넣어봤지만 되지 않습니다. Map계열만 가능한 것 같습니다. 

 

숫자가 들어갈지 문자가 들어갈지 정해지지 않은 상태라면 HashMap<String, Object> 형태로 사용하면 됩니다. 혹시 int 타입의 컬럼값을 받아올 때 캐스팅 예외가 발생한다면 Long 타입으로 지정해주면 됩니다. unsigned int는 long 타입으로 변환됩니다.

 

전 문자로 고정돼있는 로직이라 아래와 같이 작성해서 사용하고 있습니다.

 

 

* Mapper 인터페에이스

@Mapper
public interface UserRememberMeMapper {

	public UserRememberMeVO selectUserToken(HashMap<String, String> seriesBrowser);
	
}

 

* Mapper 설정 파일

	<select id="selectUserToken" parameterType="HashMap" resultType="UserRememberMeVO">
		select * from user_remember_me where series = #{series} and browser= #{browser}
	</select>

 

* Test 코드

 

	@Test
	public void dbSelectTest() {

		UserRememberMeMapper mapper = (UserRememberMeMapper) ctx
				.getBean("userRememberMeMapper");


		HashMap<String, String> seriesBrowser = new HashMap<String, String>(); 
		seriesBrowser.put("series", "codevang");
		seriesBrowser.put("browser", "chrome");
		UserRememberMeVO vo = mapper.selectUserToken(seriesBrowser);
		System.out.println(vo);
		System.out.println(vo.getUsername());
		System.out.println(vo.getSeries());
		System.out.println(vo.getToken());
		System.out.println(vo.getBrowser());
		System.out.println(vo.getLastUsed());
	}

 

728x90

댓글

💲 추천 글