MyBatis获取参数值的两种方式(重点)
MyBatis获取参数值的两种方式:${}和#{}
${}本质字符串拼接,拼接的值为字符串类型或者日期类型,需要注意单引号问题
#{}本质占位符赋值(实际用得最多)
MyBatis获取参数值的各种情况:
1.mapper接口方法的参数为单个字面量类型
可以通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{}以任意的名称获取,最好是见…{}的单引号问题
<!--User getUserByUserName(String UserName);-->
<select id="getUserByUserName" resultType="User">
<!--select * from t_user where username = #{UserName}-->
<!-- 注意单引号-->
select * from t_user where username = '${UserName}'
</select>
2.mapper接口方法的参数为多个时
此时MyBatis会将这些参数放在map集合中,以两种方式进行存储
a>以arg0,arg1…为键,以参数为值
b>以param1,param2…为键,以参数为值
因此只需要通过#{}或者
以键的方式访问值即可,注意
{}以键的方式访问值即可,注意
以键的方式访问值即可,注意{}的引号问题,l例子#{arg0}
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
<!-- select * from t_user where username=#{arg0} and password=#{arg1}-->
select * from t_user where username=#{param1} and password=#{param2}
</select>
3.若mapper接口方法的参数有多个时,可以手动将这些参数放在Map中存储
因此只需要通过#{}或者
以键的方式访问值即可,注意
{}以键的方式访问值即可,注意
以键的方式访问值即可,注意{}的引号问题,
public void testGetAllUser(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
//传输多个参数为mapper集合的时候判断登录
Map<String,Object> map = new HashMap<>();
map.put("username","zkkk");
map.put("password","123456");
User user = mapper.checkLoginByMap(map);
System.out.println(user);
}
<!--User checkLoginByMap(Map<String,Object>map);-->
<select id="checkLoginByMap" resultType="User">
select * from t_user where username=#{username} and password=#{password}
</select>
4.如果mapper接口方法的参数是实体类类型的参数(重点)
因此只需要通过#{}或者
以属性的方式访问值即可,注意
{}以属性的方式访问值即可,注意
以属性的方式访问值即可,注意{}的引号问题,
package com.cn.cslg.mybatis.pojo;
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String sex;
private String email;
....
}
<!--int insertUser(User user);-->
<insert id="insertUser">
insert into t_user values(null ,#{username},#{password},#{age},#{sex},#{email})
</insert>
public void insertUser(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
User user =new User(null,"Lisi","123456",12,"男","123456");
int a = mapper.insertUser(user);
System.out.println(a);
}
5.使用@Param注解(最常用的方式,除了第三种情况以外,其他情况都可以用它)
此时MyBatis会将这些参数放在一个map集合之中,以两种方式进行存储
a>@Param注解的值为键,以参数为值
b>以param1,param2…为键,以参数位置
因此只需要通过#{}和
以键的方式访问值即可,但是需要注意
{}以键的方式访问值即可,但是需要注意
以键的方式访问值即可,但是需要注意{}的单引号问题
public void testCheckLoginByParam(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
User user = mapper.checkLoginByParam(“zkkk”, “123456”);
System.out.println(user);
}
/**
* mapper接口
* 验证登录(使用@param注解)
*/
User checkLoginByParam(@Param("username") String username,@Param("password") String password);
<!--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>
总结
所有获取传传递值的情况可以分为两种
a>实体类型类型参数
b>使用@Param标识参数