{"id":420,"date":"2012-01-18T06:52:32","date_gmt":"2012-01-18T06:52:32","guid":{"rendered":"http:\/\/brain.dailyon.net\/?p=420"},"modified":"2012-01-18T06:52:32","modified_gmt":"2012-01-18T06:52:32","slug":"mybatis-dynamicquery-%ec%82%ac%ec%9a%a9%eb%b2%95","status":"publish","type":"post","link":"https:\/\/blog.goorigo.com\/?p=420","title":{"rendered":"myBATIS : DynamicQuery \uc0ac\uc6a9\ubc95"},"content":{"rendered":"<p>DynamicQuery\ubd80\ubd84\uc5d0 \uc0ac\uc6a9\ud55c \uc635\uc158 \uc678\uc5d0 \ub2e4\uc591\ud55c \uc635\uc158\uc774 \uc81c\uacf5 \ub41c\ub2e4.<br \/>\n\uc77c\ubc18\uc801\uc73c\ub85c \uc774\ub7f0 \uc635\uc158\ub4e4\uc744 \uc774\uc6a9\ud560\ub54c DAO\uc5d0 \ucffc\ub9ac\uac00 \ubc15\ud600\uc788\uc744 \uacbd\uc6b0 \ub9e4\uc6b0 \ubcf5\uc7a1\ud574\uc9c4\ub2e4.<br \/>\n\ub530\ub77c\uc11c \uc2a4\ud1a0\uc5b4\ub4dc \ud504\ub85c\uc2dc\uc800\ub97c \uc774\uc6a9\ud55c\ub2e4\uac70\ub098 \ud558\ub294 \ubc29\uc2dd\uc744 \ud0dd\ud558\uac8c \ub418\ub294\ub370, iBATIS\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \uc635\uc158\ub4e4\uc744 \uc0b4\ud3b4\ubcf4\uc790<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\ub2e8\ud56d\uc5f0\uc0b0 : IsNull, isNotNull, isEmpty, isNotEmpty<br \/>\n\uc774\ud56d\uc5f0\uc0b0  : isEqual, isNotEqual, isGreaterThan, isGreaterEqual, isLessThan, isLessEqual<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n<!--property\uac00 \uc874\uc7ac \ud558\ub294\uc9c0 \uac80\uc0ac(map\uc758\uacbd\uc6b0 property\ub97c key\ub85c \uac80\uc0c9\uc2e4\ud328) --><\/p>\n<p><!--property\uac00 \uc874\uc7ac \ud558\uc9c0 \uc54a\ub294\uc9c0 \uac80\uc0ac(map\uc758\uacbd\uc6b0 property\ub97c key\ub85c \uac80\uc0c9\uc2e4\ud328) --><\/p>\n<p><!--property\uac00 null\uc778\uc9c0 \uac80\uc0ac --><\/p>\n<p><!--property\uac00 null\uc774 \uc544\ub2cc\uc9c0 \uac80\uc0ac --><\/p>\n<p><!-- property\uac00 \ube44\uc5b4\uc788\ub294\uc9c0 \uac80\uc0ac(\"\".equals) \uac80\uc0ac--><\/p>\n<p><!-- property\uac00 \ube44\uc5b4\uc788\uc9c0 \uc54a\uc740\uc9c0 \uac80\uc0ac(!\"\".equals) \uac80\uc0ac--><\/p>\n<p><!-- property\uac00 \ube44\uad50\uac12\uacfc \uac19\uc740\uc9c0 \uac80\uc0ac--><\/p>\n<p><!-- property\uac00 \ube44\uad50\uac12\uacfc \uac19\uc9c0 \uc54a\uc740\uc9c0 \uac80\uc0ac--><\/p>\n<p><!-- property\uac00 \ube44\uad50\uac12\ubcf4\ub2e4 \ud070\uc9c0 \uac80\uc0ac --><\/p>\n<p><!-- property\uac00 \ube44\uad50\uac12\ubcf4\ub2e4 \ud070\uac70\ub098 \uac19\uc740\uc9c0  \uac80\uc0ac --><\/p>\n<p><!-- propety\uac00 \uc791\uc740\uc9c0 \uac80\uc0ac --><\/p>\n<p><!-- propety\uac00 \uc791\uac70\ub098 \uac19\uc740\uc9c0  \uac80\uc0ac --><\/p>\n<p> <!-- property\ub97c \ubc18\ubcf5\ud558\uba70 \ucd94\uac00. \ubc18\ubcf5\uc2dc \uac12\uc758 \uc0ac\uc774\uc5d0 conjunction\uc815\uc758 \ubb38\uc790 \uc0bd\uc785 --><\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>\uc870\uac74\uc5d0 property\ub294 \ub2f9\uc5f0\ud788 \ub4e4\uc5b4\uac00\ub294\uac83\uc774 \uc6d0\uce59\uc774\ub2e4.<br \/>\n\ube44\uad50\ud560 \ub300\uc0c1\uc774\ub098 \uac80\uc0ac\ud560 \ub300\uc0c1\uc774 \uc5c6\ub2e4\uba74 \ubb50\ud558\ub7ec \uc774\ub7f0 \uc870\uac74\uc744 \uc0ac\uc6a9 \ud558\uaca0\ub294\uac00?<br \/>\n\uc5b4\ub835\uc9c0 \uc54a\uc740 \ub0b4\uc6a9\uc774\uc9c0\ub9cc \ud55c\uac00\uc9c0 \uc219\uc9c0\ud574\uc57c \ud560 \uc0ac\ud56d\uc774 \uc788\ub2e4.<\/p>\n<p>\ubc14\ub85c \uc774\ud56d\uc5f0\uc0b0\uc790 \ubd80\ubd84\uc5d0\uc11c compareValue\uc640 compareProperty\uc778\ub370 \ub2e4\ub978 \ubd80\ubd84\uc740 property\ub97c \uc774\uc6a9\ud574 \ube44\uad50\ud588\ub2e4.<br \/>\n\uac19\uc740 property\uac00 \ub4e4\uc5b4\uac00\ub294\uac78\ub85c \ubcf4\uc544 compareProperty\ub294 \ud504\ub85c\ud37c\ud2f0 \uc911\uc5d0\uc11c \ube44\uad50\ud558\ub294 \uac83\uc744\uc54c\uc218 \uc788\ub2e4.<br \/>\n\uc989 &#8216;\uac19\uc774 \ub118\uc5b4\uc628 \uac1d\uccb4\uc758 \ud504\ub85c\ud37c\ud2f0\uc640 \ube44\uad50&#8217;\ud558\uc5ec \uad6c\ubb38\uc744 \ucd94\uac00\ud560\uc9c0 \uc120\ud0dd\ud558\ub294\uac83\uc774\ub2e4.<\/p>\n<p>compareValue\ub294 \uc815\uc801\uc778 \uac12\uc774\ub2e4. \uc608\ub97c\ub4e4\uc5b4 \uc870\uac74\uc774 &#8216;\uc131\uc801\uc774 100\uc810 \uc774\ud558&#8217;\uc77c \uacbd\uc6b0 100\uc740 \uc815\uc801\uc778 \uac12\uc774\ub2e4. \ub9cc\uc57d \uc774\uac83\uc744 compareProperty\ub85c \uc774\uc6a9\ud55c\ub2e4\uba74 \uc0ac\uc6a9\ud560\ub54c\ub9c8\ub2e4 &#8216;100&#8217;\uc758 \uac12\uc744 \uc14b\ud305\ud574\uc57c\ud560 \uac83\uc774\ub2e4.<br \/>\n\uc774\ub7f4\ub54c  compareValue\ub97c \uc774\uc6a9\ud558\uba74 \ud504\ub85c\uadf8\ub7a8 \ucf54\ub4dc\uc5d0 \ubcc4\ub3c4\ub85c \uad00\ub9ac\ud560 \ud544\uc694\uac00 \uc5c6\uc73c\ubbc0\ub85c \uc720\uc6a9\ud558\uac8c \uc0ac\uc6a9\ud560\uc218 \uc788\ub2e4.<br \/>\n\uadf8\ub7fc \uc608\uc81c\ub97c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n<p>boardManager.xml<\/p>\n<p>  SELECT<br \/>\n    A.POST_ID AS POST_ID<br \/>\n    ,A.POST_TITLE AS POST_TITLE<br \/>\n    ,A.POST_WRITER AS POST_WRITER<br \/>\n    ,B.POST_BODY AS POST_BODY<br \/>\n  FROM TB_MAIN_BOARD A, TB_SUB_BOARD B<br \/>\n  WHERE A.POST_ID = B.POST_ID<\/p>\n<p>        11=1<\/p>\n<p>        a.post_id = #postId#<\/p>\n<p>        post_title like &#8216;%&#8217; || #postTitle# || &#8216;%&#8217;<\/p>\n<p>        post_Writer like &#8216;%&#8217; || #postWriter# || &#8216;%&#8217;<\/p>\n<p>        post_body like &#8216;%&#8217; || #postBody# || &#8216;%&#8217;<\/p>\n<p>    insert into tb_main_board<br \/>\n    values(#postId#,#postTitle#,#postWriter#)<\/p>\n<p>    insert into tb_sub_board(post_id, post_body)<br \/>\n    values(#postId#,#postBody#)<\/p>\n<p>BoardBean.java<\/p>\n<p>package pupustory.ibatis.beans;<br \/>\npublic class BoardBean {<br \/>\n    String postId;<br \/>\n    String postTitle;<br \/>\n    String postWriter;<br \/>\n    String postBody;<br \/>\n    public String getPostBody() {<br \/>\n        return postBody;<br \/>\n    }<br \/>\n    public void setPostBody(String postBody) {<br \/>\n        this.postBody = postBody;<br \/>\n    }<br \/>\n    public String getPostId() {<br \/>\n        return postId;<br \/>\n    }<br \/>\n    public void setPostId(String postId) {<br \/>\n        this.postId = postId;<br \/>\n    }<br \/>\n    public String getPostTitle() {<br \/>\n        return postTitle;<br \/>\n    }<br \/>\n    public void setPostTitle(String postTItle) {<br \/>\n        this.postTitle = postTItle;<br \/>\n    }<br \/>\n    public String getPostWriter() {<br \/>\n        return postWriter;<br \/>\n    }<br \/>\n    public void setPostWriter(String postWriter) {<br \/>\n        this.postWriter = postWriter;<br \/>\n    }<br \/>\n    public String toString() {<br \/>\n        return &#8220;postId[&#8220;+postId+&#8221;]&#8221;<br \/>\n        +&#8221;postTitle[&#8220;+postTitle+&#8221;]&#8221;<br \/>\n        +&#8221;postWriter[&#8220;+postWriter+&#8221;]&#8221;<br \/>\n        +&#8221;postBody[&#8220;+postBody+&#8221;]&#8221;;<br \/>\n    }<br \/>\n}<br \/>\n BoardBiz.java<\/p>\n<p>package pupustory.ibatis.board;<br \/>\nimport pupustory.ibatis.manager.DBManager;<br \/>\nimport pupustory.ibatis.beans.BoardBean;<br \/>\nimport java.sql.SQLException;<br \/>\npublic class BoardBiz {<br \/>\n    DBManager manager = DBManager.getInstance();<br \/>\n    \/\/ \uac00\uc0c1 \ub370\uc774\ud130 \uc0bd\uc785<br \/>\n    public void insertVirData() throws SQLException{<br \/>\n        BoardBean bean = null;<br \/>\n        final int MAX_BOARD_DATA = 10;<br \/>\n        manager.startTransaction();<br \/>\n        manager.startBatch();<br \/>\n        for (int i=0;i&lt;MAX_BOARD_DATA;i++) {<br \/>\n            bean = new BoardBean();<br \/>\n            bean.setPostId(i+&quot;&quot;);<br \/>\n            bean.setPostTitle(&quot;\uc81c\ubaa9! &quot;+i);<br \/>\n            bean.setPostWriter(&quot;pupustory&quot;+i);<br \/>\n            bean.setPostBody(&quot;\ubcf8\ubb38 \ud788\ud788\ud788\ud788 \ud5e4\ud5e4&quot;+i);<br \/>\n            manager.getMapper().insert(&quot;insert.main.board&quot;, bean);<br \/>\n            manager.getMapper().insert(&quot;insert.sub.board&quot;, bean);<br \/>\n        }<br \/>\n        manager.executeBatch();<br \/>\n        manager.commitTransaction();<br \/>\n    }<br \/>\n    \/\/ \uac8c\uc2dc\ubb3c \uc870\ud68c<br \/>\n    public java.util.List getPost(BoardBean bean)<br \/>\n        throws SQLException {<br \/>\n        return<br \/>\n        (java.util.List)manager.getMapper().queryForList(&quot;select.board&quot;,bean);<br \/>\n    }<br \/>\n}<\/p>\n<p>StartApp.java<\/p>\n<p>package pupustory.ibatis.board;<br \/>\nimport java.sql.SQLException;<br \/>\nimport pupustory.ibatis.beans.BoardBean;<br \/>\npublic class StartApp {<br \/>\n    public static void main(String ar[]) throws SQLException{<br \/>\n        BoardBiz biz = new BoardBiz();<br \/>\n        \/\/biz.insertVirData();<br \/>\n        BoardBean bean = null;<br \/>\n        java.util.List list = biz.getPost(bean);<br \/>\n        for (int i=0;i&lt;list.size();i++) {<br \/>\n            System.out.println(list.get(i).toString());<br \/>\n        }<br \/>\n        bean = new BoardBean();<br \/>\n        \/\/ id 3\ubc88 \uac8c\uc2dc\ubb3c \uc870\ud68c<br \/>\n        bean.setPostId(&quot;3&quot;);<br \/>\n        list = biz.getPost(bean);<br \/>\n        for (int i=0;i&lt;list.size();i++) {<br \/>\n            System.out.println(list.get(i).toString());<br \/>\n        }<br \/>\n        \/\/ \ubcf8\ubb38\uc5d0 &#039;4&#039;\ubb38\uc790 \ud3ec\ud568\ud55c \uac8c\uc2dc\ubb3c \uc870\ud68c<br \/>\n        bean = new BoardBean();<br \/>\n        \/\/bean.setPostId(&quot;2&quot;);<br \/>\n        bean.setPostBody(&quot;4&quot;);<br \/>\n        list = biz.getPost(bean);<br \/>\n        for (int i=0;i&lt;list.size();i++) {<br \/>\n            System.out.println(list.get(i).toString());<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n\uc870\ud68c\uc870\uac74\uc5d0 \ub4e4\uc5b4\uc62c \uac12\uc744 \ud655\uc778\ud558\uace0, null\uc774 \uc544\ub2d0\uacbd\uc6b0 \uac80\uc0c9\ud574\uc11c \ucd9c\ub825\ud55c\ub2e4. equal\uac19\uc740 \uac80\uc0c9\uc870\uac74\uc744 \ucd94\uac00\ud558\ub824 \ud588\uc9c0\ub9cc.. \uadc0\ucc2e\uae30\ub3c4\ud574\uc11c &#8211;; \uc5b4\ucc28\ud53c \uc0ac\uc6a9\ubc95\uc740 \ub3d9\uc77c\ud558\ub2e4. \uadf8\ub9ac\uace0 dynamic\ubd80\ubd84\uc758 prepend\ub294 \uc0ad\uc81c\ud588\ub2e4. \uc774\uc720\ub294 \uc774\ubbf8 join\uc744 \ud558\uae30\uc704\ud574 where\ub97c \ud638\ucd9c\ud588\uace0, \ub4a4\uc5d0 \uc62c \uc870\uac74\uc774 \uc788\uc744\uc9c0 \uc5c6\uc744\uc9c0 \ubbf8\uc9c0\uc218\ub2e4. \ub530\ub77c\uc11c \uc0ad\uc81c \ud588\ub2e4. 1=1\uc740 \uac8c\uc2dc \uc804\uc5d0 \uba87\uac00\uc9c0 \ub9cc\uc9c0\uc791 \uac70\ub9ac\ub2e4 \ub0a8\uc740 \ucf54\ub4dc\uc774\ubbc0\ub85c \ubb34\uc2dc\ud574\ub3c4 \ubb34\uad00\ud558\ub2e4.<\/p>\n<p>\ub2e8\ud56d,\uc774\ud56d \uac80\uc0c9\uc870\uac74\uc740 \uc704\uc640 \uac19\uc774 \uc218\ud589\ud558\uba74 \ub418\ubbc0\ub85c \uc5b4\ub824\uc6b8 \uac83\uc774 \uc5c6\ub2e4. \uadf8\ub807\ub2e4\uba74 \uc774\ubc88\uc5d4 \uc774\ud130\ub808\uc774\ud130\uc5d0 \ub300\ud574 \uc54c\uc544\ubcfc \uac83\uc774\ub2e4. \uc774\uc804\uc5d0 \uc124\uba85 \ud588\uc9c0\ub9cc \ub9cc\uc57d \uc0ac\uc6a9\uc790\uac00 &#039; where board_id in (&#8230;.) &#039;\uc640 \uac19\uc774 \uba87\uac74\uc774 \ub4e4\uc5b4\uc62c\uc9c0 \ubaa8\ub974\ub294 \uacbd\uc6b0\uc5d0 \uc720\uc6a9 \ud558\ub2e4.<\/p>\n<p>\uc774\ubd80\ubd84\uc740 $$\ub97c \uc774\uc6a9\ud55c statment\ub97c \uc774\uc6a9\ud560 \uc218\ub3c4 \uc788\uaca0\uc9c0\ub9cc \uc774\uac74 \ub9e4\uc6b0 \uc704\ud5d8\ud558\ub2e4. sql injection\ub54c\ubb38\uc5d0 \uadf8\ub807\ub2e4. \uc5b4\ud50c\uc5d0\uc11c .replace\ud588\ub2e4\uba74 \uc0c1\uad00 \uc5c6\uaca0\uc9c0\ub9cc \uadf8\ub798\ub3c4 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc774\uc6a9\ud558\ub2c8 .. \uae30\ub2a5\uc744 \uc774\uc6a9\ud574 \ubcf4\ub3c4\ub85d \ud558\uc790.<\/p>\n<p>\uba3c\uc800 IN ( &#8230;) \ubd80\ubd84\uc5d4 \uc815\ud655\ud788 \uc5bc\ub9c8\uc758 \ubb38\uc790\uac00 \uc62c\uc9c0 \ubaa8\ub978\ub2e4. \ud55c\uac00\uc9c0 \uc720\ucd94\ud560 \uc218 \uc788\ub294 \uac83\uc740 \uc5ec\uae30\uc5d4 \ubc30\uc5f4\uc774 \uc801\ud569\ud55c \uac83 \uc774\ub2e4. \uc0c8\ub85c\uc6b4 \uc608\ub97c \ub9cc\ub4dc\ub294 \uac83 \ubcf4\ub2e4 \uc704\uc758 \ucf54\ub4dc\ub97c \uc870\uae08 \ubcc0\uacbd\ud574 \uc791\uc131\ud558\ub3c4\ub85d \ud558\uc790. \uba3c\uc800 \ube48\uc988\uc5d0 POST_ID\uac12\uc774 \uc800\uc7a5\ub420 \ubc30\uc5f4 \ubcc0\uc218\ub97c \ud558\ub098 \ucd94\uac00\ud55c\ub2e4.<\/p>\n<p>private String rePostId;<br \/>\npublic String getRePostId() {<br \/>\n    return rePostId;<br \/>\n}<br \/>\npublic void setRePostId(String rePostId) {<br \/>\n    this.rePostId = rePostId;<br \/>\n}<br \/>\npublic String toString() {\/\/toString()\ub294 \uac12 \ud655\uc778\uc744 \uc704\ud574 \ubcc0\uacbd \ud568<br \/>\n    return &quot;postId [&quot; +rePostId+&quot;]&quot;<br \/>\n        +&quot; postTitle [&quot; +postTitle+&quot;]&quot;<br \/>\n        +&quot; postWriter [&quot; +postWriter+&quot;]&quot;<br \/>\n        +&quot; postBody [&quot; +postBody+&quot;]&quot;<br \/>\n        +&quot; parentPostId [&quot; +parentPostId+&quot;]&quot;;<br \/>\n}<br \/>\n\uc774\uc81c \uc911\uc694\ud55c sqlmap\ubd80\ubd84\uc774\ub2e4.<\/p>\n<p>  SELECT * FROM TB_QNA_BOARD<\/p>\n<p>    #postId[]#<\/p>\n<p>\ubc18\ubcf5 \ubd80\ubd84\uc744 iterator\ub97c \uc0ac\uc6a9\ud588\ub2e4. \uc2e4\ud589\ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n<p>package pupustory.ibatis.dynamicquery;<br \/>\nimport pupustory.ibatis.beans.PostReplyBean;<br \/>\npublic class StartApp {<br \/>\n    public static void main(String ar[]) throws java.sql.SQLException {<br \/>\n        PostReplyBean bean = new PostReplyBean();<br \/>\n        DynamicQueryBiz biz = new DynamicQueryBiz();<br \/>\n        String[] postIds = {&#8220;1&#8243;,&#8221;2&#8243;,&#8221;4&#8243;,&#8221;5&#8243;,&#8221;7&#8243;,&#8221;9&#8221;};<br \/>\n        bean.setPostId(postIds);<br \/>\n        java.util.List list = biz.getPostBoard(bean);<br \/>\n        if (list.get(0) instanceof PostReplyBean) {<br \/>\n            System.out.println(&#8220;true&#8221;);<br \/>\n        }<br \/>\n        for (int i=0;i<\/p>\n<p> SELECT * FROM \ud14c\uc774\ube14 \uba85<br \/>\nWHERE 1 = 1<\/p>\n<p>\ud14c\uc774\ube14\uba85.name LIKE CONCAT(&#8216;%&#8217;,#\uac80\uc0c9\ud560\ubb38\uad6c#,&#8217;%&#8217;)<\/p>\n<p>AND \ub2e4\ub978 \uc870\uac74\ub4e4 \ucd94\uac00&#8230;<\/p>\n<p>\uc704 \uc608\uc5d0\uc11c 1=1 \uc744 \uba3c\uc800 \ucd94\uac00\ud574\uc900 \uc774\uc720\ub294 dynamic \ucffc\ub9ac\uc5d0\uc11c \uc5d0\ub7ec\uac00 \uc788\uc5c8\uc744 \ub54c \uc5ec\uae30\uc5d0 prepend \ub85c WHERE\ub97c \uac78\uc5c8\ub2e4\uba74 \uadf8 \ubb38\uad6c\uac00 \uc544\uc608 \uc2e4\ud589\uc774 \uc548\ub418\uace0 \ub2e4\uc74c AND \ub2e4\ub978 \uc870\uac74\ub4e4 \ub85c \ub118\uc5b4\uac00\uac8c \ub41c\ub2e4. \uadf8\ub798\uc11c mysql \ubb38\ubc95 \uc0c1 WHERE \uc5c6\uc774 AND\uac00 \ub4f1\uc7a5\ud574\uc11c \ubb38\ubc95\uc5d0\ub7ec\uac00 \ub098\uac8c \ub418\ubbc0\ub85c \uc774\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574 WHERE\ub97c \uc870\uac74\uc744 \uba3c\uc800 \uc8fc\ub824\uace0 1=1 \uc774\ub77c\ub294 \uac83\uc744 \ub123\uc5b4 \uc900 \uac83\uc774\ub2e4.<\/p>\n<p>[\ucd9c\ucc98] http:\/\/netholic.tistory.com\/99<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>iBATIS \ud2b8\ub80c\uc81d\uc158 \uc0ac\uc6a9\uc2dc \uc8fc\uc758\uc0ac\ud56d<\/p>\n<p>SqlMapClient sqlMap = SqlMapClientFactory.getInstance().getClient();<\/p>\n<p>try {<br \/>\n   sqlMap.startTransaction();<br \/>\nObject obj = sqlMap.queryForObject(&#8220;selectSeq&#8221;);<br \/>\nint createSeq = 0;<br \/>\nif(obj==null){<br \/>\ncreateSeq = 1;<br \/>\n}else{<br \/>\ncreateSeq = (Integer)obj;<br \/>\ncreateSeq += 1;<br \/>\n}<\/p>\n<p>    article.setSequenceNo(createSeq);<br \/>\nsqlMap.insert(&#8220;create&#8221;, article);<br \/>\n   sqlMap.commitTransaction();<br \/>\nreturn createSeq;<br \/>\n}<br \/>\ncatch (SQLException e)<br \/>\n{<br \/>\nthrow new RuntimeException(&#8220;\uac8c\uc2dc\ubb3c \ub4f1\ub85d \uc2e4\ud328&#8221;, e);<br \/>\n}<br \/>\nfinally<br \/>\n{<br \/>\n    \/\/\ubc18\ub4dc\uc2dc \ud574\uc918\uc57c \ud569\ub2c8\ub2e4.\uc548\uadf8\ub7ec\uba74 \ucee4\ub125\uc158\ubd80\uc871\uc774 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<br \/>\nsqlMap.endTransaction();<br \/>\n}<\/p>\n<p>[\ucd9c\ucc98] http:\/\/realcool.egloos.com\/689804<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>iBATIS jUnit Test<\/p>\n<p>@Autowired, @Transactional \uc744 \uc0ac\uc6a9\ud558\ub824\uba74 \uc544\ub798\uc640 \uac19\uc774 spring context\uc5d0 \ubc18\ub4dc\uc2dc \ub4e4\uc5b4\uac00\uc57c \ud558\uba70<br \/>\nibatis \uc124\uc815\uc744 \uc704\ud55c sqlMapConfig.xml \uc758 \uacbd\ub85c\ub97c \uc124\uc815\ud574\uc900\ub2e4.<\/p>\n<p>    <!-- ibatis --><\/p>\n<p>&#8211; sqlMapConfig.xml<br \/>\n\uac00\uc7a5 \uae30\ubcf8\uc801\uc778 \uc124\uc815\ub9cc \uac00\uc838\uc654\uc73c\uba70 useStatementNamespaces\uac00 default=false \uc774\ubbc0\ub85c true\ub85c \ubcc0\uacbd\ud574\uc92c\ub2e4.<\/p>\n<p>&#8211; game.xml , world.xml<br \/>\n\uc774 \ub450\uac00\uc9c0\ub294 1\ub300\ub2e4 \uad00\uacc4\uc774\ub2e4.<br \/>\n\uc77c\ub2e8 join\uc774 \uc544\ub2cc lazy loading \ubc29\uc2dd\uc73c\ub85c \uad6c\ud604\ud574\ubd24\ub2e4.<\/p>\n<p>game.xml<\/p>\n<p>select * from GAME where GAME_ID = #value#<\/p>\n<p>world.xml<\/p>\n<p>select * from WORLD where WORLD_ID = #value# ORDER BY GAME_ID ASC<\/p>\n<p>Game.java \ub294 \uc544\ub798\uc640 \uac19\uc774 \uad6c\uc131\ub418\uc5b4 \uc788\ub2e4.<\/p>\n<p>    private int gameId;<br \/>\nprivate int position;<br \/>\nprivate String name;private List worldList;<br \/>\nWorld.java \ub294 \uc0dd\ub7b5.<\/p>\n<p>\uc989 \ub098\ub294 \uac8c\uc784\uc544\uc774\ub514\ub85c \ucffc\ub9ac\ub97c \ub54c\ub9ac\uba74 \uadf8 \uac8c\uc784\uacfc \uac70\uae30 \ud574\ub2f9\ub418\ub294 worldList\ub97c \uac00\uc838\uc624\uac8c\ub41c\ub2e4.<br \/>\n\uac70\uae30 \ud574\ub2f9\ub418\ub294 DAO\ucffc\ub9ac \ucf54\ub4dc\ub294 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n<p>import java.util.List;<br \/>\nimport org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;<\/p>\n<p>public class WorldDao extends SqlMapClientDaoSupport {<br \/>\n@SuppressWarnings(&#8220;unchecked&#8221;)<br \/>\npublic List findById(int id) {<br \/>\nreturn getSqlMapClientTemplate().queryForList(&#8220;World.findById&#8221;, id);<br \/>\n}<br \/>\n}<\/p>\n<p>\uc774\ud558\ub294 junit4.4 + spring2.5 DAO \ud14c\uc2a4\ud2b8\ucf54\ub4dc\ub2e4.<\/p>\n<p>import java.util.List;<\/p>\n<p>import static org.junit.Assert.*;<br \/>\nimport org.junit.Test;<br \/>\nimport org.junit.runner.RunWith;<br \/>\nimport org.springframework.beans.factory.annotation.Autowired;<br \/>\nimport org.springframework.test.context.ContextConfiguration;<br \/>\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;<br \/>\nimport org.springframework.test.context.transaction.TransactionConfiguration;<\/p>\n<p>@RunWith(SpringJUnit4ClassRunner.class)<br \/>\n@ContextConfiguration(locations={&#8220;file:web\/WEB-INF\/context\/global-test.xml&#8221;})<br \/>\n@TransactionConfiguration(transactionManager=&#8221;txManager&#8221;, defaultRollback=true)<br \/>\npublic class WorldDaoTest {<\/p>\n<p>private static final int WORLD_ID = 2;<\/p>\n<p>@Autowired<br \/>\nprivate WorldDao worldDao;<\/p>\n<p>@Test<br \/>\npublic void findByWorldId() {<br \/>\nList worldList = worldDao.findById(WORLD_ID);<br \/>\ncheck(worldList.get(0));<br \/>\n}<\/p>\n<p>private void check(World world) {<br \/>\nassertEquals(WORLD_ID, world.getWorldId());<br \/>\n}<br \/>\n}<\/p>\n<p>[\ucd9c\ucc98] iBATIS DynamicQuery \uc0ac\uc6a9\ubc95 + etc|\uc791\uc131\uc790 \uc139\uc26c\uad6c\uc5fc\uac00\uc774<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DynamicQuery\ubd80\ubd84\uc5d0 \uc0ac\uc6a9\ud55c \uc635\uc158 \uc678\uc5d0 \ub2e4\uc591\ud55c \uc635\uc158\uc774 \uc81c\uacf5 \ub41c\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c \uc774\ub7f0 \uc635\uc158\ub4e4\uc744 \uc774\uc6a9\ud560\ub54c DAO\uc5d0 \ucffc\ub9ac\uac00 \ubc15\ud600\uc788\uc744 \uacbd\uc6b0 \ub9e4\uc6b0 \ubcf5\uc7a1\ud574\uc9c4\ub2e4. \ub530\ub77c\uc11c \uc2a4\ud1a0\uc5b4\ub4dc \ud504\ub85c\uc2dc\uc800\ub97c \uc774\uc6a9\ud55c\ub2e4\uac70\ub098 \ud558\ub294 \ubc29\uc2dd\uc744 \ud0dd\ud558\uac8c \ub418\ub294\ub370, iBATIS\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \uc635\uc158\ub4e4\uc744 \uc0b4\ud3b4\ubcf4\uc790&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts\/420"}],"collection":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=420"}],"version-history":[{"count":0,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts\/420\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}