ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

关于使用mybatis查询数据库中的id总是为0的原因

2021-05-07 20:00:08  阅读:934  来源: 互联网

标签:column id 查询 tid 查询数据库 mybatis 此时 对应


一对多(一个老师对应多个学生)

遇到的问题: 查询到的id总是为0,而实际数据库中的id=1。
在这里插入图片描述
此时使用的映射文件是:
在这里插入图片描述
而正确的查询结果应该是id=1。
在这里插入图片描述
此时使用的映射文件是:
在这里插入图片描述
后来,经过了仔细分析,发现了唯一的区别就在于,Teacher类的映射,第一行的那个property="id"与column=“tid”,这儿不写就会导致id=0的情况

本以为到这里,事情就结束了,但是最后又发现了新的问题。

以下以起别名为tid为例:

  1. 情况一:
    在这里插入图片描述
    此时property的id对应teacher类中的id,column的tid对应起的别名tid,这是正确的写法,此时可以的到理想的结果。
  2. 情况二(重点):
    在这里插入图片描述
    此时property的id对应teacher类中的id,column的id没有对应起的别名tid,此时报了TooManyResultsException,提示查出来的值太多。
    在这里插入图片描述
  3. 情况三:
    在这里插入图片描述
    此时property的tid没有对应teacher类中的id,column的id对应起的别名tid,此时报了ReflectionException,提示没有对应的setter方法。这个还是比较好理解的。
    在这里插入图片描述
  4. 情况四:
    在这里插入图片描述

此时我直接不写这一行,就回到了刚才的最初的问题,查到的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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有