版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 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.其他情况,能使用#{ }不使用 ${ }