MyBatis引數傳遞
阿新 • • 發佈:2019-01-23
向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(); // 需要手動提交事務