例如:在Mybatis的学习中,我们会发现我们接口写的方法传的参数有很多种。我们会很疑惑每种参数该怎么用,这里将具体介绍该怎么使用这些参数。
❤我们需要先创建一个mapper接口类,例如ParameterMapper
❤其次我们需要创建接口对应的映射文件ParameterMapper.xml文件
❤然后我们需要认识 Mybatis获取参数值的两种方法${}和#{}
${}本质是字符串拼接,#{}本质占位符赋值
❤
1)#{}是预编译处理,$ {}是字符串替换。
2)MyBatis在处理#{}时,会将SQL中的#{}替换为?号,使用PreparedStatement的set方法来赋值;MyBatis在处理 $ { } 时,就是把 ${ } 替换成变量的值。
3)${}一般需要在外部加上‘’ 例如 :
<select id="getUserByUsername" resultType="User">
select * from t_user where username='${username}'
</select>
❤可以通过{}和#{}以任意的字符串获取参数值,但是需要注意${}的单引号问题
<select id="getUserByUsername" resultType="User">
select * from t_user where username='${username}'
<!--select * from t_user where username=#{username}-->
</select>
❤此时Mybatis会将这些参数放在一个map集合中,以两种方式进行存储
a、以arg0,arg1…为键,以参数为值
b、以param1,param2…为键,以参数为值
因此只需要通过#{}或{}以键的方式访问值即可,但是需要注意${}的单引号问题
<select id="checkLogin" resultType="User">
<!-- select * from t_user where username='${arg0}' and password='${arg1}' -->
select * from t_user where username=#{arg0} and password=#{arg1}
</select>
❤因此只需要通过#{}或{}以键的方式访问值即可,但是需要注意${}的单引号问题
<select id="checkLoginByMap" resultType="User">
select * from t_user where username=#{username} and password=#{password}
</select>
❤❤此时的测试类应该创建一个map进行存放数据
@Test
public void testcheckLoginByMap(){ //方法中不需要声明参数
SqlSession sqlSession= SqlSessionUtil.getSqlSession();
ParameterMapper mapper=sqlSession.getMapper(ParameterMapper.class);
Map<String,Object> map=new HashMap<>();
map.put("username","tqy");
map.put("password","666666");
User user=mapper.checkLoginByMap(map);
System.out.println(user);
}
❤因此只需要通过#{}或{}以属性的方式访问属性值即可,但是需要注意${}的单引号问题
<insert id="insertUser">
insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
测试类应该这样写
@Test
public void testinsert(){
SqlSession sqlSession= SqlSessionUtil.getSqlSession();
ParameterMapper mapper=sqlSession.getMapper(ParameterMapper.class);
int result=mapper.insertUser(new User(null,"aaa","888888",98,"女","[email protected]"));
System.out.println(result);
}
❤此时Mybatis会将这些参数放在一个map集合中,以两种方式进行存储
a、以@param注解的值为键,以参数为值
b、以param1,param2…为键,以参数为值
因此只需要通过#{}或{}以属性的方式访问属性值即可,但是需要注意${}的单引号问题
<select id="checkLoginByParam" resultType="User">
select * from t_user where username=#{username} and password=#{password}
</select>