my batis 조회 sql 에서 조건 용법 상세 설명(foreach)

4331 단어 mybatissqlinforeach
foreach 속성 은 주로 item,index,collection,open,separator,close 가 있 습 니 다.
1.item 은 집합 중의 모든 요 소 를 교체 할 때의 별명 을 나타 낸다.
2.index 는 교체 과정 에서 매번 교체 되 는 위 치 를 나타 내 는 이름 을 지정 합 니 다.
3.open 은 이 문 구 를 무엇으로 시작 하 는 지 나타 낸다.
4.separator 는 매번 교체 할 때마다 어떤 기 호 를 구분자 로 하 는 지 나타 낸다.
5.close 는 무엇으로 끝 나 는 지,
6.collection 속성,이 속성 은 반드시 지정 해 야 하지만 상황 에 따라 이 속성의 값 이 다 릅 니 다.
주로 세 가지 상황 이 있다.
a.단일 매개 변수 가 들 어 오고 매개 변수 유형 이 List 일 때 collection 속성 값 은 list 입 니 다.
b.단일 매개 변수 가 들 어 오고 매개 변수 유형 이 array 배열 일 때 collection 의 속성 값 은 array 입 니 다.
c.들 어 오 는 매개 변수 가 여러 개 일 때 우 리 는 그것들 을 하나의 Map 으로 포장 해 야 합 니 다.물론 단일 매개 변수 도 map 로 포장 할 수 있 습 니 다.실제로 매개 변 수 를 들 어 올 때 MyBatis 에서 도 하나의 Map 으로 포장 합 니 다.map 의 key 는 매개 변수 이름 입 니 다.그래서 이 럴 때 collection 속성 값 은 들 어 오 는 List 나 array 대상 이 자신 이 봉 인 된 map 에 있 는 key 입 니 다.

<select id="findBy" resultMap="RfCustomerMemMap" parameterType="java.util.Map">
  SELECT
  <include refid="Column"/>
  FROM rfl_customer_mem a LEFT JOIN rfl_loan b ON a.member_no = b.loan_member_no
  WHERE a.member_no = #{memberNo} AND b.status IN
  <foreach collection="status" index="index" item="item" open="(" separator="," close=")">
   #{item}
  </foreach>
  <if test="name != null and name != ''">
   AND name = #{name}
  </if>
  <if test="idNumber != null and idNumber != ''">
   AND id_number = #{idNumber}
  </if>
  <if test="mobileNo != null and mobileNo != ''">
   AND mobile_no = #{mobileNo}
  </if>
  <if test="loanNo != null and loanNo != ''">
   AND loan_no = #{loanNo}
  </if>
  order by a.id DESC
  <if test="offset > -1 and rows > -1">
   limit #{offset},#{limit}
  </if>
 </select>
자바 호출 쿼 리 sql 코드

public List<LoanMerchantMemEntity> findMerchantMemBy(String merchantName, String merchantNo, String socialCreditCode, String loanNo, int offset, int limit) {
  List<LoanMerchantMemEntity> list = new ArrayList<LoanMerchantMemEntity>();
  Map<String, Object> filter = new HashMap<String, Object>(); 
  filter.put("merchantName", merchantName);
  filter.put("socialCreditCode", socialCreditCode);
  filter.put("status", statsList());
  filter.put("loanNo", loanNo);
  filter.put("offset", offset);
  filter.put("limit", limit);
  filter.put("merchantNo", merchantNo);
 
  try {
   List<LoanMerchantMemEntity> row = loanMerchantMemDao.findBy(filter);
  } catch (Exception e) {
   LOGGER.error(filter, "          ", e);
  }
  return list;
 }

 static List<String> statsList(){
  List<String> statusList = new ArrayList<String>();
  statusList.add("SUCCESS");
  statusList.add("DUE");
  statusList.add("OVER");
  return statusList;
 }
그 중에서 map 에서 key 는 status 값 유형 이 list 이 고 이런 사용 장면 은 세 번 째 입 니 다.즉,collection 은 map 의 key 값 입 니 다.
보충:String 배열 이 들 어 오 면 sql 에서 foreach 문 구 를 사용 하여 IN 조 회 를 실현 합 니 다.
데이터베이스 에 표 시 된 필드 형식 이 num 이나 varchar 일 수 있 기 때문에 프론트 데스크 에서 전 달 된 그룹 은 백 엔 드 에서 처리 해 야 합 니 다.
제 가 보 내 온 것 은 Map 입 니 다.물론 request.getparameter("name")라 는 name 은 jsp 나 htm 페이지 의 id 에 대응 하 는 name 입 니 다.
다음 코드 에서 도:

 String name=(String) params.get("name");
 String[] hiddens = name.split(",");
 params.put("name", hiddens); 
우리 가 이 부분의 처 리 를 거 친 후에 데 이 터 는 map 에 저장 되 고 매개 변 수 를 입력 한 후에 조회 합 니 다.
And conditions 조건 in

<foreach collection="name" index="index" item="item" open="(" separator="," close=")"> 
   #{item} 
  </foreach> 
sql 위 에서 우리 가 조회 할 때 OK!
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기