美文网首页
实体类的使用

实体类的使用

作者: 孤月夜行舟 | 来源:发表于2019-01-04 11:34 被阅读0次

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

    相关文章

      网友评论

          本文标题:实体类的使用

          本文链接:https://www.haomeiwen.com/subject/nxehrqtx.html