Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- webviewControll
- JavaScript
- HTTP
- Vue
- UITabBarController
- SWIFT
- 비동기프로그래밍
- 스위프트아키텍처
- swiftarchitecture
- node.js
- STS
- MVVM
- WebView
- UIKit
- 스위프트
- Spring
- URLSession
- rxswift
- STS3
- WKWebView
- NotificationCenter정의
- Java
- 12969
- Vue.js
- 스위프트기초
- ios
- programmers12969
- vuejs
- webview javascript
- Node
Archives
- Today
- Total
Monti
mybatis <Where 절 IN 처리> - foreach 본문
오늘 프로젝트를 진행하면서 WHERE 절에 계속 가변하는 값을 주기위해서 IN을 사용하는 방법을 알아보았다.
mybatis에서 IN 절을 사용하기 위해서는 foreach 문장이 필요한데, 세부 내용은 다음과 같다.
- collection : Java에서 Map 넘겨받은 key 값
- item : 전달받은 value값을 mybatis mapper에서 사용할(?) 이름
- index : 반복되는 구문번호
- separator : 반복되는 사이에 출력할 문자열
- open : 구문이 시작될 때 삽입할 문자
- close : 구문이 종료될 때 삽입될 문자열
쉽게 생각하면
open + item[0] + separator + item[1] + separator + ... + item[n] + close
즉,
( 0, 1, ... , n ) 이 입력이 되는거라고 보면 될거같다.
내가 작성한 코드는
- java Controller (값을 List로 받아오기)
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
|
List<Integer> category = new ArrayList<Integer>();
if(keyword.equals("package") || keyword.equals("all"))
category.add(1);
if(keyword.equals("ticket") || keyword.equals("all"))
category.add(2);
if(keyword.equals("mobile") || keyword.equals("all"))
category.add(3);
Map<String, Object> map = new HashMap<String, Object>();
map.put("list", category);
if(req.getMethod().equalsIgnoreCase("GET")) { // GET 방식인 경우
keyword = URLDecoder.decode(keyword, "utf-8");
}
dataCount = service.listCount(map);
if(dataCount != 0)
total_page = aboutUtil.pageCount(rows, dataCount) ;
if(total_page < current_page)
current_page = total_page;
int offset = (current_page-1) * rows;
if(offset < 0) offset = 0;
map.put("offset", offset);
map.put("rows", rows);
List<Product> list = service.listProducts(map);
|
cs |
- java Service (mybatis 호출)
1
2
3
4
5
6
7
8
9
10
|
public List<Product> listProducts(Map<String, Object> map) throws Exception {
List<Product> list = null;
try {
list = dao.selectList("product.product_list_categories", map);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return list;
}
|
cs |
- mybatis (값 불러오기)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<select id="product_list_categories" parameterType="map"
resultType="com.aboutrip.app.product.Product">
SELECT p.code, product_name, start_date, end_date, upload_date,
ishidden, price, img_name
from product p
LEFT JOIN productdetail d ON p.code=d.code
JOIN product_img i ON p.code=i.code
WHERE category_num IN
<foreach collection="list" item="code" index="index"
separator="," open="(" close=")">
#{code}
</foreach>
ORDER BY START_DATE ASC
OFFSET #{offset} ROWS FETCH FIRST #{rows} ROWS
ONLY
</select>
|
cs |
각각 이렇게해서 데이터를 불러올 수 있었다.
맨처음에 foreach collction을 category_num으로 받아왔는데 부적합한 열유형 오류가 발생해서 강사님께 물어봤다.
collection의 경우 한번씩 오류 뜰 가능성이 있다고 기본적으로 list로 사용하면 좋다고 해서 바꾸니까 바로 오류가 고쳐졌다.
Comments