javax.persistence中@Column定義字段類型方式
javax.persistence中@Column定義字段類型
在@Column中有個(gè)比較強(qiáng)大的配置 columnDefinition,如果有不好定義或者java沒有這個(gè)屬性的直接用columnDefinition根據(jù)ddl來(lái)定義即可,字段的注釋也是可以定義的。
package com.ld.entity; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.serializer.SerializerFeature; import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.*; import java.util.Date; import java.util.List; @Entity @Table(name = "banner") public class BannerN { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column private Integer id; @Column(name = "module_id",columnDefinition="bigint(20)") private Long moduleId; private String name; @Column(name = "detail",columnDefinition="varchar(255) comment '詳情'") private String detail; @Column(name = "banners",columnDefinition="text comment '集合字符串'") private String banners; @Transient private List<Banner> bannerList; private Integer type; @Transient private Integer index; private Integer orderIndex; private Long pageId; static class Banner { private Long id; private Date createTime; private Integer index; private String pictrue; private String click_url;//跳轉(zhuǎn)鏈接 private String click_url_IOS;//跳轉(zhuǎn)鏈接 private String click_url_Android;//跳轉(zhuǎn)鏈接 private String copywriting;//文案 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Integer getIndex() { return index; } public void setIndex(Integer index) { this.index = index; } public String getPictrue() { return pictrue; } public void setPictrue(String pictrue) { this.pictrue = pictrue; } public String getClick_url() { return click_url; } public void setClick_url(String click_url) { this.click_url = click_url; } public String getClick_url_IOS() { return click_url_IOS; } public void setClick_url_IOS(String click_url_IOS) { this.click_url_IOS = click_url_IOS; } public String getClick_url_Android() { return click_url_Android; } public void setClick_url_Android(String click_url_Android) { this.click_url_Android = click_url_Android; } public String getCopywriting() { return copywriting; } public void setCopywriting(String copywriting) { this.copywriting = copywriting; } } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } 。。。 public String getBanners() { if (this.banners != null) { this.setBannerList(JSONArray.parseArray(banners, Banner.class)); } return banners; } public void setBanners(String banners) { this.banners = banners; this.bannerList = JSONArray.parseArray(banners, Banner.class); } public List<Banner> getBannerList() { return bannerList; } public void setBannerList(List<Banner> bannerList) { this.bannerList = bannerList; this.banners = JSONArray.toJSONString(bannerList, SerializerFeature.UseISO8601DateFormat); } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public Integer getIndex() { this.orderIndex = index; return index; } public void setIndex(Integer index) { this.index = index; this.orderIndex = index; } public Integer getOrderIndex() { if(orderIndex!=null){ this.index = orderIndex; } return orderIndex; } public void setOrderIndex(Integer orderIndex) { this.orderIndex = orderIndex; if(orderIndex!=null){ this.index = orderIndex; } }
@Transient
:自動(dòng)生成表時(shí)忽略該字段。@Id
:主鍵@GeneratedValue(strategy = GenerationType.IDENTITY)
:主鍵策略(IDENTITY:自增)
記一個(gè)@Column的坑
注解@Column(javax.persistence.Column),我們通常使用在DAO實(shí)體類的屬性上,一般用來(lái)標(biāo)識(shí)該屬性的數(shù)據(jù)庫(kù)值(name,其他用途不提)。
BUG是這樣產(chǎn)生的
項(xiàng)目中的實(shí)體類生成時(shí)每個(gè)字段均生成了@Column注解,且準(zhǔn)確無(wú)誤。
然后通用mapper使用沒有任何問題,直到有一次,在*Mapper接口中手寫了SQL(查詢某表中滿足條件的最新的一條記錄):
@Select("SELECT * FROM t_test WHERE test_name = #{testName} ORDER BY gmt_create DESC LIMIT 1")
測(cè)試時(shí),發(fā)現(xiàn)除了單個(gè)字段的屬性有返回值(如:id、creator),其他多個(gè)單詞組成的屬性均沒有值(如:testName、gmtCreate)。
因?yàn)檎业搅诉@個(gè)規(guī)律,所以斷定是字段映射出錯(cuò)了,后來(lái)驗(yàn)證確實(shí)如此。
解決方法
在mybatis配置中加上駝峰命名自動(dòng)轉(zhuǎn)換規(guī)則:
mybatis.configuration.map-underscore-to-camel-case=true
由于水平有限,暫不清楚@Column在什么條件下有用。經(jīng)測(cè)試,刪除@Column,保留mybatis駝峰命名轉(zhuǎn)換規(guī)則,通用mapper查詢、*Mapper.java接口手寫sql(包括屬性寫在查詢條件中、返回結(jié)果中)、*Mapper.xml手寫sql,均無(wú)問題。
有點(diǎn)不負(fù)責(zé)任地建議,實(shí)體類中不需要添加@Column注解,添加mybatis自動(dòng)轉(zhuǎn)換規(guī)則即可。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java數(shù)據(jù)庫(kù)連接池和數(shù)據(jù)庫(kù)連接示例
這篇文章主要介紹了java數(shù)據(jù)庫(kù)連接池和數(shù)據(jù)庫(kù)連接示例,需要的朋友可以參考下2014-05-05利用MyBatis實(shí)現(xiàn)條件查詢的方法匯總
這篇文章主要給大家介紹了關(guān)于利用MyBatis實(shí)現(xiàn)條件查詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08springboot 如何設(shè)置端口號(hào)和添加項(xiàng)目名
這篇文章主要介紹了springboot設(shè)置端口號(hào)和添加項(xiàng)目名的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java鏈表元素查找實(shí)現(xiàn)原理實(shí)例解析
這篇文章主要介紹了Java鏈表元素查找實(shí)現(xiàn)原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07深入理解Java class文件格式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
對(duì)于理解JVM和深入理解Java語(yǔ)言, 學(xué)習(xí)并了解class文件的格式都是必須要掌握的功課2017-06-06Springboot實(shí)現(xiàn)發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)發(fā)送郵件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10