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

当在MyBatisPlus中使用@TableField注解的字段进行多表查询时,可能会遇到查询结果不包含这些字段的问题。解决方案包括在配置文件中开启驼峰转下划线转换或直接修改数据库表字段为驼峰命名。文中提供了两种解决策略的详细说明,并给出了实际操作示例。
摘要由CSDN通过智能技术生成

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuyuanshun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值