1. 일반적인 경우의 MyBatis Insert. 어떤 로직을 거쳐 생성된 객체 100만개를 DB에 insert 해야 하는 상황이다. private List getMemoList() { List list = new ArrayList(); // 100만번 loop를 돌아 100만개의 요소를 생성해 list에 add 한다. for (int i = 0; i < 1_000_000; i++) { MemoDTO memo = new MemoDTO(); memo.setMemberId(1); memo.setMemo("메모 테스트 입니다!메모 테스트 입니다!"); list.add(memo); } return list; } 위와 같이 MemoDTO 객체를 100만개 임의로 생성해서 List에 넣었다. 위 객체를 DB에 in..
MyBatis 쿼리가 위와 같이 불편하게 출력되고 있습니다. 한줄짜리 쿼리로그는 ? 를 아래 Parameters 에 출력된 '메모(String)'로 수동으로 넣어서 쿼리를 조회하면 되겠지만, 쿼리가 100줄이상에 parameter가 10개 넘어가면 일일이 찾아 바꿔 조회하는 것도 번거롭습니다. 파라미터가 바인딩된 쿼리로 pretty 하게 출력되도록 설정해보겠습니다. 1. build.gradle에 log4jdbc dependency추가. /** for MyBatis Log Beautifier. using log4jdbc */ implementation('org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16') 2. main/resources/ 하위에 log4jdb..
- 문제 상황이 발생했다. 어떤 데이터를 조회하는데 일부가 누락되어 조회되는 상황발생. - 어떤 select 쿼리에 아래와 같이 limit 100이 적용 되 있다. pageable이 null 일 경우 조회결과에 limit 100을 건다. limit가 없을 시 해당쿼리의 실행결과가 122건이라고 할 때, limit가 적용되 있으면 몇건을 반환할까? limit 100 이니까 당연히 100건인것 같지만, 현실은 24건을 반환한다. 원인은 result Map 이 적용되 있기 때문. resultMap이란 결과값을 map에다 담아주는 역할을 함. resultMap을 찾아가보자. 해당 resultMap의 안에서 collection 작업을 통해서 grouping 해주기 떄문에 100개의 row가 24개로 결과가 나오게..
java.sql.SQLSyntaxErrorException : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1. 이라는 에러가 났다. 로그를 보면. Mapper에서 실행된 SQL문은 문제가 없어 보인다. 문제가 없어보인다고?... 자세히 봐바... {#id} 가 아니라 #{id} 잖아.... .... 이 문제 때문에 1시간을 소비했다.. 이런저런 설정 변경하고 구글링 하고.. 로그를 천천히 보도록 하자...
1. resources 폴더에 application.properties 파일이 있다. - 이 파일에 아래와 같이 설정을 해준다. - 각 프로퍼티속성이 의미하는 것은 속성의 이름을 보면 알 수 있다. 2. Mapper 파일의 인터페이스 파일을 작성한다. - @Mapper 어노테이션을 붙여줘서 스프링이 mapper 컴포넌트로 관리할 수 있게 해준다. 3. application.properties 파일에 mapper 파일 위치를 설정해 줬다. - resources 폴더 아래 위치에, 설정해놓은 폴더를 만든다. - 그리고 mapper 파일을 생성. 4. mapper 파일에 mapper.dtd 선언을 해주고 SQL 문을 작성한다. 5. Service 파일에서 mapper interface를 @Autowired로 ..