mybatisPlus @TableField(“xxxx_xx”)失效 查询不到字段指定字段

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 '类型';

由于我的整个项目表字段之前就是驼峰式的写法,所以我是用方案二解决的。方案一理论上也是可以的,但是没有实际的去操作。


版权声明:本文为wuyuanshun原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。