{"id":5862,"date":"2022-07-27T13:20:56","date_gmt":"2022-07-27T04:20:56","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=5862"},"modified":"2022-09-28T15:52:23","modified_gmt":"2022-09-28T06:52:23","slug":"querydsl-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-%ed%95%a8%ec%88%98","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=5862","title":{"rendered":"QueryDSL \uc0ac\uc6a9\ud558\uae30 &#8211; \ud568\uc218"},"content":{"rendered":"<h1>QueryDSL \uc0ac\uc6a9\ud558\uae30 &#8211; \ud568\uc218<\/h1>\n<h2>DB \ub3c5\ub9bd\uc801\uc778 \ubc29\ubc95<\/h2>\n<h3>QueryDSL \uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \ud568\uc218\uc778 \uacbd\uc6b0<\/h3>\n<p>ANSI \ud568\uc218\uc758 \uacbd\uc6b0 QueryDSL \uc5d0\uc11c \uc9c0\uc6d0\ud574 \uc8fc\uae30\uc5d0,<br \/>\n\ubc14\ub85c \ud568\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre><code class=\"language-java\">    public List&lt;String&gt; upper() {\n        System.out.println(&quot;DSL Called&quot;);\n        return jpaQueryFactory\n                .select(user.username.upper().as(&quot;username&quot;))\n                .from(user)\n                .where(user.username.eq(&quot;Lee&quot;)).fetch();\n    }<\/code><\/pre>\n<h3>Projections \uc758 \uc0dd\uc131\uc790 \ud328\ud134 \uc774\uc6a9<\/h3>\n<p><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=5853\">\ucc38\uc870<\/a><\/p>\n<p>\ud568\uc218\uc758 \uacb0\uacfc\uac12\uc774 \ub9ac\ud134\uac12\uc73c\ub85c\ub9cc \uc4f0\uc774\uace0,<br \/>\nwhere \uc870\uac74\uc808\uc5d0\uc11c \uc0ac\uc6a9\ub418\uc9c0 \uc54a\ub294 \uacbd\uc6b0 DTO \uc0dd\uc131\uc790\uc5d0\uc11c \ubcc0\ud658\ud574 \uc904 \uc218 \uc788\ub2e4.<\/p>\n<h2>DB \uc885\uc18d\uc801\uc778 \ubc29\ubc95<\/h2>\n<p>QueryDSL \uc5d0\uc11c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ud568\uc218\uc778\ub370,<br \/>\n\ub610 where \uc870\uac74\uc808\uc5d0\uc11c \uc0ac\uc6a9\ub418\uc5b4\uc57c \ud558\ub294 \uacbd\uc6b0,<br \/>\nDB \uc885\uc18d\uc801\uc778 \ubc29\ubc95\uc774\uc9c0\ub9cc \ub300\uc548\uc774 \uc5c6\uc73c\ubbc0\ub85c \uc774 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n<p>DB \uc885\uc18d\uc801\uc778 \ubc29\ubc95\uc5d0\ub3c4 \uba87\uac00\uc9c0 \ubc29\ubc95\uc774 \uc788\ub294 \ub4ef \ud558\uc9c0\ub9cc,<br \/>\n\uc5b4\ucc28\ud53c DB \ubcc0\uacbd\uc2dc \ucd94\uac00\uc791\uc5c5\uc774 \ud544\uc694\ud55c \uac83\uc740 \ub9c8\ucc2c\uac00\uc9c0\uc774\ubbc0\ub85c,<br \/>\n\ud55c\uac00\uc9c0\ub9cc \uc18c\uac1c\ud569\ub2c8\ub2e4.<\/p>\n<h3>\ud568\uc218\uba85\uc774 \ub4f1\ub85d\ub41c \uacbd\uc6b0<\/h3>\n<pre><code class=\"language-java\">    public List&lt;String&gt; substring() {\n        return jpaQueryFactory\n                .select(\n                        Expressions.stringTemplate(\n                                &quot;function(&#039;substring&#039;, {0}, {1})&quot;,\n                                user.email,\n                                Expressions.constant(2))\n                )\n                .from(user)\n                .where(user.username.eq(&quot;Lee&quot;)).fetch();\n    }<\/code><\/pre>\n<h3>\ud568\uc218\uba85\uc774 \ub4f1\ub85d\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0<\/h3>\n<p>\ud568\uc218\uba85\uc774 \ub4f1\ub85d\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc740 \uacbd\uc6b0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud55c\ub2e4.<br \/>\n\ub610, \ucee4\uc2a4\ud140 \ud568\uc218(custom function) \uc744 \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\ub3c4 \uc624\ub958\uac00 \ubc1c\uc0dd\ud55c\ub2e4.<\/p>\n<pre><code class=\"language-java\">    @Override\n    public List&lt;String&gt; left() {\n        return jpaQueryFactory\n                .select(\n                        Expressions.stringTemplate(\n                                &quot;function(&#039;left&#039;, {0}, {1})&quot;,\n                                user.email,\n                                Expressions.constant(2))\n                )\n                .from(user)\n                .where(user.username.eq(&quot;Lee&quot;)).fetch();\n    }<\/code><\/pre>\n<p>\uc774\ub7f4 \ub550 Dialect \ub97c \uc0c1\uc18d \ud6c4, \ud568\uc218\uba85\uc744 \ub4f1\ub85d\ud574 \uc8fc\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<pre><code class=\"language-java\">public class MyMariadbDialect extends MariaDB103Dialect {\n\n    public MyMariadbDialect() {\n        super();\n        registerFunction(\n                &quot;left&quot;,\n                new StandardSQLFunction(&quot;left&quot;, StandardBasicTypes.STRING)\n        );\n\n        \/\/ \/\/ Expressions.simpleTemplate(String.class, &quot;\uc0ac\uc6a9\uc790\uc815\uc758\ud568\uc218\uba85({0})&quot;, user.email)\n        \/\/ registerFunction(&quot;\uc0ac\uc6a9\uc790\uc815\uc758\ud568\uc218\uba85&quot;,\n        \/\/         new SQLFunctionTemplate(\n        \/\/             StandardBasicTypes.STRING,\n        \/\/             &quot;\uc0ac\uc6a9\uc790\uc815\uc758\ud568\uc218\uba85(?1)&quot;)\n        \/\/         );\n\n        \/\/ \uceec\ub7fc \ud0c0\uc785 \ucd94\uac00\n        \/\/ registerColumnType( Types.TIMESTAMP, &quot;datetime(6)&quot; );\n    }\n}<\/code><\/pre>\n<pre><code class=\"language-yaml\">spring:\n  jpa:\n    database-platform: com.example.querydsltest.config.MyMariadbDialect<\/code><\/pre>\n<h2>SqlServer<\/h2>\n<p>SqlServer \uc758 \uacbd\uc6b0 dbo \ub3c4 \uac19\uc774 \ubd99\uc5ec\uc8fc\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<pre><code class=\"language-java\">public class MySqlServerDialect extends SQLServer2012Dialect {\n\n    public MySqlServerDialect() {\n        super();\n\n        registerFunction(\n                &quot;dbo.getCateCodeFullDepthName&quot;,\n                new StandardSQLFunction(&quot;dbo.getCateCodeFullDepthName&quot;, StandardBasicTypes.STRING)\n        );\n    }\n}<\/code><\/pre>\n<pre><code class=\"language-java\">Expressions.stringTemplate(\n    &quot;dbo.getCateCodeFullDepthName({0})&quot;,\n    itemDisplayCategoryItemEntity.id.id).as(&quot;categoryFullName&quot;)<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>QueryDSL \uc0ac\uc6a9\ud558\uae30 &#8211; \ud568\uc218 DB \ub3c5\ub9bd\uc801\uc778 \ubc29\ubc95 QueryDSL \uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \ud568\uc218\uc778 \uacbd\uc6b0 ANSI \ud568\uc218\uc758 \uacbd\uc6b0 QueryDSL \uc5d0\uc11c \uc9c0\uc6d0\ud574 \uc8fc\uae30\uc5d0, \ubc14\ub85c \ud568\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. public List&lt;String&gt; upper() { System.out.println(&quot;DSL Called&quot;); return jpaQueryFactory .select(user.username.upper().as(&quot;username&quot;)) .from(user) .where(user.username.eq(&quot;Lee&quot;)).fetch(); } Projections \uc758 \uc0dd\uc131\uc790 \ud328\ud134 \uc774\uc6a9 \ucc38\uc870 \ud568\uc218\uc758 \uacb0\uacfc\uac12\uc774 \ub9ac\ud134\uac12\uc73c\ub85c\ub9cc \uc4f0\uc774\uace0, where \uc870\uac74\uc808\uc5d0\uc11c \uc0ac\uc6a9\ub418\uc9c0 \uc54a\ub294 \uacbd\uc6b0 DTO \uc0dd\uc131\uc790\uc5d0\uc11c \ubcc0\ud658\ud574 \uc904\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=5862\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43],"tags":[],"class_list":["post-5862","post","type-post","status-publish","format-standard","hentry","category-querydsl"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/5862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5862"}],"version-history":[{"count":10,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/5862\/revisions"}],"predecessor-version":[{"id":6511,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/5862\/revisions\/6511"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}