关于mybatis条件查询的参数来源疑问

关于mybatis条件查询的参数来源疑问

老师,在学习mybatis框架的时候,我对里面演示的条件查询感到疑惑,里面的查询需要的参数是从哪来的?比如我们用JDBC差一条数据库记录,如果有两个参数,就用两个?占位符,然后给参数赋值来执行这条SQL语句,但是在mybatis则不然。例如下面的查询语句的映射:

    <select id="getAddress" resultType="com.damu.entity.Address">
        select * from address where userid = #{id} and username = #{username}
    </select>

它对应的命名空间是:

<mapper namespace="com.damu.entity.Users">

我看了视频的操作,在用sqlsession对象的执行方法时候,无论是查询一条数据还是插入一条数据,第二个参数就是一个User实体对象,但是这里所要执行的SQL语句有多个参数,我想问:

  1. 是不是说传入的第二个参数(即U色实体对象)就要是命名空间范围内的一个对象?

  2. SQL所需参数都是从命名空间取的,也就是传来的第二个参数的那个实体对象里面来取得

  3. 如果是从传入的实体对象里面取的话,那在SQL里面设置的变量名是否就要和实体对象的属性名一直才可以呢?比如“where userid = #{id} and username = #{username}”中,这里的“id”和“usename”一定要和User类里面的属性名,是么?如果不一样则无法映射到?如果是这样的话,那要是在SQL里填写的条件参数和命名空间对应的实体类的属性名不一致的话,要怎么才能关联映射关系呢?

正在回答

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

1回答

你好!你是指下面这里传入的参数是User类对象吗?这个跟命名空间没有关系,就是在调用update语句时,会传入一个对象,而这个对象是要修改的内容。

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

而update语句中,#{}中的内容就是User类的成员变量的内容,这样就可以将传入的Users对象中的值取出来了。

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

关于你的第三个问题,#{}中的内容如果和属性不一样怎么办?可以使用@Param注解完成。

《MyBatis入门》的下一节课程就是《MyBatis参数传递》,上面说的内容都可以在下一节课介绍,同学可以继续往后学。

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

  • 哆丶哆 提问者 #1
    老师,后面的视频我已经看了,还是不对呀。就是说传入一个对象的时候,xml里面获取属性是按照对象的属性名来获取的,但是如果xml里的属性名和对象里的属性名不一致,那取得的不就是null了?我传的是一个封装JavaBean对象啊,这种方式怎么用注解@param啊?
    2019-07-21 13:41:41
  • 好帮手慕珊 回复 提问者 哆丶哆 #2
    同学,你好!如果单个参数是用@Param,如果像你描述的情况,参数是对象,那么sql中的参数名和JavaBean的属性名不一样,是取不到值的,这种就要求必须和属性名一致了。祝学习愉快!
    2019-07-21 14:25:16
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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