关于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语句有多个参数,我想问:
是不是说传入的第二个参数(即U色实体对象)就要是命名空间范围内的一个对象?
SQL所需参数都是从命名空间取的,也就是传来的第二个参数的那个实体对象里面来取得
如果是从传入的实体对象里面取的话,那在SQL里面设置的变量名是否就要和实体对象的属性名一直才可以呢?比如“where userid = #{id} and username = #{username}”中,这里的“id”和“usename”一定要和User类里面的属性名,是么?如果不一样则无法映射到?如果是这样的话,那要是在SQL里填写的条件参数和命名空间对应的实体类的属性名不一致的话,要怎么才能关联映射关系呢?
正在回答
你好!你是指下面这里传入的参数是User类对象吗?这个跟命名空间没有关系,就是在调用update语句时,会传入一个对象,而这个对象是要修改的内容。
而update语句中,#{}中的内容就是User类的成员变量的内容,这样就可以将传入的Users对象中的值取出来了。
关于你的第三个问题,#{}中的内容如果和属性不一样怎么办?可以使用@Param注解完成。
《MyBatis入门》的下一节课程就是《MyBatis参数传递》,上面说的内容都可以在下一节课介绍,同学可以继续往后学。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星