1. 程式人生 > >MyBatis引數傳遞

MyBatis引數傳遞

MyBatis的對映SQL語句傳遞引數使用的是selectList、insert等等方法中的第二個引數來完成的,可以傳入Map或者對應的JavaBean,小例子:

XML:

  <select id="selectFoodById" resultType="java.util.Map">
    select * from food where FOODID = #{foodId}
  </select>

XML:
 SqlSession session = getSession();
 Map<String, Integer> map = new HashMap<String, Integer>();
 map.put("foodId", 2);
 System.out.println(session.selectList("Food.selectFoodById", map));

使用#{key}的方式,實際上是JDBC中 ? 作為佔位符的方式傳遞的,能夠防止SQL注入。還有一種是用 ${key},EL表示式的形式:

  <select id="selectFoodByName" resultType="java.util.Map">
    select * from food where FOODNAME like '%${foodName}%'
  </select>

這種方式就是傳統的SQL語句拼接,不過這種方式可以使用 like 模糊查詢,類似上面這樣的值傳遞方式使用 #{key}要做模糊查詢只能在傳遞的值上拼接百分號...

 對比一下兩種方式:

     #{Key} : 使用?佔位符預編譯SQL,能夠防止SQL注入,字串型別會自動加 ' ' 單引號

     ${Key} : 直接使用對應的值來替換對應的鍵,如果是字串需要手動新增單引號

再貼一個insert的小例子:

 <insert id="insertFood">
          insert into food values(FOOD_SEC.NEXTVAL , #{foodName} , #{price})
  </insert>
SqlSession session = getSession();
Food food = new Food();
food.setFoodName("鼎湖上素");
food.setPrice("55");
session.insert("Food.insertFood" , food);
session.commit();        // 需要手動提交事務