在Mybatis中有时候可能会出现我们表字段和实体类名映射不一致的问题,这样查询的数据往往是为null。
假设现在有一张表如下:
该表对应的实体类如下:
@Data
public class Emp {
// 员工编号
private Integer id;
// 员工姓名
private String name;
// 员工年龄
private Integer age;
// 所属部门
private Integer deptId;
}
我们简单写一个查询语句如下:
我们请求方法,得到结果如下:
可以看deptId属性是为空的,此时表字段和实体类字段是没有映射上导致的问题。
总结以下方法
1、将不对应的字段起别名
将dept_id起别名之后和实体类字段对应,即可查询。
(不推荐,如果数据库字段多,比较麻烦)
2、定义resultMap
此标签可以解决数据库字段与实体类的属性不一致时,使用该标签进行一一映射。
我们在select标签中指定上resultMap的唯一标识(empPojo)即可。
resultMap标签的属性含义如下:
1、id:唯一标识
2、type:表示对应哪个实体类
3、column:表示数据库字段的名称
4、property:表示实体类字段的名称
3、Mybatis开启驼峰命名
按照规范命名,我们将数据库字段的下划线的后一个字母转成大写。
例如:数据库的字段为dept_id,那么java实体类中为deptId。
在yml或properties中配置开启驼峰命名:
mybatis:
configuration:
map-underscore-to-camel-case: true # 开启驼峰命名 (下划线)
以上三种解决办法都可以,各取所需