빈쿵바라기
좌충우돌 개발자의 기록
빈쿵바라기
전체 방문자
오늘
어제
  • 분류 전체보기 (53)
    • Programming (25)
      • JAVA (12)
      • Spring Boot (6)
      • JPA (7)
      • Python (0)
    • Database (12)
      • RDBMS (4)
      • NoSQL (7)
    • Server (11)
    • Elasticsearch (3)
    • ETC (2)

블로그 메뉴

    공지사항

    인기 글

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    빈쿵바라기

    좌충우돌 개발자의 기록

    Programming/Spring Boot

    [Mybatis] PostgreSQL ilike 구현하기(feat. Criteria 커스텀하기)

    2022. 8. 20. 01:00

    Mybatis Generator를 이용하여 만든 Example에는 원하는 연산자가 없을 수 있습니다. Example클래스 내에 Criteria를 커스텀해서 원하는 연산자를 사용하는 방법을 알아보겠습니다.

    사실 Generator를 사용하여 만들어지는 Mapper와 xml등은 mybatis-config.xml에 설정되어 있는대로 만들어지는데, 확실한 방법은 원하는 연산자를 사용할 수 있는 Criteria를 만들어주는 plugin을 구현하 것이 추후에 반복적으로 코딩하지 않아도 될 것입니다.(generator할 때 만든 plugin을 통해서 원하는 메소드를 자동으로 생성 할 수 있기 때문)

    그러나 이 포스팅에서는 당장 plugin은 만들기 어렵고, 프로젝트 내에서 간단히 해결하고 싶을 때 어떻게 작업했는지 작성해보고자 합니다. 저는 PostgreSQL에 ilike 메소드를 사용하기 위해서 코드를 작성했습니다.

    Example.java

    public static class CustomCriteria extends Criteria {
        public Criteria andMemberNameILike(String value) {
            addCriterion("member_name ilike", value, "memberName");
            return (Criteria) this;
        }
    }
    
    public CustomCriteria createCustomCriteria() {
        CustomCriteria criteria = new CustomCriteria();
        if(oredCriteria.size() == 0) {
            oredCriteria.add(criteria);
        }
        return criteria;
    }

    Mybatis Generator를 실행하여 만들어진 파일들 중 커스텀하고자 하는 Example.java 안에 위의 코드를 작성합니다.

    Criteria를 상속받은 CustomCriteria 는 우리가 구현하고자 하는 연산자를 호출해주는 메소드를 가지게 됩니다. 예제에서는 member_name 컬럼에 ilike 연산자를 호출할 수 있는 메소드를 구현했습니다. Criteria를 상속 받았기 때문에 기존에 Criteria에 있는 메소드도 당연히 호출 할 수 있습니다.

    그리고, 만든 CustomCriteria를 생성하고, oredCriteria에 추가 해주는 메소드를 작성해줍니다.

     

    조회 예제

    @Autowired MemberMapper memberMapper;
    
    public List<Member> getMemberList(){
    
        // Example
        MemberExample example = new MemberExample();
        example.createCustomCriteria() // CustomCriteria 생성
        	.andMemberNameILike("%길동%") // and조건 member_name에 ilike 검색
        	.andMemberAgeGreaterThan(20); // CustomCriteria는 Criteria를 상속 받았기 때문에 Criteria에 있는 메소드도 호출 가능
        // select
        return memberMapper.selectByExample(example);
    }

     

    OR 조건 구현

    public Criteria orCustom() {
        CustomCriteria criteria = new CustomCriteria();
        oredCriteria.add(criteria);
        return criteria;
    }

    마찬가지로 Exmaple.java 클래스 안에 위의 코드를 작성합니다. 기존의 or() 대신 작성한 orCustom()을 호출하면 위에서 만든 CustomCriteria()로 OR조건 검색이 가능해집니다.

     

    OR 조건 사용 예제

    @Autowired MemberMapper memberMapper;
    
    public List<Member> getMemberList(){
    
        // Example
        MemberExample example = new MemberExample();
        example.createCustomCriteria() // CustomCriteria 생성
        	.andMemberAgeGreaterThan(20); // AND 조건 
        // OR 조건
        example.orCustom().andMemberNameILike("%길동%");
        // select
        return memberMapper.selectByExample(example);
    }

     

    결론

    • Criteria를 상속해서 코드를 구현하면, 새로운 연산자를 자유롭게 사용할 수 있게 됩니다.
    • 기존 Example.java 코드를 수정하지 않고, Criteria를 상속받아서 새로운 CustomCriteria를 만들었기 때문에, 다시 Generator를 하더라도, 구현한 CustomCriteria 코드가 훼손되지 않는 장점이 있습니다.
    • Mybatis Plugin을 구현할 수 있다면, plugin을 구현하는 것이 미래지향적입니다.

     

    저작자표시 (새창열림)

    'Programming > Spring Boot' 카테고리의 다른 글

    [Spring Security] 수동 인증(강제 로그인)  (0) 2023.05.16
    Spring AOP를 활용한 모든 Request에 Log 남기기  (0) 2023.03.29
    [Jasypt] Spring Boot 애플리케이션의 프로퍼티 암호화  (0) 2023.03.24
    [Maven] 라이브러리 Dependency 충돌 해결하기(Maven Tree)  (0) 2023.03.02
    [Spring Security] 두개의 로그인 페이지(Multiple Login Pages)  (0) 2022.08.10
      'Programming/Spring Boot' 카테고리의 다른 글
      • Spring AOP를 활용한 모든 Request에 Log 남기기
      • [Jasypt] Spring Boot 애플리케이션의 프로퍼티 암호화
      • [Maven] 라이브러리 Dependency 충돌 해결하기(Maven Tree)
      • [Spring Security] 두개의 로그인 페이지(Multiple Login Pages)
      빈쿵바라기
      빈쿵바라기
      삽질하는 개발자의 좌충우돌 개발기

      티스토리툴바