對Mybatis Plus中@TableField的使用正解

@TableField的使用

1 研究背景和過程

妹紙開發突然發現@TableField失效瞭,在群裡發問。一瞭解,發現妹紙本意是想用@TabkeField達到類似@JsonProperty的功能。也就是當實體類屬性名與數據庫列名不一致時,通過此註解實現別名效果。

奇怪的是,這註解一部分成功,一部分失效。具體表現就是有時候可以取到值,有時候又取不到。我點進改註解源碼,發現它給value設定的本意是:當駝峰轉化未開啟時,使用此註解實現駝峰轉化。然而,我實際測試表明它其實沒這功能。

我信誓旦旦跟妹紙講,@TableField沒有別名的功能。誰知妹紙給我發瞭一張自動打印sql的截圖。裡面清清楚楚的顯示,MP確實自動生成瞭AS別名。靈光一閃,是否是Mybatis Plus自動生成的可以別名,而自己寫的sql就不行?

不驗不知道,一驗嚇一跳。果然如此,手寫的sql都不能自動生成別名,而自動生成的sql查詢語句都成功轉化瞭。至此,@TableField註解告一段落。

2 總結

2.1 別名效果 value屬性

使用MP自動生成的方法時,可以用@TableField起別名

在xml寫sql時,需要用as或者resultMap來轉化

2.2 防止字段持久化 exist屬性

使用exist屬性可以控制類中屬性在表中是都一定對應,如果有不存在於數據表的字段,建議都設成fasle

@TableField的作用

@TableField(exist = false)

註解加載bean屬性上,表示當前屬性不是數據庫的字段,但在項目中必須使用,這樣在使用bean的時候,mybatis-plus就會忽略這個,不會報錯

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: