Mybatis获取参数值的各种情况

打印 上一主题 下一主题

主题 885|帖子 885|积分 2655

1. Mybatis获取参数值的两种方式

MyBatis获取参数值的两种方式:#{}和${}

  • {}:本质就是占位符赋值
  • ${}:本质就是字符串拼接
2. 单个字面量类型的参数

什么是字面量??
  1. int a = 1;
复制代码
比如说上面这行代码,里面的1,我们看到的是1,它实际的值也是1,这就是字面量;再比如里面的a,我们看到的是a,但它的值并不是a而是1,这叫变量。
根据用户名root查找用户信息


  • {} 占位符赋值



    通过日志信息可以看到sql语句中 #{} 被占位符?代替。
    注意:映射文件中 #{username}的参数可以写成任意的
    1. select * from t_user where username = #{username}
    2. # 可以写成
    3. select * from t_user where username = #{name}
    4. select * from t_user where username = #{abc}
    5. select * from t_user where username = #{helloworld}
    复制代码
    因为mybatis执行映射文件的底层代码中也不知道你的参数名叫username,只是一一对应。但是建议写成username。
  • ${} 字符串拼接
    如果直接将# 改为 $ ,执行会报错,我们分析一下错误原因
    1. select * from t_user where username = ${username}
    复制代码

    可以看到这里root直接拼接到sql中,我们知道sql语句的字符串类型是要加单引号的,而这里没有,就把root当成了一个变量,下面报错信息说的就是找不到这么root。
    正确做法:加个单引号
    1. select * from t_user where username = '${username}'
    复制代码
    同样的${username}的参数可以写成任意的,除了数字之外
3. 多个字面量类型的参数

根据用户名和密码进行验证登录:
直接上 #{}的结论:

  • 使用arg0、arg1或param1、param2:
    1. select * from t_user where username = #{arg0} and password = #{arg1}
    2. # 也可以写成
    3. select * from t_user where username = #{param1} and password = #{param2}
    复制代码
    若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中,以两种方式存储数据:

    • 以arg0,arg1...为键,以参数为值
    • 以param1,param2...为键,以参数为值;
    你甚至可以混合使用两种方式,自己注意别弄混就行
    因此只需要通过 ${} 和 #{} 访问map集合的键就可以获取相对应的值,注意 ${} 需要手动加单引号
    当然我们也可以自定义键名,具体方法看后面讲的使用@Param标识参数

4. map集合类型的参数

若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在
map中
只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

5. 实体类类型的参数

若mapper接口中的方法参数为实体类对象时
此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号
手动创建一个User对象:

6. 使用@Param标识参数

使用最广泛的
可以通过@Param注解标识mapper接口中的方法参数 ,这样就可以自定义map集合中的键名,而不是只能用前面讲的arg0、arg1和param1、param2

总结


  • 建议除了5中实体类类型的参数,其他的我们都加上@Param注解,即使用@Param标识参数
  • 部分内容来自 B站尚硅谷课程 。老师讲得很好,有兴趣的可以听听。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

风雨同行

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表