본문 바로가기

CS/Database14

[MyBatis] 동적 SQL 처리 - trim 사용하기 Intro 검색 관련 쿼리를 작성하다가 동적으로 SQL을 처리해야했다. IF문을 3번 써야했는데, Where절 뒤에 들어가는 조건문 속에 AND가 바로 오면 Syntax Error가 발생했다. trim을 사용해서 해결했는데, 공식문서에 정말 자세히 설명이 나와있고 유사 케이스여서 금방 해결할 수 있었다. Trim 문 안에 있는 쿼리의 맨앞 혹은 맨뒤에 붙는 문자열을 붙이거나 뗄 수 있도록 한다. prefix trim 내부 쿼리 가장 앞에 문자열을 붙여준다. ... prefixOverrides trim 내부 쿼리 가장 앞에 해당 문자열을 지워준다. ... suffix trim 내부 쿼리 가장 뒤에 해당 문자열을 붙여준다. ... suffixOverrides trim 내부 쿼리 가장 뒤에 해당 문자열을 지워.. 2021. 8. 19.
[MyBatis] MyBatis의 Association과 Collection MyBatis에서 Domain 객체와 쿼리를 맵핑을 하다가 막혀서 이 부분을 공부하게 되었다. flat하게 데이터를 주는 쿼리와 다르게, 계층형태로 데이터를 전달해야하다 보면 편하게 맵핑할 방법을 찾게 된다. 이걸 Association과 Collection으로 해결할 수 있다. 세 개의 도메인으로 예를 들어보자. Artist - Album - Song Artist는 여러개의 앨범을 낼 수 있다. Album 안에는 여러 개의 Song이 있다. 즉, Artist와 Album은 1:N의 관계이다. Album과 Song 역시 1:N 관계이다. 만약 특정한 seq번호가 3인 앨범의 정보와 아티스트, 앨범 A에 수록된 곡을 알고 싶다면 어떻게 해야할까? 기존의 나 select로 seq번호가 3인 앨범 정보를 가져온.. 2021. 8. 10.
[MySQL] InnoDB의 Lock 알아보기 transaction rollback 시 auto increment 이슈에 대해 포스팅을 쓰고 Transaction Isolation level 자체에 대한 지식이 부족하다고 생각되어 포스팅을 쓰게 되었다. *아주 정리가 잘 되어있는 글을 보고 공부를 하였다. Intro ACID 원칙을 철저히 지킬수록 동시성은 낮아진다. ACID 원칙을 희생하여 동시성을 얻을 수 있는데, DB엔진이 제공해주는 isolation level에 따라 다양한 locking 전략을 적용할 수 있다. 이를 적용하면, isolation 원칙에 어긋날수록 문제가 발생할 가능성은 커지지만 동시성을 높일 수 있다. Isolation level ANSI/ISO SQL standard에서 정의한 isolation level은 READ UNC.. 2021. 8. 7.
[MySQL] Transaction rollback 시 Auto Increment 이슈 Intro 개발중 @Transaction을 사용하다가 insert 실패 시 rollback되는 경우가 있었다. 다음 insert문을 실행했을 때, 순차적인 값이 아닌 값이 나타났다. (1,2,3,8,13 .. 이런식으로) 원인 Transaction으로 인해 로직 자체는 rollback되었지만, 이미 테이블에 적용된 Auto Increment 값은 증가한 뒤였다. auto_increment는 transaction이 적용되지 않는다. 따라서, rollback이 적용되지 않는 것이다. 내가 겪은 원인 외에도, insert ignore int 문을 사용할 때 statement문 오류로 인한 이슈, 동시에 다수의 쿼리가 insert될 때 auto increment 필드 값이 증가될 수 있다. 어떻게 해결할까? a.. 2021. 8. 5.