问题背景
在使用QueryWrapper.select()查询指定字段的时候,发现某些字段返回值为null。而这些字段在Bean中的名称和在数据库中的名称不一致。
查询代码如下。
1 2 3 4 5 6 7
| QueryWrapper<Employee> wrapper = new QueryWrapper<>();
wrapper.select("employee_id", "last_name", "salary") .eq("first_name", "chen");
List<Employee> employees = employeeMapper.selectList(wrapper); log.debug(String.valueOf(employees));
|
Employee代码
1 2 3 4 5 6 7 8 9 10
| public class Employee { @TableId(value = "employee_id") private Integer id; private String firstName; private String lastName; private String email; private double salary; private int departmentId; }
|
数据库字段
查询结果:

可以看到,Employee中的id字段和数据库中的employee_id字段不一致。这就导致了使用QueryWrapper.select()查询结果为null的问题。
问题原因
根据 queryWrapper使用.select时,id字段为null · Issue #3673 · baomidou/mybatis-plus (github.com) 可知。
在使用QueryWrapper.select()时,@TableId(value = "employee_id")是无效的。所以造成了名称映射错误,从而返回了null。
解决方法
将select中添加转化语句,将查询代码改成下面样式,即可解决问题
1 2 3 4 5 6 7
| QueryWrapper<Employee> wrapper = new QueryWrapper<>()e
wrapper.select("employee_id as id", "last_name", "salary") .eq("first_name", "chen");
List<Employee> employees = employeeMapper.selectList(wrapper); log.debug(String.valueOf(employees));
|
查询结果
