关于SQL查询的问题

关于SQL查询的问题

本节课中说到动态查询需要getId方法,这个操作模式时理解了,但是之前的问题就冒出来了,比如说我这样:

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

使用以前的mappper配置:

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


程序正常运行没毛病,那么问题就是,他怎么识别出具体的id的,看了一些回答,还是没有具体回答mybatis如何识别id的问题,我这里参数都不是id,但是还是被他识别了,那么万一我这个查询语句有多个参数,比如select .... where id = ?   and  username = ?    这里的?代表新的参数,这么多参数他又如何识别呢????

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

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

4回答
提问者 楚楚提 2019-01-08 22:19:42

已经解决,真想自己采纳自己的回答,下面是手册内容:

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

也就是说select标签中的第一个参数会变成?号,而传入的参数会变成jdbc中PreparedStatement语句的形参,也就是ps.setInt(1,id)中的id,所以重要的是他的值,叫什么名字都不重要了.

值得注意的是,这种情况只能对于<select>标签只有一个参数的情况,其他情况下还是当作动态SQL语句来处理吧

慕布斯645313 2019-01-07 10:01:25

恩。。。推荐你一篇博客,源码解析https://blog.csdn.net/bingospunky/article/details/79202721,这里写了selectone方法是如何传递参数的。

chrismorgen 2019-01-06 10:45:19

因为下图标记得地方调用了selectOne方法,他会传入一个Users对象,会从这个Users对象中获取参数,比如你说的username,你还需要为Users对象中的username赋值,跟你说的传入Test对象是一样。祝学习愉快~

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

  • 提问者 楚楚提 #1
    额,动态构建SQL语句时的传入对象我是理解的,我是说对于我本次回答的内容,不是动态构建SQL语句的那一节,是一开始用到的那个方法,就是我贴的那两张图
    2019-01-06 10:51:39
chrismorgen 2019-01-06 10:31:04

如下图所示,这里会有一个命名空间,可以操作指定的实体类,也就是说,即使有多个参数,都是User类中的属性,都可以通过#{}来取出,关于MyBatis的使用,同学也可以看一下它的官方文档,http://www.mybatis.org/mybatis-3/zh/index.html,这个技术文档对每一个属性都作出了详细的解释,祝学习愉快~

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

  • 提问者 楚楚提 #1
    可是我这里传入的并不是user对象,只是一个单纯的int数据,而且名字也不叫id,而是我特意设置的aaaaaaa?这应该就和命名空间没关系了吧?
    2019-01-06 10:36:58
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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