MyBatis获取参数值的两种方式

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标识参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>