当前使用版本
问题描述
请问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
牛逼,大佬