MyBatis boolean type 조작

nojam·2022년 8월 4일
0

java

목록 보기
2/2
post-thumbnail
public class TbTempVO {

    private String nameId;
    private boolean valid;

    // getters...
    
    // setters...
}

TbTempVo 객체로 DB에서 select 또는 insert 할 때 java에서는 boolean 이지만 DB는 bool 타입이 없다.

결론부터 말하면 DB에서 bool type을 0(false) 과 1(true) 로 저장하면 java에서 bool값으로 읽을 수 있다.

MyBatis는 이런 문제를 typeHandlers 로 해결 해준다.
https://mybatis.org/mybatis-3/ko/configuration.html#typeHandlers

MyBatis가 기본적으로 등록해주는 typehandler 는 TypeHandlerRegistry 에서 확인 할 수 있다.

DB

CREATE TABLE TB_TEMP
(
    NAME_ID VARCHAR2(20),
    VALID   NUMBER(1)	-- bool 값으로 사용할 컬럼
)

Mapper

@Mapper
public interface TestMapper {

    @Select("select valid from tb_temp")
    List<Boolean> selectBooleanList();

    @Select("select valid from tb_temp where name_id = #{name_id}")
    boolean selectBoolean(@Param("name_id") String name);

    @Select("select * from tb_temp where name_id = #{name_id}")
    TbTempVO selectTbTemp(@Param("name_id") String name);

    @Insert("insert into tb_temp values (#{name_id}, #{valid})")
    int insertBooleanData(@Param("name_id") String name, @Param("valid") Boolean valid);
}

Test

@Slf4j
@SpringBootTest
@ActiveProfiles("local")
public class BooleanTest {

    @Autowired
    TestMapper mapper;

    @Test
    @Transactional
    void myBatisBooleanTest() {

        String name = "abc";
        boolean valid = true;

        int result = mapper.insertBooleanData(name, valid);
        boolean selected = mapper.selectBoolean(name);
        TbTempVO tbTempVO = mapper.selectTbTemp(name);
        
        assertThat(selected).isTrue();
        assertThat(tbTempVO.getNameId()).isEqualTo(name);
        assertThat(tbTempVO.isValid()).isTrue();
    }
}
profile
focusing

0개의 댓글