当前使用版本

3.1.2

问题描述

请问MP支持entity的属性能自定义别名吗? 如下例子:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("wx_order")
public class WxOrder extends Model<WxOrder> {

    private static final long serialVersionUID=1L;

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 唯一订单号
     */
    private String outTradeNo;
}

对应resultMap

<resultMap id="BaseResultMap" type="entity.WxOrder">
        <id column="wxOrder_id" property="id" />
        <result column="wxOrder_out_trade_no" property="outTradeNo" />`
</resultMap>

<sql id="Base_Column_List">
        wx_order.id AS wxOrder_id,
        wx_order.out_trade_no AS wxOrder_out_trade_no
</sql>

即自动将属性名别名化成 : 实体类驼峰命_ + 原表字段 这样多表关联时就不用担心字段名重复的问题 用@TableField 的 效果是这样的

/**
     * 主键ID
     */
    @TableField(value = "wxOrder_id")
    private Long id;

/**
     * 商品编号
     */
    @TableField(value = "wxGoods_code")
    private String code;
JsqlParserCountOptimize sql=SELECT  id,wxGoods_code AS code,wxGoods_category AS category,WxGoods_goods_name AS goodsName,WxGoods_fee_type AS feeType,WxGoods_price AS price,WxGoods_attach AS attach,WxGoods_operator AS operator,WxGoods_gmt_update AS gmtUpdate  FROM wx_goods
==>  Preparing: SELECT COUNT(1) FROM wx_goods 
==> Parameters: 
<==    Columns: COUNT(1)
<==        Row: 0

我希望的效果是刚好相反的, 如 select code as wxGoods_code

Comment From: qmdx

注解 TableField 值 value 表示真实数据库字段, 变量 code 只是 java 属性而已,请确定你是否需求有误,另外建议命名规范一点,这样避免 as

Comment From: LennyLzy

注解 TableField 值 value 表示真实数据库字段, 变量 code 只是 java 属性而已,请确定你是否需求有误,另外建议命名规范一点,这样避免 as

可能你理解错了我的问法。我的意思是数据库的字段是没有表前缀的,用代码生成器生成entity后属性也不带前缀的,但是映射resultmap的时候列能对应带表前缀的别名。按照你的说法,你建议我在数据库命名字段时就直接带表前缀?

Comment From: qmdx

@LennyLzy 建议你规范命名,全局配置规则即可可以避免 AS 转换注解,例如 1、下划线命名法 user_name 实体对应 userName 2、驼峰命名法 userName 实体对应 userName

Comment From: java-aodeng

牛逼,大佬