1. 程式人生 > >Mybatis的兩種取值方式#{ } 與${ } 使用時需要注意的地方

Mybatis的兩種取值方式#{ } 與${ } 使用時需要注意的地方

需要對映的介面:

/**
 * 根據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.其他情況,能使用#{ }不使用 ${ }