MyBatis 배열처리

최주영·2023년 7월 7일
0

MyBatis

목록 보기
4/8
  • 문제점 : 클래스를 생성해서 필드값을 넣다보면, 배열을 넣는 경우가 있다
public class Member {
	private String userId;
	private String password;
	private String userName;
	private String gender;
	private int age;
	private String email;
	private String phone;
	private String address;
	private String[] hobby;   // 배열!
	private Date enrollDate;
}
  • xml 파일 (배열값을 처리할때는 타입핸들러 클래스를 만들어서 처리해야한다)
  	<resultMap id="memberMap" type="com.employee.model.vo.Member">
  			<id property="userId" column="userid"/>
			<result property="password" column="password"/>
			<result property="userName" column="username"/>
			<result property="gender" column="gender"/>
			<result property="age" column="age"/>
			<result property="email" column="email"/>
			<result property="phone" column="phone"/>
			<result property="address" column="address"/>
			<result property="hobby" column="hobby" typeHandler="strArrType"/> <!-- 타입핸들러 별칭으로 생성 -->
			<result property="enrollDate" column="enrolldate"/>	
  	</resultMap> 

만드는 방법

    1. 클래스를 하나 만들어서
  • 2 : 인터페이스부분에 Add해서 TypeHandler를 선택한 후
  • 3: 해당 T 자료형에 맞는 자료형을 넣는다
  • 4 : 클래스가 만들어지면 다음과 같이 작성한다
package com.employee.common;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

public class StringArrayTypeHandler implements TypeHandler<String[]> {

	@Override
	public String[] getResult(ResultSet rs, String columnName) throws SQLException {
		// TODO Auto-generated method stub
		return rs.getString(columnName)!=null?rs.getString(columnName).split(","):null;
	}

	@Override
	public String[] getResult(ResultSet rs, int columnIndex) throws SQLException {
		// TODO Auto-generated method stub
		return rs.getString(columnIndex)!=null?rs.getString(columnIndex).split(","):null;
	}

	@Override
	public String[] getResult(CallableStatement cs, int columnIndex) throws SQLException {
		// TODO Auto-generated method stub
		return cs.getString(columnIndex)!=null?cs.getString(columnIndex).split(","):null;
	}

	@Override
	public void setParameter(PreparedStatement ps, int i, String[] parameter, JdbcType jdbcType) throws SQLException {
		if(parameter!=null) {
			ps.setString(i, String.join(",",parameter));
		}else {
			ps.setString(i, null);
		}
	}

}
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글