mybatis19 [spring/mybatis] Rest API 계층구조(1:N) 객체 조회(feat .쉬운 예제) 목차 역시나 미래의 나를 위해 기록한다. 계층구조 조회가 처음 접하고 익숙해지기 전까지는 좀 어렵다.(물론 지금도 쉬운 건 아니다.) 모든 일이 익숙해지면 아무것도 아닌 게 그전까지는 어려운 법이다. Rest API 계층구조 조회 간단 예시다. 사용자(UserDto) 객체가 도서 객체(BookDto)를 list로 가지고 있는 구조다. 회원과 도서의 관계를 1:N으로 매핑했고 회원이 부모고 책이 자식이다. 아래처럼 한명의 회원이 여러개의 책을 대출할 수 있는 조건 그래서 회원 객체는 도서 객체를 list로 가지고 있어야 한다. 아래 DB 테이블을 보면 회원번호 1번인 천둥의 신 토르가 열혈강호 1권~5권까지 가지고 있다. API니까 당연히 클라이언트에 전달할 객체인 dto와 db 조작시 사용할 객체인 vo.. IT/development 2022. 12. 25. [mybatis] mybatis multi update(다중 업데이트) 목차 다중 업데이트를 하는 방법 중 mybatis에서 지원하는 multi update를 이용한 방법을 기록한다. application.properteis #allowMultiQueries=true mybatis multi update 사용하기 위해선 이걸 꼭 넣어야 한다. spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3307/test?characterEncoding=UTF-8&allowMultiQueries=true spring.datasource.username=test spring.datasource.password=1234 mapper xml UPDATE tb_common_code SET code_id = #{item.codeId} ,code_.. IT/development 2022. 12. 16. [mybatis] mybatis 동적 쿼리 작성 시 "," 관련 목차 사소할 수 있지만 이유를 몰라서 쿼리 작성 시 에러 때문에 시간을 잡아 먹어서 역시나 미래의 내가 보기위해 기록한다. 예를 들어 위와 같은 쿼리가 있을 때 parameter값에 따라 동적으로 SQL을 생성 시 SELECT문 컬럼 뒤쪽에 ","를 넣으면 문법에러가 발생한다. 넘어온 member_id값이 있으면 , mcm.etc가 붙는 데 만일 위의 쿼리가 아래와 같다면 동적 쿼리를 붙이질 못한다. select m.*, mcm.tag_type, mcm.tag_name, mcm.etc FROM member m LEFT OUTER JOIN member_code_mapping ON m.member_seq = mcm.member_seq LIMIT #{start}, #{length} 이 경우는 넘어온 membe.. IT/development 2022. 11. 22. [mybatis] 상세 조회 시 복수값 추가 조회(feat. vo & map) 목차 상세 조회 시 복수값 추가 조회 😗 기존 상세조회 API에서 상세 조회 시 해시태그와 같은 복수값을 추가로 조회해야 되는 경우가 생겼다. 가져와야 되는 필드값은 2개밖에 안되므로 추가로 vo를 만들고 싶지 않아 아래처럼 수정했다. Controller 기존에는 Controller에서 return으로 VO로만 받았던 걸 map으로 받도록 변경, VO결과와 tag리스트 결과를 map에 담아서 최종적으로 return /** * 상세 * @param * @param * @return */ @Operation(summary = "멤버 상세 조회", description = "멤버를 상세 조회한다.") @Parameters({@Parameter(name = "mem_no", description = "회원 일련.. IT/development 2022. 11. 22. [mybatis] mybatis 이중 foreach insert(feat. 이중 계층 객체 저장) mybatis를 이용해서 계층 구조의 DTO 혹은 VO객체를 저장하는 방법을 기록한다.대상 DBMS: mysql, mariaDB아래처럼 객체가 객체를 참조하는 경우 이를 저장하는 방법이다.(시간 상 코드 위주로 최대한 심플하게 정리)마블 캐릭터 데이터를 조회하는 오픈 API가 있다고 가정하고 API 결과를 list에 담아 루프를 돌려 객체에 세팅한 뒤 DB에 저장하는 로직 예시(상상 코딩 😅)// 메인객체@Getter@Setterpublic class TestVO { private Long mem_no; private String data_type; private String code; .. IT/development 2022. 11. 21. [mybatis] mybatis 배열 저장(feat. foreach) 위와 같이 insert를 1개 이상 하는 로직을 만들게 되었고 미래의 내가 보기 위해 기록한다. 😄클라이언트에서 배열로 값을 받아서 DB에 저장하는 기능이 필요했다.참고로 mysql과 Oracle은 문법이 다르다.Oracle은 아직 안해봐서 그건 나중에 알아보겠다.Controller@RequestParam(value = "변수명[]") String[] avengers 이런식으로 받음@PostMapping("")public ResponseEntity createArray(@RequestParam(value = "avengers[]") String[] avengers) throws Exception{Service.insertAvengers(avengers);생략...Servicepublic void ins.. IT/development 2022. 11. 21. [mybatis] mybatis 동적쿼리(feat. <where></where>) mybatis Dynamic SQL 😃계속 실수 했던 동적쿼리이다.오늘 나는 이걸 이해 했지만 미래의 넌 또 까먹을 수 있으니 여기에 메모해 둔다.동적 WHERE회원 테이블에서 회원이름과 이메일의 존재에 따라 동적으로 WHERE을 붙여서 검색하는 예시이다.기존에는 mapper xml에서 아래처럼 작성했었다. 쿼리를 작성하고는 반드시 단위 테스트를 여러번 해봐야 한다는 걸 또 깨달았다.(그걸 이제 알았니? 😥) SELECT * FROM member WHERE member_name = #{memberName} WHERE email = #{email} 역시 개발하면서 JUnit으로 단위 테스트를 계속.. IT/development 2022. 11. 20. [spring boot/mybatis] 쿼리 로그 정렬 및 기타(feat. log4jdbc) 목차 mybatis log4j 쿼리 로그 정렬 및 기타 😄 mybatis와 log4j를 처음 사용할 때는 아래처럼 쿼리가 일렬로 나오고 parameter값이 "?"로 표시된다. 짧은 쿼리면 상관 없지만 긴 쿼리의 경우에는 Parameters로 나온 값을 ?에 복붙을 해서 쿼리를 실행해 봐야 된다. 시간도 시간이고 가독성도 안좋아서 개발시에는 여간 불편한게 아니다. 그래서 log4jdbc를 이용해서 쿼리를 보기 좋게 정렬/정리하는 방법을 기록한다. log4jdbc 의존성 추가 🤗 maven 기준 pom.xml에 의존성 추가 org.bgee.log4jdbc-log4j2 log4jdbc-log4j2-jdbc4.1 1.16 gradle 기준 build.gradle에 의존성 추가 // 여기에 추가 dependen.. IT/development 2022. 11. 19. [mybatis] map을 list로 받아서 화면에 그리기 목차 미래의 내가 보기 위해 기록함 테스트 테이블 😃 CREATE TABLE `tmp_board`( `board_seq` bigint auto_increment, `title` varchar (30), `contents` varchar (30), `name` varchar (30), `reg_date` timestamp, `update_date` timestamp, primary key(board_seq) ); mapper xml SELECT * FROM t_board ORDER BY reg_date DESC mapper interface 😊 package study.tmp11.mapper; import org.apache.ibatis.annotations.Mapper; import study.tmp11.. IT/development 2022. 11. 19. 이전 1 2 다음