HashMap에 정보를 담아 parameter로 넘긴다...
<select id="selectAllMemberMonthWarface" parameterType="hashmap" resultType="hashmap">
select * from (select code, nick from guildmember) member, ${table} score where member.code = score.code
</select>
$으로 해야 자동으로 set을 안한다. #으로하면 자동으로 set을 해줌
그런데 항상 느끼지만 정말... 비효율적인거 같다.
어쩔수 없이 String 하나만 넘기는 것이더라도 String 역시 class 타입이기에 set/get 메서드로 찾기에 안됨...
그럼 #을 붙여서 하면 안되냐? 라고 할수 있지만 set이 된다는건 '내용' 이렇게 되기에 할수가 없다.
그예제로
<select id="load" parameterType="string" resultMap="AddressVO">
select * from #{table}
</select>
시행을 해보면 Exception이 장렬히 발생한다...
Exception 메세지를 보면
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''table'' at line 1 Query is: sql : 'select * from ?', parameters : ['table'] ### The error may involve com.mybatis.kr.AddressDAO.load-Inline ### The error occurred while setting parameters ### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''table'' at line 1 Query is: sql : 'select * from ?', parameters : ['table'] org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) javax.servlet.http.HttpServlet.service(HttpServlet.java:620) javax.servlet.http.HttpServlet.service(HttpServlet.java:727) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
줄 그은 부분을 보면 파라미터로 보낸 것이 #으로 했기에 set이 되므로 자동적으로 ' 이 자동적으로 양 옆에 붙어서 소용이 없다.
그래서 그냥 짜증나더라도 맵에다가 넣어서 쓰길바람... 그래야 암 안걸림...
'Code Archive > myBatis' 카테고리의 다른 글
| MariaDB 테이블 Mybatis로 검색 방법 (0) | 2015.04.08 |
|---|---|
| 메이븐을 이용한 mybatis getting started (0) | 2015.03.31 |