1. 实体类的定义
实体类是smartdao用来和数据库表做一一映射关系的类,一张表对应一个实体类。下面就是要给实体类的示例
@Entity
@Table(name="rule_condition")
public class Condition{
@Id
@AutoIncrease
private Long id;
// 默认情况smartdao开启了下划线转驼峰的功能,所以如果实体类字段正好是转驼峰后的结果,就不用加@Column注解。可以通过实现MyBatisConfigManager接口的方式关闭下划线转驼峰的功能。
@Column(name="count_rule_id")
private Long countRuleId;
private Operator oper;
private String field;
private String patten;
//getter and setters
}
这里我们看到有很多个注解,依次解释一下:
注解 | 说明 |
---|---|
@Entity | 必须有的注解,加在类上面,标注这个类是一个实体类,否则在保存数据时会报错 |
@Table | 用来表面实体类对应的数据库表的表名,通过name属性设置,如果实体类没有@Table注解,默认对应的数据库表名和实体类名相同 |
@Id | 用户标注一个字段是表的主键字段,每个实体类必须有且只有一个@Id注解的字段 |
@AutoIncrease | 表示Id的产生方式是数据库自增,如果不是数据库自增,而是业务系统赋值,那么不需要加该注解,如果使用数据库的序列产生id,需要加@Sequence注解,Sequence的name属性为序列名称 |
@Column | 标识实体类的字段对应数据库字段名称,通过name属性设置。如果不加该注解,则默认对应的数据库表字段名称和实体类字段的名称一样(注:由于smartdao默认开启了下划线转驼峰的功能,所以如果数据库字段有下划线的,且实体类的字段名也符合转驼峰后的写法,那么Column注解可以不用。并且推荐不写,以免引起误解) |
2. 实体类支持的字段类型
目前支持的字段类型有 Integer , Long , Float ,Double , Boolean (对应数据库 bit), Date,String,枚举。上例中的字段类型Operator就是一个枚举类型。需要注意的是,类型必须是装箱类型不能是int,long,float等,否则会报错的哦。
3. transient 关键字
实体有时需要实现Serializable接口,这时实体类中会多一个字段
private static final long serialVersionUID = 9031528552445081773L;
这时如果保存实体类数据,会报错说serialVersionUID没有对应的数据库表字段,显然这个问题需要解决,serialVersionUID其实是不需要保存到数据库的,对于这类字段,smartdao通过transient关键字来实现
private static final transient long serialVersionUID = 9031528552445081773L;
由此,即可完美的解决这个问题,在实际的使用过程中,要注意合理妙用transient关键字哦。
4. 实体类的继承
在实际项目过程中,我们会遇到这样的场景:没张表都有一个必要的字段如addtime,last_modify_time,delete_flag,modify_uid等。这样我们的每个实体类中都需要有这些公共的字段,为了方便我们会将公共字段抽取到父类中。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;
}