给SQL传参
- 概述
- Mybatis会在运行过程中,把配置文件中的SQL语句里面的#{}转换为“?”占位符,发送给 数据库执行。
- 需求
- 根据账户模糊查询
- 代码实现
<select id="selectUserLikeName1" parameterType="string" resultType="user">
select *
from tb_user
where user_name like "%"#{
userName}"%"
</select>
<select id="selectUserLikeName2" parameterType="string" resultType="user">
select *
from tb_user
where user_name like "%${userName}%"
</select>
总结
- #{}
- 不能直接写到字符串中
- 可以防止SQL注入漏洞
- 不可以传入表名
- ${}
- 能直接写到字符串中
- 不可以防止SQL注入漏洞
- 可以传入表名
输入映射
概述
- 输入映射,是在映射文件中通过parameterType指定输入参数的类型。从而将用户输入的内容赋值到SQL语句的占位符中。
- 简单类型 : 包含一个值
- 基本数据类型
- 包装类
- String
- 复杂类型 : 包含多个值
- javabean实体类
- 集合
- 数组
输入映射之简单类型
- 概述
- 输入一个简单类型的值
- 需求
- 根据id查询记录
- 代码实现
<select id="selectUserById1" parameterType="int" resultType="user">
select *
from tb_user
where user_id = #{userId}
</select>
<select id="selectUserById2" resultType="user">
select *
from tb_user
where user_id = #{userId}
</select>
输入映射之零散简单类型
- 概述
- 输入多个简单类型的值
- 需求
- 根据账户和密码查询记录
- 代码实现
<select id="selectUserByNameAndPwd1" resultType="user">
select *
from tb_user
where user_name = #{param1}
and user_pwd = #{param2}
</select>
<select id="selectUserByNameAndPwd2" resultType="user">
select *
from tb_user
where user_name = #{userName}
and user_pwd = #{userPwd}
</select>
User selectUserByNameAndPwd1(String userName , String userPwd) throws Exception;
User selectUserByNameAndPwd2(@Param("userName") String userName , @Param("userPwd") String userPwd) throws Exception;
输入映射之实体类型
- 概述
- Mybatis会根据#{}中传入的数据,加工成getXxx()方法,通过反射在实体类对象中调用这个 方法,从而获取到对应的数据。填充到#{}这个位置。
- 需求
<select id="selectUserByNameAndPwd3" parameterType="user" resultType="user">
select *
from tb_user
where user_name = #{userName}
and user_pwd = #{userPwd}
</select>
<select id="selectUserByNameAndPwd4" resultType="user">
select *
from tb_user
where user_name = #{userName}
and user_pwd = #{userPwd}
</select>
- 注意事项
- #{userName}应该和getUserName()方法名一致
- parameterType="user"可以省略
输入映射之Map
- 概述
- 如果要输入多个简单类型的值,同时也找不到合适的javabean来进行封装,使