ICode9

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

巨坑:数据库查询有结果,而对应的实体类个别为null

2021-09-05 19:34:14  阅读:280  来源: 互联网

标签:实体类 巨坑 resultMap resultType code user null


一个小小的疏忽,浪费了好几个小时时间,差点崩溃!!!

在完善项目数据库的过程中,由于命名的不规范,所有对某些数据库的表字段进行了修改。然后在重新整理测试代码的过程中,发现查询出现有几个字段一直没有映射成功,依然为null。然后开始令人崩溃疯狂找bug过程,各种方法都试了个遍.......

 首先数据库是存在数据,然后一直怀疑xml文件出现问题。

<select id="checkCode" parameterType="String" resultType="User">
    select * from sys_user where code = #{code}
</select>

 <update id="updateUserStatus" parameterType="User">
        update sys_user set status=1,code=null where user_id=#{UserID}
 </update>

对应的控制器代码:

 @RequestMapping(value = "/selectCode")
    public String checkCode(String code){
        User user = userService.checkCode(code);
        System.out.println(user+"未成功激活");
        //如果用户不等于null,把用户状态修改status=1
        if (user !=null){
            user.setStatus(1);
            //把code验证码清空,已经不需要了
            user.setCode("");
            System.out.println(user+"激活成功");
            userService.updateUserStatus(user);
        }
        return "login";
    }

 根据上面控制器的代码,控制台输出的结果如下:user对象有部分数据输入,但是ID为0,登录的账号为null。

兜兜转转找来找去,也没发现哪里不对劲,但是数据库里面就能查询到数据,这就很奇怪了!

使用debug执行 ,发现其中部分字段始终映射不上,真的崩溃

上网百度看见说什么mybatis的配置文件,需要开启驼峰命名才会映射到实体类中的字段,尝试过后发现也不是这个原因

后来我终于知道了原因,原来是返回值类型resultType和resultMap的区别!!!
对应的实体类属性和表中字段不一致,需要利用resultMap来添加映射,把数据库表属性和实体类字段进行绑定 

 只有当数据库表中的字段名称与实体类中的属性名称完全相同,才能直接使用resultType返回类型,后面跟上该实体类的名称。否则一定需要用resultMap进行属性映射,否则得到的数据一直没有匹配的实体类与之对应,返回的结果也自然为空!!!就是一个单词的疏忽,找了半天,你说气不气?诶........

ResultMap和ResultType的区别:

使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType;另一种就是resultMap:

1、resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。

因此对于单表查询的话用resultType是最合适的

2、resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。

resultMap对于一对一表连接的处理方式通常为在主表的pojo中添加嵌套另一个表的pojo,然后在mapper.xml中采用association节点元素进行对另一个表的连接处理

3、resultType是直接表示返回类型的(对应着我们的model对象中的实体)

resultMap则是对外部ResultMap的引用(提前定义了db和model之间的隐射key-->value关系),但是resultType跟resultMap不能同时存在。

标签:实体类,巨坑,resultMap,resultType,code,user,null
来源: https://blog.csdn.net/weixin_44541136/article/details/120117210

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

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

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

ICode9版权所有