주차장 관리 솔루션 RESTAPI 를 만들면서, Mybatis를 통해서도 ENUM 을 활용할 방안이 없을까 궁리했다. JPA를 쓸 경우, 어노테이션 처리만으로 간단하게 활용할 수 있었던 것처럼..
맴버권한을 나타내는 Enum을 만들었다.
public enum Role {
USER, ADMIN
}
public class MemberAuthorityTypeHandler extends BaseTypeHandler<Role> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Role parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, parameter.name());
}
@Override
public Role getNullableResult(ResultSet rs, String columnName) throws SQLException {
return Role.valueOf(rs.getString(columnName));
}
@Override
public Role getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return Role.valueOf(rs.getString(columnIndex));
}
@Override
public Role getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return Role.valueOf(cs.getString(columnIndex));
}
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource, ApplicationContext applicationContext) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:mybatis/mybatis-config.xml"));
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("mybatis/mapper/*.xml"));
sqlSessionFactoryBean.setTypeHandlers(new MemberAuthorityTypeHandler()); //등록
return sqlSessionFactoryBean.getObject();
}
String rawPassword = member.getMember_password();
String encPassword = bCryptPasswordEncoder.encode(rawPassword);
member.commonJoin(encPassword, Role.USER);
//회원사 정보 입력
Integer result = adminMapper.memberAdd(member);
<insert id="memberAdd" parameterType="hashmap">
insert into member
(
member_userId,
member_password,
member_name,
member_manager,
member_phone,
member_role,
parking_id,
member_car_number,
member_createdate
) values (
#{member_userId},
#{member_password},
#{member_name},
#{member_manager},
#{member_phone},
#{member_role},
#{parking_id},
#{member_car_number},
now()
)
</insert>
public interface CodeEnum {
@JsonValue
String getCode();
}
public enum Status implements CodeEnum {
ACCEPT("승인"), REJECT("반려"), WAIT("신청중");
private String code;
Status(String code) {
this.code = code;
}
@MappedTypes(Status.class)
public static class TypeHandler extends CodeEnumTypeHandler<Status> {
public TypeHandler() {
super(Status.class);
}
}
@Override
@JsonValue
public String getCode() {
return code;
}
}
sqlSessionFactoryBean.setTypeHandlers(
new MemberAuthorityTypeHandler(),
new Status.TypeHandler()
);
<update id="updateVisitStatus" >
update visiting_schedule as v
INNER JOIN parking as p
ON v.parking_id = p.id
set
visit_status = #{visit_status}
where v.id = #{id} and p.id=#{parking_id}
</update>
https://www.holaxprogramming.com/2015/11/12/spring-boot-mybatis-typehandler/
https://minkwon4.tistory.com/169
https://camelsource.tistory.com/62