实体注解

QuickDAO提供了实体类注解用于用户自定义字段属性.

@Id

标识Id字段,作用于类字段上

  1. public class User{
  2. @Id
  3. private long uid;
  4. }

Id生成策略

@Id注解带有strategy属性,strategy的值为以下值之一

  • None(用户自己手动设置该Id属性)
  • AutoIncrement(设置为数据库自增,默认值)
  • IdGenerator(使用Id生成器,需要在配置DAO对象时手动指定Id生成器)

每个实体类可以单独设置自己的Id生成策略,同时也可以在配置DAO对象时指定全局Id策略.@Id注解优先于全局策略.

全局Id生成器策略请参阅配置DAO

@ColumnName

映射字段名,作用于类字段上

  1. public class User{
  2. @ColumnName("uid")
  3. private long id;
  4. }

@TableName

映射表名,作用于类上

  1. @TableName("myUser")
  2. public class User{
  3. }

@ColumnType

自定义数据库类型,作用于类字段上

  1. public class User{
  2. @ColumnName("varchar(1024)")
  3. private String username;
  4. }

@Comment

添加数据库注释,作用于类和成员变量上

  1. @Comment("用户表")
  2. public class User{
  3. @Comment("用户名")
  4. private String username;
  5. }

@Index

在该字段上建立索引,作用于类字段上

建议在有唯一性约束的字段上建立索引,以便加快检索速度

  1. public class User{
  2. @Index
  3. private String username;
  4. }

@Constraint

添加约束,包括是否非空,是否唯一,check约束以及默认值,作用于类字段上

  • notNull 是否非空,默认为false
  • unique 是否唯一,默认为false
  • check check约束,默认为空
  • defaultValue 默认值,默认为为空
  • unionUnique 是否建立联合唯一约束,默认为true

建立唯一约束时,会将所有unionUnique属性为true的字段建立一个联合唯一约束. 对于unionUnique为false的字段会单独建立唯一约束

  1. public class User{
  2. //userId属性id必须大于0
  3. @Constraint(check = "#{userId} > 0")
  4. private String userId;
  5. //设置username属性非空且唯一
  6. @Constraint(notNull=true, unique=true)
  7. private String username;
  8. //年龄默认设置为5岁
  9. @Constraint(defaultValue="5")
  10. private int age;
  11. }

@ForeignKey

添加外键约束,指定关联字段以及外键字段更新和删除时的策略,作用于类字段上

  • table 关联到哪张表
  • field 关联到表的哪个字段,默认为id
  • foreignKeyOption 外键级联更新策略,默认为NOACTION
  1. public class User{
  2. @ForeignKey(table=Address.class,field="uid",foreignKeyOption=ForeignKeyOption.RESTRICT)
  3. private long addressId;
  4. }

@Table

作用于类

  • charset 指定表编码
  • engine 指定表引擎

目前该注解只对Mysql数据有效.

  1. @Table(charset="utf8",engine="innoDB")
  2. public class User{
  3. @Ignore
  4. private int age;
  5. }

@TableField

作用于类字段

  • createdAt 是否填充插入时间,默认为false
  • updatedAt 是否填充更新时间,默认为false
  1. @TableField(createdAt = true)
  2. private Date createdAt;
  3. @TableField(updatedAt = true)
  4. private Date updatedAt;
  • function 指定字段函数属性

指定了function属性后,在查询,新增和更新操作时,会自动用指定的function值替换对应的SQL语句部分.

场景举例: 密码字段使用md5函数加密

  1. //以下注解会使得在查询,插入,更新此字段时都会自动执行md5函数
  2. @TableField(function = "md5(concat('salt#',#{password}))")
  3. private String password;

@Ignore

忽略该类/忽略该字段,作用于类和类字段上

忽略age属性

  1. public class User{
  2. @Ignore
  3. private int age;
  4. }

忽略Address类

  1. @Ignore
  2. public class Address{
  3. }

默认情况下QuickDAO会自动忽略实体类中集合类成员变量以及实体类成员变量,除非您调用了Condition类的compositField方法

  1. public class User{
  2. private Address address;
  3. private List<Long> userIds;
  4. //默认情况下上述属性均会自动被QuickDAO所忽略
  5. }