實(shí)體類的使用

1. 實(shí)體類的定義

實(shí)體類是smartdao用來(lái)和數(shù)據(jù)庫(kù)表做一一映射關(guān)系的類,一張表對(duì)應(yīng)一個(gè)實(shí)體類。下面就是要給實(shí)體類的示例

@Entity
@Table(name="rule_condition")
public class Condition{

    @Id
    @AutoIncrease
    private Long id;
    
    // 默認(rèn)情況smartdao開(kāi)啟了下劃線轉(zhuǎn)駝峰的功能,所以如果實(shí)體類字段正好是轉(zhuǎn)駝峰后的結(jié)果,就不用加@Column注解??梢酝ㄟ^(guò)實(shí)現(xiàn)MyBatisConfigManager接口的方式關(guān)閉下劃線轉(zhuǎn)駝峰的功能。
    @Column(name="count_rule_id")
    private Long countRuleId;
    
    private Operator oper;
    
    private String field;
    
    private String patten;
    
    //getter and setters
}

這里我們看到有很多個(gè)注解,依次解釋一下:

注解 說(shuō)明
@Entity 必須有的注解,加在類上面,標(biāo)注這個(gè)類是一個(gè)實(shí)體類,否則在保存數(shù)據(jù)時(shí)會(huì)報(bào)錯(cuò)
@Table 用來(lái)表面實(shí)體類對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的表名,通過(guò)name屬性設(shè)置,如果實(shí)體類沒(méi)有@Table注解,默認(rèn)對(duì)應(yīng)的數(shù)據(jù)庫(kù)表名和實(shí)體類名相同
@Id 用戶標(biāo)注一個(gè)字段是表的主鍵字段,每個(gè)實(shí)體類必須有且只有一個(gè)@Id注解的字段
@AutoIncrease 表示Id的產(chǎn)生方式是數(shù)據(jù)庫(kù)自增,如果不是數(shù)據(jù)庫(kù)自增,而是業(yè)務(wù)系統(tǒng)賦值,那么不需要加該注解,如果使用數(shù)據(jù)庫(kù)的序列產(chǎn)生id,需要加@Sequence注解,Sequence的name屬性為序列名稱
@Column 標(biāo)識(shí)實(shí)體類的字段對(duì)應(yīng)數(shù)據(jù)庫(kù)字段名稱,通過(guò)name屬性設(shè)置。如果不加該注解,則默認(rèn)對(duì)應(yīng)的數(shù)據(jù)庫(kù)表字段名稱和實(shí)體類字段的名稱一樣(注:由于smartdao默認(rèn)開(kāi)啟了下劃線轉(zhuǎn)駝峰的功能,所以如果數(shù)據(jù)庫(kù)字段有下劃線的,且實(shí)體類的字段名也符合轉(zhuǎn)駝峰后的寫(xiě)法,那么Column注解可以不用。并且推薦不寫(xiě),以免引起誤解)

2. 實(shí)體類支持的字段類型

目前支持的字段類型有 Integer , Long , Float ,Double , Boolean (對(duì)應(yīng)數(shù)據(jù)庫(kù) bit), Date,String,枚舉。上例中的字段類型Operator就是一個(gè)枚舉類型。需要注意的是,類型必須是裝箱類型不能是int,long,float等,否則會(huì)報(bào)錯(cuò)的哦。

3. transient 關(guān)鍵字

實(shí)體有時(shí)需要實(shí)現(xiàn)Serializable接口,這時(shí)實(shí)體類中會(huì)多一個(gè)字段

  private static final long serialVersionUID = 9031528552445081773L;

這時(shí)如果保存實(shí)體類數(shù)據(jù),會(huì)報(bào)錯(cuò)說(shuō)serialVersionUID沒(méi)有對(duì)應(yīng)的數(shù)據(jù)庫(kù)表字段,顯然這個(gè)問(wèn)題需要解決,serialVersionUID其實(shí)是不需要保存到數(shù)據(jù)庫(kù)的,對(duì)于這類字段,smartdao通過(guò)transient關(guān)鍵字來(lái)實(shí)現(xiàn)

private static final transient long serialVersionUID = 9031528552445081773L;

由此,即可完美的解決這個(gè)問(wèn)題,在實(shí)際的使用過(guò)程中,要注意合理妙用transient關(guān)鍵字哦。

4. 實(shí)體類的繼承

在實(shí)際項(xiàng)目過(guò)程中,我們會(huì)遇到這樣的場(chǎng)景:沒(méi)張表都有一個(gè)必要的字段如addtime,last_modify_time,delete_flag,modify_uid等。這樣我們的每個(gè)實(shí)體類中都需要有這些公共的字段,為了方便我們會(huì)將公共字段抽取到父類中。smartdao是支持這樣使用的方式的。

@Entity
@Table(name="rule_condition")
public class Condition extends BaseEntity{

    @Id
    @AutoIncrease
    private Long id;
    
    @Column(name="count_rule_id")
    private Long countRuleId;
    
    private Operator oper;
    
    private String field;
    
    private String patten;
}
public class BaseEntity {

    private Date addtime;
    
    @Column(name="delete_flag")
    private Integer deleteFlag;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容