mybatisPlus @TableField(“xxxx_xx”)失效 查询不到字段指定字段
问题:
单表查询时可以正常返回字段,自定义sql多表查询时,改字段的注解就失效了查不出来。
如:
对象A (table_a表)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("table_a")
public class AxxEntity implements Serializable {
@TableId(type = IdType.UUID,value = "id")
private String id;
@TableField(value = "axx_type")
private Integer axxType;
/**
* 创建时间
*/
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@TableField(value = "createTime")
private Date createTime;
/**
* 修改时间
*/
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@TableField(value = "updateTime")
private Date updateTime;
}
对象B (table_b表)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("table_b")
public class BxxEntity implements Serializable {
@TableId(type = IdType.UUID,value = "id")
private String id;
@TableField(value = "bxx_id")
private String bxxId;
@TableField(value = "bxx_type")
private Integer bxxType;
/**
* 创建时间
*/
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@TableField(value = "createTime")
private Date createTime;
/**
* 修改时间
*/
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@TableField(value = "updateTime")
private Date updateTime;
}
返回A对象,但是A对象中的axx_type字段的没有返回
select a.* from table_a a left join table_b b on a.id=b.bxx_id where b.bxx_type="xxx";
解决方案一
我这里的背景是项目配置统一没有开驼峰转下划线,如果可以配置的话(不影响整体代码调整),可以再yml文件中配置如下:(column-underline: true)
#mybatis
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: io.metaitems.entity
global-config:
#数据库相关配置
db-config:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: AUTO
#字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
field-strategy: NOT_NULL
#驼峰下划线转换
column-underline: true
logic-delete-value: -1
logic-not-delete-value: 0
banner: false
#原生配置
configuration:
map-underscore-to-camel-case: false
cache-enabled: false
call-setters-on-nulls: true
jdbc-type-for-null: 'null'
#sql打印
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
解决方案二
修改sql中的字段,将axx_type改为驼峰式(与代码对象字段对应上)。
ALTER TABLE `table_a` CHANGE `axx_type` `axxType` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '类型';
由于我的整个项目表字段之前就是驼峰式的写法,所以我是用方案二解决的。方案一理论上也是可以的,但是没有实际的去操作。