关于动态sql

关于动态sql

老师,为什么传给if test=id的id必须是user类型,他才会从getId方法中获取Id?为什么他一定会执行getId方法呢?

正在回答

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

3回答

同学你好!

同学这里是在疑惑这两个id吗?

http://img1.sycdn.imooc.com//climg/5da6cacd091f5f5d09230268.jpg

其实这两个id不是一回事呢

  1. id=”findAll“其实是用来唯一标识这个select sql语句的。

  2. #{id}是用来获取传递的参数的。所以两者不同

它的执行流程,当一下语句执行时,会根据findAll找到要制定的sql,后面的User是传递的参数,找到要执行的sql之后通过#{id}来获取值,也就是User的getId方法。

http://img1.sycdn.imooc.com//climg/5da6cbfd09c9613c09450067.jpg

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

  • 精慕门618366 提问者 #1
    老师,之前的没加入if test=id的时候,为什么传递的参数为数字就不报错呢? #{id}不是默认通过getid()来获取id?那以前的方式也应该报错啊
    2019-10-16 16:01:00
  • 好帮手慕柯南 回复 提问者 精慕门618366 #2
    同学,这里主要是因为动态SQL中的<if>导致的呢。if中的id也要通过get来获取呢。祝学习愉快~
    2019-10-16 17:12:15
  • 精慕门618366 提问者 #3
    if中的id和where中的#{id}不是一个id吗,之前老师说过#{id}也是通过getId()获取的吗?那不带if的那个,不也得通过getId()获取id吗,不应该也报错吗?
    2019-10-16 17:50:26
好帮手慕柯南 2019-10-16 18:46:59

同学你好!

这里主要是由于添加了动态if导致的呢。

  1. 这里报错的是<if test ="id">里的id,而不是where id = #{id}里的id

  2. 由于if中id必须要使用get方法。所以这里传递了对象

  3. 由于这里传递了对象进来,所以这里的#{id}是通过get方法来获取的呢

  4. 如果没有动态if,这里传递一个值也是可以的。

祝学习愉快~

好帮手慕柯南 2019-10-16 11:44:59

同学你好!

mybatis的底层就是这么设计的呢。同学按照它的规则使用即可。

祝学习愉快~

  • 提问者 精慕门618366 #1
    老师,那内个#{id}是什么意思呢? 老师能具体说一下带#{id}的mapper文件的具体执行过程吗?
    2019-10-16 12:29:49
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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