2013年11月18日 星期一

mybatis - Mapper.xml語法參數使用方式

參考:Mapper XML Files

有兩種使用方式:

  1. 使用#{data}
    使用$就等同使用JDBC中的PreparedStatement方式設定參數,如下:
     
     < select id="selectPerson" parametertype="int" resulttype="hashmap">
      SELECT * FROM PERSON WHERE ID = #{id}
     </ select>
    

    類似於我們直接使用以下的方式:
     
    // Similar JDBC code, NOT MyBatis…
    String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
    PreparedStatement ps = conn.prepareStatement(selectPerson);
    ps.setInt(1,id);
    

    此種方式最明顯的好處就是防止SQL injection
  2. 使用${data}
    此種方式等於簡單的字串相加,所以假設以上的ID是字串形態的參數,那麼我們就必須在前後加上單引號('):
     
      < select id="selectPerson" parameterType="int" resultType="hashmap">
        SELECT * FROM PERSON WHERE ID = '${id}'
      < /select>
    

    所以上述的方式僅僅是組成SQL COMMAND:SELECT * FROM PERSON WHERE ID = 'iddata'直接送到sql去執行,
    最明顯的問題就是SQL injection,因此在mybatis的官方說明上也標注僅可能避免使用此方式.

沒有留言:

張貼留言