[웹 개발] Eclipse REST API 구현 - SELECT문 조건 조회

    728x90

    안녕하세요

    로로봉입니다 : )

    오늘은 호출할때 파라미터를 전달 받아서 Select 문에 조건으로 조회를 해보도록 하겠습니다.

    저번 포스팅에서 기본 구조로 전체 리스트를 Select 해보았었습니다.

    이어서 작업할텐데 별도의 클래스 추가 없이 소스부분만 추가해주면 간단히 구현할 수 있습니다.

    DB 테이블을 다시한번 확인해보겠습니다.

    [ 그림 1 : DB people_tbl 데이터 확인 ]

    people_tbl에는 3개의 데이터를 넣어놨고, p_name, p_age, p_job 이 3가지 필드가 있는 것을 확인했습니다.

    조건문으로 이름과, 나이와, 직업 모두 전달 받도록 하고 전달되는 파라미터가 비어있더라도 오류가 나지 않게 처리해보겠습니다.


    1) SQL 추가

    repository 패키지 안에 있는 PeopleSql.groovy 파일을 열어줍니다.

    기존에 작성했던 SELECT 문에 WHERE 1=1 을 넣어서 조건 문이 뒤에 붙을 수 있도록 처리합니다.

    class PeopleSql {
       public static final String SELECT = """
          SELECT p_seq, p_name, p_age, p_job FROM people_tbl 
          WHERE 1=1
       """;
    	
       public static final String NAME_CONDITION = """
          AND p_name = :name
       """
    	
       public static final String AGE_CONDITION = """
          AND p_age = :age
       """
    	
       public static final String JOB_CONDITION = """
          AND p_job = :job
       """
    }

    입력 후 저장해줍니다.

    [ 그림 2 : SQL 입력 완료 ]

     


    2) Repository 메소드 추가

    이름과 나이, 직업을 매개변수로 전달 받는 메소드를 하나 추가해보도록 하겠습니다.

    public List<People> findPeople(String name, int age, String job) {
       String qry = PeopleSql.SELECT;
       if(!name.isEmpty()) {
          qry += PeopleSql.NAME_CONDITION;
       }
       if(age != 0) {
          qry += PeopleSql.AGE_CONDITION;
       }
       if(!job.isEmpty()) {
          qry += PeopleSql.JOB_CONDITION;
       }
    							 
       SqlParameterSource param = new MapSqlParameterSource("name", name)
    						.addValue("age", age)
    						.addValue("job", job);
       return namedParameterJdbcTemplate.query(qry,  param, this.peopleRowMapper);
    }

    기본 SQL문을 qry 변수에 저장하고 이름, 나이, 직업 파라미터가 공란이 아닌 경우에 SQL 조건에 추가되어 조건 검색이 됩니다.

    int 형의 경우 0을 기본값으로 하여 처리하였습니다.

    기존 소스에 추가된 부분은 아래와 같습니다.

    [ 그림 3 : Repository 메소드 추가 ]


    3) Service 추가

    실제 페이지를 호출하게 되면 서비스를 호출하여 Repotory를 실행하도록 처리하기 때문에 아래와 같이 서비스에 메소드 하나를 추가해줍니다.

    public List<People> getPeopleSearch(String name, int age, String job) {
       return this.peopleRepository.findPeople(name, age, job);
    }

    기존 소스에 아래와 같이 추가되었습니다.

    [ 그림 4 : InfoService 서비스 메소드 추가 ]


    4) Controller에서 Service 호출

    이제 마지막으로 파라미터를 넘겨서 호출만 하면 조회가 가능합니다.

    기존에 만들었던 InfoController4.java 파일이 서비스를 호출하는 구조였기 때문에 해당 파일에 서비스 메소드를 추가해 보도록 하겠습니다.

    @GetMapping("/peopleListByName")
    public Object peopleListByName(@RequestParam(value = "name", required = false, defaultValue="") String name,
    		@RequestParam(value = "age", required = false, defaultValue = "0") int age,
    		@RequestParam(value = "job", required = false, defaultValue = "") String job) {
       log.debug("/peopleListByName name = {}, age = {}, job = {}", name, age, job);
    		
       List<People> peopleList = infoService.getPeopleSearch(name, age, job);
       return peopleList;
    }

    @RequestParam 어노테이션을 사용하면 되고, required = false를 넣어주면 입력 값이 공란이여도 오류가 발생하지 않습니다.

    int 형의경우 defaulValue를 0으로 하여 입력 값이 없어도 0 으로 초기화 해주었습니다.

    [ 그림 5 : InfoController4 소스 수정 ]


    5) 호출 결과

    /peopleListByName으로 호출하고 파라미터는 ? 뒤에 명칭 = 데이터 형식으로 넣어줍니다.

    & 기호를 통해 구분해주어야 합니다.

    localhost:9091/peopleListByName?name=&age=&boj=학생

    [ 그림 6 : URL 호출 결과 ]

    name과 age, job에 여러가지 다른 데이터를 넣어서 테스트 해보면 해당 조건에 맞게 조회되는 것을 볼 수 있습니다.

     

    공감 ♥ + 구독부탁드립니다 : )

    728x90
    반응형

    댓글