动态SQL
在UserDAO的findById方法中老师使用下面的语句进行查询,
users = getSession().selectOne("findUsers", new Users(id));
我在尝试使用了下面的语句也能够得到想要的结果。
users = getSession().selectOne("findUsers", id);
请问:
我们两个的做法为啥都能的出相同的结果?
老师为什么要这样做?
在xml文件的sql语句中where id = #{id}是怎样进行适配的?
正在回答
同学你好。使用同学提供的代码片段拼接至源码中,经这边尝试是没有办法正常查询user的,并且错误原因也与视频相同呢~同学运行效果与预期不同,考虑是编译缓存问题,建议同学清一下缓存呢~
使用这里,清除IDEA缓存
然后重新编译一下试试:
祝学习愉快~
<mapper namespace="com.demo.entity.Users"> <!-- 动态sql语句,能够实现功能一:查找所有users;功能二:通过id查找某个users --> <select id="findUsers" resultType="com.demo.entity.Users"> select * from users <if test="id != null"> where id = #{id} </if> </select> <!-- 静态sql语句,只能实现通过id查找某个users功能 --> <select id="findById" resultType="com.demo.entity.Users"> select * from users where id = #{id} </select> </mapper>
下面是我的SQL:
<select id="findUsers" resultType="com.demo.entity.Users"> select * from users <if test="id != null"> where id = #{id} </if> </select>
当我使用users = getSession().selectOne("findUsers", id);进行查找时。Debug的运行结果如下,可以看到也是能够取得正确的users(不论我Users中有没有老师写的那个id构造器)
那么问题来了这个#{id}到底是跟UsersBean中的id属性进行匹配还是单纯的就是跟selectOne("findUsers", id)方法中的id直接进行匹配
1、同学你好,不知道同学的sql语句是否是动态的拼接的语句,
老师之所以users = getSession().selectOne("findAll", new Users(id)); 这样写是在3分钟左右
老师这里出现的报错。
动态拼接的sql语句要求传入的参数有get方法,但是int类型的没有getter方法,所以老师在Users类中添加了一个getter方法。如果不这样做,就会报如视频3分钟左右的报错。
2、
关于:“在xml文件的sql语句中where id = #{id}是怎样进行适配的?”
这个id就是我们传进去的参数id。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 277 份
- 解答问题 4297 个
Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星