Mybatis的两种取值方式#{ } 与${ } 使用时需要注意的地方

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29519041/article/details/84717888

需要映射的接口:

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

猜你喜欢

转载自blog.csdn.net/qq_29519041/article/details/84717888