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
에서 확인 할 수 있다.
CREATE TABLE TB_TEMP
(
NAME_ID VARCHAR2(20),
VALID NUMBER(1) -- bool 값으로 사용할 컬럼
)
@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);
}
@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();
}
}