在我们进行后端开发的时候,我们一般在数据库中使用的是下划线命名法,而在Java代码中使用的是驼峰命名法,这就会导致与数据库交互的时候会出现字段不匹配等等的问题,接下来就介绍Mybatis Plus中相关问题的解决办法。
1.属性名与表字段设计不同步
MybatisPlus提供了一个注解 @TableField
,使用该注解可以实现模型类属性名和表的列名之间的映射关系
CREATE TABLE 'tb_scene'(
'SCENE_ID' bigint(20) NOT NULL,
'SCENE_NAME' varchar(32)
PRIMARY KEY('id')
)
public class Scene {
/**
* 场景编码
*/
@TableField(value = "SCENE_ID")
private String sceneId;
/**
* 场景名称
*/
@TableField(value = "SCENE_NAME")
private String sceneName;
}
2.编码中出现了表中没有对应的字段
当模型类中多了一个数据库表不存在的字段,就会导致生成的sql语句中操作了数据库不存在的字段,无法识别,程序运行就会报错 。此时我们可以使用注解 @TableField
中的 exist 属性来解决,表示该属性在数据库中不存在对应字段。
CREATE TABLE 'tb_scene'(
'SCENE_ID' bigint(20) NOT NULL,
'SCENE_NAME' varchar(32)
PRIMARY KEY('id')
)
public class Scene {
/**
* 场景编码
*/
@TableField(value = "SCENE_ID")
private String sceneId;
/**
* 场景名称
*/
@TableField(value = "SCENE_NAME")
private String sceneName;
/**
* 备注
*/
@TableField(exist = false)
private String remark;
}
如果表中存在敏感数据不希望查询返回给前后端,也可以使用注解
@TableField
中的 select 属性来设置不查询该字段。
3.类名与表名不一致
MybatisPlus默认情况下会使用模型类的类名以首字母小写的方式当表名使用,此时我们可以用注解 @TableName 来声明表名
CREATE TABLE 'tb_scene'(
'SCENE_ID' bigint(20) NOT NULL,
'SCENE_NAME' varchar(32)
PRIMARY KEY('id')
)
@TableName("tb_scene")
public class Scene {
/**
* 场景编码
*/
private String sceneId;
/**
* 场景名称
*/
private String sceneName;
}
当数据库表越来越多时,模型类也会越来越多,一个一个配置也会很麻烦,当数据库都是以tb_来命名时,此时可以配置一下配置文件中的内容来简化开发:
mybatis-plus:
global-config:
db-config:
table-prefix: tb_
设置表的前缀内容,这样MybatisPlus就会拿 tb_
加上模型类的首字母小写,就组装成数据库的表名。