mybatis是面向接口编程,mapper接口没有实现类,调用mapper接口的方法,而方法是有参数的,
因为没有实现类,所以mapper接口中的方法直接对应映射文件sql语句,所以现在sql语句写在映射文中的,所以要在映射文件中通过指定的方式(两种方式)获取对应的方法参数。
1. #{}的本质就是占位符赋值
是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段
进行赋值时,可以自动添加单引号。
当把这个数据传到映射文件中的时候,在mybatis执行的底层代码里,
是不知道你的参数叫什么,只知道传过来的值是什么,
所以#{}或者${}里面的名字任意都可以获取到当前这个参数值。
1)单个字面量类型的参数
mapper接口方法的参数为单个的字面量类型,可以通过#{}或者${} 任意的内容获取参数值。
①接口
// 根据用户名查询用户信息
User getUserByUsername(String username);
②映射文件
<mapper namespace="com.atguigu.mybatis.mapper.UserMapper">
<!-- User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="User">
select * from t_user where username=#{username}
</select>
</mapper>
③测试类
@Test
public void testUserByUsername(){
SqlSession session = SqlSessionUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getUserByUsername("admin");
System.out.println(user);
}
2)多个字面量类型的参数
多个参数的时候,mybatis会自动把当前多个参数放到一个Map集合中的,
放到Map集合的时候是以两种方式存储数据的:
①arg0,arg1,.... ②param1, ...为键