Query DSL์์ MySQL FIELD Function ์ฌ์ฉํ๊ธฐ
๐๐ฝ ์๋ก
Query DSL์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด, DB Function์ ์ง์ํ์ง ์๋ ๊ฒ๋ค์ด ๋ง์ด ์๋ค.
๋๋ ํ๋ผ๋ฏธํฐ๋ก ์จ Id ๋ชฉ๋ก์ ๊ธฐ์ค์ผ๋ก sortingํ ํ์๊ฐ ์์ด์ field function์ด ํ์ํ๋ค.
๊ทธ ๊ณผ์ ์์ ๊ฒช์ issue๋ฅผ ์ดํด๋ณด์.
๐๐ฝ ํธ๋ฌ๋ธ ์ํ
๊ธฐ์กด ๋ฐฉ๋ฒ
Expressions๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋์ ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ๊ธฐ ์ํจ์ผ ๋ฟ์ด๋ค.
private static <T> SimpleTemplate<Integer> template(Path<T> column, List<String> ids) {
return Expressions.simpleTemplate(Integer.class,
"FIELD({0}, {1})", column, String.join(", ", String.join(", ", ids))
);
}
์ฒ์์๋ ์ด ์ฝ๋์๋ ๋ฌธ์ ๊ฐ ์๋ค.
์ฟผ๋ฆฌ ๋ก๊ทธ๋ก๋ ์ด์์์ด ๋น๋๊ฐ ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
ํด๋น ์ฟผ๋ฆฌ๋ฅผ ๋ณต์ฌํ์ฌ ๋๋ ค๋ด๋ ์ ๋์๋ค.
ํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํ๋ฉด ์ ๋ ฌ์ด ๋์ง ์์๋ค.
๋ฐ๋ก String.join()์ ๋ฌธ์ ์ด๋ค.
String.join()์ ๊ฒฐ๊ณผ๋ FIELD(id, 1, 2, 3)์ผ๋ก ์์ฑ๋ ๊ฒ์ด ์๋๊ณ , FIELD(id, โ1, 2, 3โ)์ผ๋ก ์์ฑ๋ ๊ฒ์ด๋ค.
String ํ์ ์ด๊ธฐ ๋๋ฌธ์ โโ๊ฐ ๋ถ๊ฒ ๋์๋ค.
๊ฐ์ ๋ฐฉ๋ฒ
Collection ์์ฒด๋ฅผ ๋ง์ง๋ง ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ๋๋ก ๋ณ๊ฒฝํ๋ค.
๊ฒฐ๊ณผ๋ FIELD(id, 1, 2, 3)์ ๊ฐ์ด ์์ฑ๋๋ค.
private static <T> SimpleTemplate<Integer> template(Path<T> column, List<String> ids) {
return Expressions.template(Integer.class, "FIELD({0}, {1})", column, ids);
}
์ฒ์์๋ biding log๊ฐ [1, 2, 3] ์ด๋ ๊ฒ ๋์์ String์์๋ โโ
๋ก ๊ฐ์ธ์ง๋ค๋ ๊ฒ์ ์๊ฐํ์ง ๋ชปํ๋ค.