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 |