关于为什么一定要加构造方法获取ID

关于为什么一定要加构造方法获取ID

为什么一定要new一个对象传入id值来传递mapper里的参数ID
是因为mapper里面都参数范围是Users类?而getid方法不是static方法,需要通过对象实例才能调用,所以要传入对象并且让该对象有id值,才能准确的调用到想要的id?
同时对于多线程并发的时候,每个线程有自己的对象调用自己传入对象的id不会出错?

正在回答

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

3回答

1、同学是指这里吗?

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

如果是,其实是因为这条的查询是动态sql语句,

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

然后<if test="id">,会根据传入的类型,去里面找getId这个方法,而String方法里,根本就没有getId这个方法,而User里有。所以需要传入一个User类,因为我们又只需要Id,所以,我们就添加了 一个只有id的构造方法。这里同学记住就好。

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


  • 慕圣3009968 提问者 #1
    嗯嗯,是这里。所以这里是只有是动态sql加了if才要传User对象,如果不是动态sql,直接传id参数就可以了吗?
    2019-04-23 11:26:08
好帮手慕阿满 2019-04-22 16:26:30

同学你好,new一个对象传入id值是指哪里呢?建议同学将问题描述的更清楚些,可以通过截图说明。

祝:学习愉快~

  • 提问者 慕圣3009968 #1
    恩,我的意思是,在我们的findById的servlet里面调用dao的时候 Integer id=Integer.parseInt( req.getParameter("id")); Users user=usersDAO.findById(id); req.setAttribute("user",user); 传入为什么一定要new一个对象传入id值? 是因为mapper里设置的namespace是Users类?而getid方法不是static方法,需要通过对象实例才能调用,所以要传入对象并且让该对象有id值,才能准确的调用到想要的id? 同时对于多线程并发的时候,不同线程调用这个servlet的时候都会创建自己的带id的User对象,所以线程间也不会相互影响,是这样吗?
    2019-04-22 23:20:06
提问者 慕圣3009968 2019-04-22 13:18:10

那为什么之前mapper里面那种不加if,直接加where取id的时候,直接传id就可以直接获取到呢?

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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