Mybatis的兩種取值方式#{ } 與${ } 使用時需要注意的地方
阿新 • • 發佈:2018-12-29
需要對映的介面:
/**
* 根據id查詢管理員
* @param id
* @return
*/
Manager retrieveManagerById(@Param("id")Integer id);
/**
* 根據名字查詢管理員
* @param name
* @return
*/
Manager retrieveManagerByName(@Param("name")String name);
當使用 #{ }傳遞字串時:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!-- 管理員表 Dao sql對映dao 關係表 --> <mapper namespace="com.anyunpei.dao.ManagerDao"> <select id="retrieveManagerByName" resultType="Manager"> SELECT * FROM manager WHERE name=#{name} </select> <select id="retrieveManagerById" resultType="Manager"> SELECT * FROM manager WHERE id=#{id} </select> </mapper>
當使用${ }傳遞字串時 需要單引號 ' ' 或者 雙引號 " " 都可以,把查詢的字串包裹起來
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!-- 管理員表 Dao sql對映dao 關係表 --> <mapper namespace="com.anyunpei.dao.ManagerDao"> <select id="retrieveManagerByName" resultType="Manager"> SELECT * FROM manager WHERE name="${name}" <!-- 或單引 FROM manager WHERE name='${name}' --> </select> <select id="retrieveManagerById" resultType="Manager"> SELECT * FROM manager WHERE id=${id} </select> </mapper>
原因在於${ }是直接拼接sql語句並執行sql,而#{ }是採用佔位符的方式執行sql ,可有效防止sql注入的攻擊。
1.order by 後面的關鍵詞 必須使用 ${ }
2.傳遞表名時,也應該使用${ }
3.其他情況,能使用#{ }不使用 ${ }