标签:column id 查询 tid 查询数据库 mybatis 此时 对应
一对多(一个老师对应多个学生)
遇到的问题: 查询到的id总是为0,而实际数据库中的id=1。
此时使用的映射文件是:
而正确的查询结果应该是id=1。
此时使用的映射文件是:
后来,经过了仔细分析,发现了唯一的区别就在于,Teacher类的映射,第一行的那个property="id"与column=“tid”,这儿不写就会导致id=0的情况
本以为到这里,事情就结束了,但是最后又发现了新的问题。
以下以起别名为tid为例:
- 情况一:
此时property的id对应teacher类中的id,column的tid对应起的别名tid,这是正确的写法,此时可以的到理想的结果。 - 情况二(重点):
此时property的id对应teacher类中的id,column的id没有对应起的别名tid,此时报了TooManyResultsException,提示查出来的值太多。
- 情况三:
此时property的tid没有对应teacher类中的id,column的id对应起的别名tid,此时报了ReflectionException,提示没有对应的setter方法。这个还是比较好理解的。
- 情况四:
此时我直接不写这一行,就回到了刚才的最初的问题,查到的Id=0,而为什么会导致等于0,却不是报错呢?
这里顺便解决之前在多对一中遇到的类似的情况,即id明明为1却查出来为0的原因:
经过测试,有两种可能会导致这种情况:
1.和一对多一样,直接不写id的这一行,查询出来的结果,id就是0
2.第二种情况与一对多有些许区别,就是column与数据库中的字段对应不上,在一对多的情况下也会导致teacher的id等于0。这时可能会有个疑惑,为什么在一对多中,对应不上的时候(情况二),是显示查询的结果太多,而多对一中,对应不上时,显示的却是id=0?其实答案也很简单,因为一对多时,查询出来的student是用list集合接收的,所以不会出现查询结果太多的情况(因为无论多少个结果,都直接加到集合中就行了),但是多对一中,查询出来的只是一个结果,如果对应不上,就会报查询结果太多的错误。
好了,到这里,所有的疑惑就都解开了
标签:column,id,查询,tid,查询数据库,mybatis,此时,对应 来源: https://blog.csdn.net/weixin_43313563/article/details/116500201
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。