关于id参数传入的问题

关于id参数传入的问题

课程中讲到,在不使用动态SQL语句时,根据id查询用户信息时,传入参数就是id本身,如果使用动态语句就必须传入user对象,否则出错,这是什么原因呢?请老师解释一下,谢谢!

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕柯南 2019-12-26 10:51:18

同学你好!

报错的是<if test ="id">里的id,而不是where id = #{id}里的id,然后<if test="id">,会根据传入的类型,去里面找getId这个方法,而String方法里,根本就没有getId这个方法,而User里有。所以需要传入一个User类。

所以导致报错的是if标签中的内容。同学知道这个知识点就可以

如果我的回答解决解决了你的疑惑,请采纳,祝学习愉快~


好帮手慕柯南 2019-12-25 17:07:20

同学你好!

是有一点不同,如果传递的参数是Integer等类型

如果直接写:#{id} 没有问题

如果是在<if test=""></if>中获取值就会报错

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 慕沐8221787 #1
    这两者在底层机制上有什么不同,请老师解释一下。
    2019-12-25 20:30:45
好帮手慕柯南 2019-12-25 16:10:35

同学你好!

如果使用动态语句,在传递参数时Mybaits会将传递的参数当做是一个对象,在进行#{}获取值时,会使用传递过来的参数去调用相应的get方法来获取具体的值。因此这里传递Integer类型时,去调用get方法是获取不到值的,需要传递User对象。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 慕沐8221787 #1
    不使用动态语句和使用动态语句,mybatis获取#{}的机制不一样吗?不使用动态语句就直接拿入参填充吗?
    2019-12-25 16:14:40
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师