나의 Winding Road

MyBatis foreach문(객체 배열 처리) 본문

개발/Spring

MyBatis foreach문(객체 배열 처리)

WindingRoad 2017. 6. 3. 15:28

[2017-05-19 금요일]

* 내용: MyBatis foreach문을 활용한 객체 배열 처리

1. json 객체 배열 생성

    2. pojo 형태의 VO 생성

    3. ArrayList로 변경

    4. MyBatis foreach


      ※  MyBatis에서 객체 배열로 동적 쿼리를 생성해야 될 필요가 있을 때 사용하는 foreach문에 대한 사용법


      1. json 객체 배열 생성



      * 코드

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      $("#btn_select").click(function(){
            
          var list = $("#table_list");
          var selectedRows = list.getGridParam('selarrrow');
          var analysis_code_set = "";
          var analysis_code = "";
          var analysis_sdate = "";
          var analysis_edate = "";
               
          var jsonArray = [];
               
          for(var i = 0; i < selectedRows.length; i++) {
              var rowData = list.getRowData(selectedRows[i]);
              if(i == selectedRows.length - 1)
                  analysis_code_set += rowData.ANALYSIS_CODE;
                else
                  analysis_code_set += rowData.ANALYSIS_CODE + "/";
                  analysis_code = rowData.ANALYSIS_CODE;
                  analysis_sdate = rowData.APPLY_START_DATE;
                  analysis_edate = rowData.APPLY_END_DATE;   
                   
                  var params = {
                      analysisCode : analysis_code,
                      analysisSdate : analysis_sdate,
                      analysisEdate : analysis_edate
                  }
                   
                  jsonArray.push(params);
          }
            

          if(analysis_code_set == "") {
              return;
          }
          else {
              var params = { analysis_code_set : analysis_code_set, analysis_code_arr : JSON.stringify(jsonArray) };
              console.log(params);               
              opener.fn_set_input_analysis_std( params );
              self.close();              
          }
      });
      cs

       


      2. pojo 형태의 VO 생성



      코드

      1번에서 파란색으로 표시한 변수명과 똑같이 세팅한다

       

      * 코드

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      public class AnalysisCodeVO {
          private String analysisCode;
          private String analysisSdate;
          private String analysisEdate;
          public String getAnalysisCode() {
              return analysisCode;
          }
          public void setAnalysisCode(String analysisCode) {
              this.analysisCode = analysisCode;
          }
          public String getAnalysisSdate() {
              return analysisSdate;
          }
          public void setAnalysisSdate(String analysisSdate) {
              this.analysisSdate = analysisSdate;
          }
          public String getAnalysisEdate() {
              return analysisEdate;
          }
          public void setAnalysisEdate(String analysisEdate) {
              this.analysisEdate = analysisEdate;
          }
      }
      cs

       


      3. ArrayList 변경


       

      * 코드

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      String jsonAnalysisCodeArr = request.getParameter("analysis_code_arr");
       
      AnalysisCodeVO[] arrAnalysisCode = gson.fromJson(jsonAnalysisCodeArr, AnalysisCodeVO[].class); // json String → array
       
      if(arrAnalysisCode != null && arrAnalysisCode.length != 0) {
          ArrayList<AnalysisCodeVO> arrListAnalysisCode  = new ArrayList<AnalysisCodeVO>(Arrays.asList(arrAnalysisCode));
          searchMap.put("analysis_code_arr", arrListAnalysisCode);
      }
      else {
          ArrayList<AnalysisCodeVO> arrListAnalysisCode  = new ArrayList<AnalysisCodeVO>();
          searchMap.put("analysis_code_arr", arrListAnalysisCode);
      }
       
      cs

       



      4. MyBatis foreach



      ※ 객체의 속성 값을 칼럼으로 사용할 때는 $문자를, 값으로 사용할 때는 #문자를 앞에 붙여 사용한다.


      코드 

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      <choose>
          <when test=' analysis_code_arr.size != 0 '>
          AND (
              1 = 1 AND
              <foreach collection="analysis_code_arr" item="item" index="index" open="(" separator="OR" close=")">
              ( ${item.analysisCode} = '○' AND ANALYSIS_DATE BETWEEN #{item.analysisSdate} AND #{item.analysisEdate} ) 
              </foreach>
          )
          </when>
      </choose>
      cs


      '개발 > Spring' 카테고리의 다른 글

      Apache POI 3.15를 사용한 엑셀 다운로드 기능  (2) 2017.04.28
      eclipse java version 에러  (0) 2015.12.28
      Comments