前言
当我们使用MyBatis进行开发的时候, 我们需要在xml文件里书写SQL语句, 由Mapper接口提供接口, SQL语句的是如何识别Mapper接口的参数是一件值得思考.
正文
按照参数出现的顺序入参
MyBatis会将传入接口的参数一map的形式保存并以arg0,arg1…为键,以参数为值.
Mapper接口
public interface UserMapper {
User checkLogin(String username,String password);
}
Mapper映射文件
<select id="checkLogin" resultType="User">
select * from user where username=#{param1}and password=#{param1}
</select>
按照Map集合类型入参
直接在Mapper接口中将参数声明为Map类型, MyBatis就会按照Map中的键进行寻找入参.
Mapper接口
public interface UserMapper {
// 验证登录(以map集合作为参数)
User checkLoginByMap(Map<String,Object> map);
}
Mapper映射文件
<select id="checkLoginByMap" resultType="User">
select * from user where username=#{username} and password=#{password}
</select>
按照@param注解声明入参
此时MyBatis会将这些参数放在map中,以两种方式进行存储
1:以@param注解的value属性值为键
2:以param1,param2…为键,以参数为值 此时可以通过#{}和${}访问实体类的属性名,就可以获取相应的属性值一定要注意${}的单引号问题
Mapper接口
public interface UserMapper {
//验证登录
User checkLoginByParam(@Param("username") String username,@Param("password") String password);
}
Mapper映射文件
<select id="checkLoginByParam" resultType="User">
select * from user where username=#{username} and password=#{password}
</select>
按照实体类类型入参
此时可以通过#{}和{}的单引号问题
Mapper接口
public interface UserMapper {
// 添加用户信息
void insertUser(User user);
}
Mapper映射文件
<insert id="insertUser">
insert into user values(null,#{username},#{password},#{age},#{gender},{email})
</insert>
结语
参考文档
Mybatis传入多个参数四种处理方式
评论区