framework/MyBatis(7)
-
Mybatis DAO에서 쿼리 추출 및 로그 찍기 (Log 라이브러리 사용안함)
Mybatis DAO에서 쿼리 추출 및 로그 찍기 (Log 라이브러리 사용안함) Mybatis 를 사용하면서 쿼리를 콘솔에 찍을 일이 생겼다. Log4j, log4sql, log4j-remix 등을 사용하면 쉽게 적용할 수 있다. 하지만 이번 포스팅에서는 위 라이브러리들을 활용하지 않고서 Mybatis만을 이용해서 진행하려 한다. 원리를 간단하게 설명하자면 다음과 같다. 1. sqlSession 에서 쿼리를 추출 2. sqlSession 에서 parameter 추출 3. 쿼리의 ? 문자열을 parameter로 치환 4. 출력 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class SampleDao{ SqlSession sqlSession = SqlMapClie..
2018.07.31 -
MyBatis isNull isEmpty 사용하기
MyBatis isNull, isEmpty 사용하여 문자열 비교하기 Ibatis 에는 isNull, isEmpty가 있었지만 MyBatis에는 없다. 기타 다른 태그들 역시 사라지고 없지만 이번 포스팅에서는 문자가 null인지 또는 공백인지에 대해 체크하는 방법에 대해서 살펴 보려고 한다. 가장 흔하게 비교하는 것이 값이 null인지 공백인지 체크하는게 아닌가 싶다. 보통은 다음과 같이 null인지 공백인지 체크를 동시에 한다. 1 cs 하지만 MyBatis에서는 OGNL(Object Graph Navigation Language) 의 이슈가 있다.(참고 http://cofs.tistory.com/96) 그래서 위의 방법은 좋은 방법이 아니라고 생각한다. 더 확실한 방법이 필요하다. 찾아보니 MyBati..
2017.06.28 -
MyBatis resultType이 Map일경우 key를 소문자로 만들기
MyBatis resultType map 일경우 key 를 소문자로 만들기 보통 MyBatis 에서 resultType 으로 목록이나 데이터를 조회할 경우 VO 를 많이 사용한다. 하지만 VO가 아닌 map을 사용할 경우도 분명히 존재한다. VO는 보통 camelCase 이거나 언더바를 포함한 소문자 명명규칙을 사용한다. Map을 resultType를 선언할 경우에 key 가 대문자로 들어간다 (oracle 등에 한하여) 컬럼을 나타내는 변수나 key는 같은 룰을 따르는 것이 좋다고 생각한다. 그렇다면 Map의 Key를 camelCase 나 소문자로 변경해 주면 되겠다. Map의 key를 소문자로 바꿔는 방법에는 어떤것들이 있을까... 고민해 보니 2가지 정도로 좁혀졌다. 첫번째는 루프를 돌면서 key를..
2017.06.28 -
ORACLE | query 로 VO 및 mybatis, ibatis에서 사용할 컬럼, resultMap 자동생성하기
query 로 VO 자동생성 및 DTO 자동생성하기와 mybatis, ibatis에서 사용할 컬럼과 resultMap 자동생성하기 query 를 사용하여 VO를 자동생성해보고, mybatis나 ibatis 에서 사용할 컬럼과 resultMap 도 자동생성해보자. ********* Oracle 에서만 사용가능합니다. 아래에 예제 테이블이 있다. 테이블명 : TEST_MEMBER_TABLE 흔히 사용하는 테이블과 컬럼의 모습이다. 컬럼은 언더바( _ ) 를 이용하여 단어들을 구분하고있다. 위 테이블을 가지고 VO 를 만들어 보자. 우리는 컬럼의 언더바를 포함한 채 사용할 경우도 있고, 언더바를 제외하고 단어와 단어를 연결할 때 첫문자를 대문자로 변경하여 사용할 경우도 있다. 두가지 경우를 모두 살펴본다. V..
2017.01.03 -
Mybatis > RowBounds 의 고찰
Mybatis > RowBounds 의 고찰 리스트의 페이징(Paging)을 보던 중 처음보는 클래스를 발견했다. RowBounds 클래스이다. 사용하는 곳을 본적이 없어서 이번에 처음 보게 되었다. 페이징은 보통 쿼리에서 해결하곤 했다. 크거나 같다 (>=
2016.08.09 -
다이나믹 쿼리 / if / 공백체크 / 숫자 0 / 이슈 | MyBatis
MyBatis 의 다이나믹쿼리 IF 문에서 공백체크를 할 때 숫자 0이 체크가 안되는 이슈가 있다. ex) select * from dual a 위와 같을 때 num 변수에 integer type의 0 값이 들어 있다면 num != '' 에서 같다고 판단한다. 이유는 OGNL(Object Graph Navigation Language) 의 문제일 것이라고 예상한다. http://cofs.tistory.com/96 와 비슷한 문제일 수 있음.... test 해보지는 않았음. - 해결방법 1. num을 string type으로 전송받는다 2. num != '' 대신에 num.equals("") 사용 3. 커스텀 static 함수 생성 및 사용 [추천 !!!!] package test.com public cl..
2016.01.05 -
NumberformatException / if /문자 1글자 비교 / equals / 이슈 | MyBatis
ex 1) ex 2) 지금처럼 한 글자를 다이나믹쿼리 IF 안에서 비교할 때 java.lang.NumberFormatException: For input string: "Y" 에러 또는 비교가 되지 않을 수 있다. (인식 불가 혹은 오작동 가능성도 있음) 결론적으로 위 현상은 myBatis 문제는 아니고 OGNL(Object Graph Navigation Language) 의 문제이다. OGNL 인터프리터에서는 위 구문의 'Y' 를 char 형으로 인식하고, 'YY' 나 "Y" 는 String으로 인식한다. (따옴표를 잘보자) 그래서 이와 같은 구문을 비교할 때 NumberFormat으로 비교를 시도하여 Exception이 발생한다. 이유는 java의 char형은 실제로 문자의 코드값을 저장하기 때문이다..
2016.01.05