MyBatis获取参数值的两种方式#{}和${}
MyBatis获取参数值的两种方式: ${}和#{}
${}的本质就是字符串拼接,#{}的本质就是占位符赋值
1. 单个字面量类型的参数:
若mapper接口中的方法参数为单个的字面量类型
此时可以使用${}和#{}以任意的名称获取参数的值,注意${}需要手动加单引号
2. 多个字面量类型的参数:
若mapper接口中的方法参数为多个时
此时MyBatis会自动将这些参数放在一个map集合中,
①以arg0,arg1...为键,以参数为值;
因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号。
3. map集合类型的参数:
若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,
将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值,
注意${}需要手动加单引号。
4. 实体类类型的参数:
若mapper接口中的方法参数为实体类对象时
此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,
注意${}需要手动加单引号。
5. 使用@Param标识参数:
可以通过@Param注解标识mapper接口中的方法参数
此时,会将这些参数放在map集合中,
以@Param注解的value属性值为键,以参数为值;
以param1,param2...为键,以参数为值;
只需要通过${}和#{}访问map集合的键就可以获取相对应的值,
注意${}需要手动加单引号。
package com.atiguigu.mabatis.mapper;
//接口
import com.atiguigu.mabatis.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/*
通过功能划分
*/
public interface ParameterMapper
{
/**
* 1
* 根据用户名查询用户信息(根据用户名查询的,那方法中必定会有一个参数)
* @return
*/
User getUserByUsername(String username);
/**
* 2
* 验证登录
*/
User checkLogin(String username,String password);
/**
* 3
* 验证登录(参数为map)
* @return
*/
User checkLoginByMap(Map<String,Object> map); //String类型,值是Object类型
/**
* 4
* 添加用户信息
* @return
*/
int insertUser(User user);
/**
* 5
* 验证登录(使用@Param注解)
* 当我们在mapper接口方法的参数上加上@Param注解之后,mybatis就会将参数放在map集合里面,
* 以@Param注解的值为键,参数为值,当然还会以自己的方式来设置这个键并且存储参数
* @return
*/
User checkLoginByParam(
//映射文件
package com.atguigu.mybatis.test;
//测试类
import com.atiguigu.mabatis.mapper.ParameterMapper;
import com.atiguigu.mabatis.pojo.User;
import com.atiguigu.mabatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ParameterMapperTest
{
/**
* MyBatis 获取参数值的两种方式:${}和#{}
* ${}本质字符串拼接
* #{}占位符赋值
* MyBatis获取参数值的各种情况:
* 1.mapper接口方法的参数为单个的字面量类型
* 可以通过${}和#{}以任意的名称获取参数值,但是需要注意${}的单引号问题
* 2.mapper接口方法的参数为多个时
* 此时MyBatis会将这些参数放入在一个map集合中,以两种方式进行存储
* ①以arg0,arg1...为键,以参数位置
* ②以param1,param2....为键,以参数为值
* 因此只需要通过#{}和${}以键的方式访问值即可,但是需要注意${}的单引号问题
* 3.若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储
* 只需要通过#{}和${}以键(这个键是我们自己设置的)的方式访问值即可,但是需要注意${}的单引号问题
* 4.map接口方法的参数是一个实体类类型的参数
* 只需要通过#{}和${}以属性的方式访问属性值即可,但是需要注意${}的单引号问题(用的最多,添加 删除 修改)
* 5.使用@Param命名参数
* 此时MyBatis会将这些参数放入在一个map集合中,以两种方式进行存储
* 以@Param注解的值为键,以参数为值
* 以param1,param2....为键,以参数为值
* 因此只需要通过#{}和${}以键的方式访问值即可,但是需要注意${}的单引号问题
* 第二种情况可以用@Param来解决,第4中是实体类类型的参数直接通过参数名属性名,
* 整合两种情况,第一种情况实体类对象这种,第二种全部都用@Param
*/