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;
}