一、参数的获取方式
MyBatis获取参数值的两种方式:#{}和${}
#{}的本质是占位符赋值,${}的本质是字符串拼接
二、具体例子
1、若mapper接口方法的参数为单个的字面量类型
此时可以通过#{}和${}以任意的内容获取参数值,一定要注意${}的单引号问题
2、若mapper接口方法的参数为多个的字面量类型
此时MyBatis会将参数放在map集合中,以两种方式存储数据
a>以arg0,arg1...为键,以参数为值
b>以param1,param2...为键,以参数为值
因此,只需要通过#{}和${}访问map集合的键,就可以获取相对应的值,一定要注意${}的单引号问题
3、若mapper接口方法的参数为map集合类型的参数
只需要通过#{}和${}访问map集合的键,就可以获取相对应的值,一定要注意${}的单引号问题
4、若mapper接口方法的参数为实体类类型的参数
只需要通过#{}和${}访问实体类中的属性名,就可以获取相对应的属性值,一定要注意${}的单引号问题
5、可以在mapper接口方法的参数上设置@Param注解
此时MyBatis会将这些参数放在map中,以两种方式进行存储
a>以@Param注解的value属性值为键,以参数为值
b>以param1,param2...为键,以参数为值
只需要通过#{}和${}访问map集合的键,就可以获取相对应的值,一定要注意${}的单引号问题
<!--User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="com.guyue.mybatis.pojo.User">
<!--select * from t_user where username = #{username}-->
select * from t_user where username = '${username}'
</select>
<!--User checkLogin(String username, String password);-->
<select id="checkLogin" resultType="User">
<!--select * from t_user where username = #{param1} and password = #{param2}-->
select * from t_user where username = '${param1}' and password = '${param2}'
</select>
<!--User checkLoginByMap(Map<String, Object> map);-->
<select id="checkLoginByMap" resultType="User">
select * from t_user where username = #{username} and password = #{password}
</select>
<!--void insertUser(User user);-->
<insert id="insertUser">
insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})
</insert>
<!--User checkLoginByParam(@Param("username") String username, @Param("password") String password);-->
<select id="checkLoginByParam" resultType="User">
select * from t_user where username = #{username} and password = #{password}
</select>