• 通用Mapper获取数据表中id为0解决方法。千万别瞎改int为integer了


    项目场景:

    最近准备自己写一个框架。由于是舍弃了成熟框架,所以在集成一些组件的时候,发现了一些之前没有注意过的问题。
    这次是集成通用mapper时出现的一个问题。。。


    问题描述

    使用通用Mapper的selectAll()方法后,得到的id值都为0:
    代码如下:

    实体类User.java:

    package org.example.module.test.vo;
    
    import lombok.Data;
    import javax.persistence.Table;
    
    @Data
    @Table(name = "user")
    public class User {
        private int id;
        private String username;
        private String password;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Controller类UserController.java:

    @Api(tags = "User模块")
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @ApiOperation(value = "获取所有用户")
        @GetMapping("/getAll")
        public Result<?> getAllUser(){
            List<User> userList = userService.getAllUser();
            return Result.ok(userList);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    Service类UserService.java:

    @Service
    public class UserService {
    
        @Autowired
        public UserMapper userDao;
    
        public List<User> getAllUser() {
            System.out.println("查询用户...all");
            List<User> userList= userDao.selectAll();
            return userList;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Mapper类UserMapper.java:

    @Component
    public interface UserMapper extends Mapper<User> {
    }
    
    • 1
    • 2
    • 3

    在测试selectAll()方法时,发现得到所有User类中id值都为0:
    在这里插入图片描述
    再看一下数据库里的值:
    在这里插入图片描述
    并且日志里的语句中没有id字段:
    在这里插入图片描述


    原因分析:

    记得之前项目中有些把id值的类型设置为Integer类型,修改后没有问题。但总感觉这是换了条路,在逃避真正的问题。所以选择硬刚。
    在网上搜了搜解决方案,但大部分还都是把int类型改为Integer。。。。
    在这里可以点进方法里跟进一下:
    1、点进selectAll()方法后进入这里
    在这里插入图片描述

    2、这里有个注解@SelectProvider,点进去可以找到对应的方法
    在这里插入图片描述

    3、在这个方法里可以看到SqlHelper.selectAllColumns(entityClass)。可以给这个方法打个断点。往后跟到下面图这里,可以看到,从User类中分析出来的成员中没有是没有id的。
    在这里插入图片描述


    解决方案:

    给int id加上@Column注解。
    这里解释一下@Column:用来标识实体类中属性与数据表中字段的对应关系。

    ???????????
    但这里还有个疑问,在跟断点的时候,没有找到分析实体类的地方,不知道实体类在被分析时经历了什么样的过程。希望如果有大神,可以指教一下。谢谢🙏
    ???????????

  • 相关阅读:
    Javascript 手写 LRU 算法
    机器学习 | 贝叶斯神经网络
    上市公司女性高管指标数据1999-2020年(含stata代码)
    C语言--从键盘输入10个数字放在数组中,并输出
    线程安全的使用ArrayList和HashMap
    数据校验JSR303入门实践
    配置d3dx9.h
    共同构建全球发展共同体,代谢组学义不容辞
    使用位移基本场方法对空间扩展光源进行建模
    【UDS】ISO14229之0x85服务
  • 原文地址:https://blog.csdn.net/baiwenjiebwj/article/details/127916482