详细介绍Mybatis获取参数值的五种方法

文章目录

  • 前言
  • 一、先决条件
  • 二、mapper接口方法的参数为单个的字面量类型
  • 三、mapper接口方法的参数为多个时
  • 四、若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储
  • 五、mapper接口方法的参数是实体类类型的参数
  • 五、使用@param注解命名参数(最常用的)


前言

例如:在Mybatis的学习中,我们会发现我们接口写的方法传的参数有很多种。我们会很疑惑每种参数该怎么用,这里将具体介绍该怎么使用这些参数。


一、先决条件

❤我们需要先创建一个mapper接口类,例如ParameterMapper
❤其次我们需要创建接口对应的映射文件ParameterMapper.xml文件
详细介绍Mybatis获取参数值的五种方法_第1张图片
❤然后我们需要认识 Mybatis获取参数值的两种方法${}和#{}
${}本质是字符串拼接,#{}本质占位符赋值


1)#{}是预编译处理,$ {}是字符串替换。

2)MyBatis在处理#{}时,会将SQL中的#{}替换为?号,使用PreparedStatement的set方法来赋值;MyBatis在处理 $ { } 时,就是把 ${ } 替换成变量的值。

3)${}一般需要在外部加上‘’ 例如 :

 <select id="getUserByUsername" resultType="User">
        select * from t_user where username='${username}'
 </select>

二、mapper接口方法的参数为单个的字面量类型

❤可以通过{}和#{}以任意的字符串获取参数值,但是需要注意${}的单引号问题
在这里插入图片描述

<select id="getUserByUsername" resultType="User">
        select * from t_user where username='${username}'
        <!--select * from t_user where username=#{username}-->
 </select>

三、mapper接口方法的参数为多个时

❤此时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>

四、若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储

❤因此只需要通过#{}或{}以键的方式访问值即可,但是需要注意${}的单引号问题
在这里插入图片描述

<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);
    }

五、mapper接口方法的参数是实体类类型的参数

❤因此只需要通过#{}或{}以属性的方式访问属性值即可,但是需要注意${}的单引号问题
在这里插入图片描述

<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);
    }

五、使用@param注解命名参数(最常用的)

❤此时Mybatis会将这些参数放在一个map集合中,以两种方式进行存储
a、以@param注解的值为键,以参数为值
b、以param1,param2…为键,以参数为值
因此只需要通过#{}或{}以属性的方式访问属性值即可,但是需要注意${}的单引号问题

在这里插入图片描述

<select id="checkLoginByParam" resultType="User">
        select * from t_user where username=#{username} and password=#{password}
 </select>

你可能感兴趣的:(java,开发语言,数据库架构)