반응형

mybatis 22

[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] mybatis parameter 여러개 전달

목차예를 들어 String타입의 "status"와 Long타입의 no, 2개의 parameter값을 받아서 테이블 업데이트 하려는 로직이 있을 시 VO째로 넘기기엔 뭔가 비효율적이고 다른사람이 코드를 봤을 때도 직관적이지 않아 보였다.물론 추후에 넘기는 parameter값이 추가될 경우엔 VO째로 넘기는게 확장성이 있겠지만 이 기능은 그런게 아니었다.그래서 구글링 하다가 역시나 방법을 찾아서 미래의 내가 보기위해 기록한다.1. HashMap 이용 😄Controller에서 HashMap에 담아서 넘기는 방법ControllerHashMap에 parameter값 담아서 전달HashMap param = new HashMap();param.put("no", no);param.put("status", status..

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 @Setter public class TestVO { private Long mem_no; private String data_type; private String code; private List addList = new ArrayList(); } // 서브 객체 @Gett..

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); 생략... Service ..

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으로 단위 테스트를 계속 해야 한다. 이걸 모르고 나중에 tomcat을 띄웠다면 에러를 너무 늦게 발견 하게 될 것이다...

IT/development 2022.11.20

[mybatis] foreach parameterType hashmap 예제

목차 미래의 나를 위해 기록한다. 😃 mybatis에서 foreach를 돌릴 때 list는 이제 좀 익숙해 졌는데 map은 아직 좀 서툰 느낌이 들어 기록한다. 예제는 동적으로 insert문의 내용과 SELECT문의 내용을 채우는 예제이다. 아직은 완성형이 아니고 아이디어만 녹인거라 코드가 매우 허술하지만 업데이트 해 나갈 것이다. jpa를 쓰지 않는 프로젝트에서 쿼리문 작성 시 오탈자 방지와 퍼포먼스 향상을 위해 작성하는 중 결국 단순반복 노가다를 많이 줄이기 위함이다. 테스트를 위한 테이블 생성 CREATE TABLE `t_member`( `user_seq` bigint auto_increment, `user_id` varchar (250), `user_name` varchar(250), primar..

IT/development 2022.11.20

[springBoot + mybatis] 개발환경 세팅(feat. IntelliJ IDEA 2021.2)

목차스프링부트로 개발 시 mybatis를 정말 간편하게 세팅할 수 있다. 😄역시나 시간이 지나면 기억을 못하기 때문에 미래의 내가 보기 위해 이곳에 기록한다.예시를 위해서 테이블을 하나 생성하고 여기에 간단한 CRUD를 하겠다.라이브 코딩(시간 상 많이 복붙) 👹프로젝트 생성(인텔리제이) 😄의존성은 아래처럼 세팅웹 개발을 할 것이니까 Spring Web, 메모리 DB 사용을 위해 h2와 getter/setter, toString 등 단순반복 줄여주는 lombok, mybatis를 사용할거니까 mybatis, view template은 Thymeleaf 설정 후 FINISH 눌러서 프로젝트 생성테스트 테이블 생성 🤗create table member (member_id bigint not null ..

IT/development 2022.11.20
반응형