参考:http://www.doc88.com/p-538467175318.html
在GreenDao中,实体类的生成是通过Entity类来进行的,可以说一个Entity对象对应一个实体类。实体类中的属性可以通过Entity对象的方法进行添加,GreenDao会根据我们添加的属性自动生成实体类。我们可以通过一系列方法进行操作。
可以自定义一张表的表名
entity.setTableName(test);
如果你要为一个实体类添加一个id,则可以使用
entity.addIdProperty()
添加一个主键,并且自增
entity.addLongProperty(num).primaryKey().autoincrement();
你可以通过下面的一些列方法增加一个对应类型的字段
entity.addShortProperty(); entity.addIntProperty(); entity.addFloatProperty(); entity.addDoubleProperty(); entity.addLongProperty(); entity.addStringProperty(); entity.addBooleanProperty(); entity.addByteProperty(); entity.addDateProperty(); entity.addByteArrayProperty();
当然你也可以修改列名
entity.addIntProperty().columnName();
表中会有一些约束条件,可以指定字段为主键,非空,唯一,也可以指定索引。
entity.addIntProperty().isPrimaryKey() entity.addStringProperty().notNull(); entity.addIntProperty().unique(); entity.addLongProperty().index();
可以让实体类实现接口,继承父类,导入包
entity.implementsSerializable(); entity.implementsInterface(com.test.A); entity.setSuperclass(com.test.B);
entity.addImport(com.test.B);
如果你想自己添加一些引入包,字段,方法,但是不希望重新生成的时候被覆盖掉
你可以这么做
首先调用下面这个方法。
schema.enableKeepSectionsByDefault();
之后在之指定的块之间添加代码。
// KEEP INCLUDES - put your custom includes here 添加引入 // KEEP INCLUDES END // KEEP FIELDS - put your custom fields here 添加字段 // KEEP FIELDS END // KEEP METHODS - put your custom methods here 添加方法 // KEEP METHODS END
添加完成后你重写生成实体类,这三部分之间的内容会被保留
如果你需要ContentProvider的支持,则添加以下代码
entity.addContentProvider();
之后会自动生成一个ContentProvider
GreenDao对实体类的关联关系也是支持的很好的。
例如:
1.两张表一对一:
我们知道,一个人有一张身份证,一张身份证对应一个人,这两者的关系是一对一。下面我们生成这两个实体类,并进行一对一映射。
一个人的一些属性
Entity person = schema.addEntity("Person");
//id为person的主键
Property idcardPK = person.addIdProperty().getProperty();
person.addStringProperty("name");
person.addDoubleProperty("height");
person.addDoubleProperty("weight");
身份证的一些属性:
Entity card = schema.addEntity("Card");
//id为card表的主键
Property personPK = card.addIdProperty().getProperty();
card.addStringProperty("num");
card.addStringProperty("address");
之后我们通过addToOne的方法进行映射
//id即为card表中的主键id,作为card表的外键存在于person表中,用于索引card表的记录
person.addToOne(card, idcardPK);
//id即为person表中的主键id,作为person表的外键存在于card表中,用于索引card表的记录
card.addToOne(person,personPK);
2.一对多
接下来来看一对多映射。在淘宝上购物,一个顾客可能会有多个订单,但是一个订单只属于一个顾客。顾客对订单是一对多,订单对顾客是多对一。
随意在顾客与订单实体类上增加几个属性。
Entity customer = schema.addEntity(Customer);
//id作为customer的主键
Property pc=customer.addIdProperty().getProperty();
customer.addStringProperty(name);
customer.addDoubleProperty(money);
Entity order = schema.addEntity(Order);
order.setTableName(Orders);
//id作为order的主键
order.addIdProperty();
order.addStringProperty(num);
order.addDoubleProperty(desc);
进行关系映射
Property p=order.addLongProperty("customerId").getProperty();
//将customer表中的主键id(pc)映射到order表中的customerId(p)上
customer.addToMany(pc,order,p).setName("orders");
//customerId为customer在order表中的外键
order.addToOne(customer,p);
3、多对多
还有更复杂的关系就是多对多了,我们知道学生选课系统中,一个学生可以选多门课,一门课可以被多个学生选,这个关系是多对多的。
下面是学生和课程的实体类:
Entity student = schema.addEntity(Student);
student.addIdProperty();
student.addStringProperty(studentName).notNull();
student.addIntProperty(studentAge);
student.addDateProperty(studentBirth);
student.addBooleanProperty(studentSex);
Entity course = schema.addEntity(Course);
course.addIdProperty();
course.addStringProperty(courseName).notNull();
course.addStringProperty(courseDesc);
course.addIntProperty(courseTimes);
course.addDoubleProperty(courseCredit);
多对多的映射我们是通过第三张表来完成的
Entity sc = schema.addEntity(StudentCourse);
Property studentId = sc.addLongProperty(studentId).getProperty();
Property courseId = sc.addLongProperty(courseId).getProperty();
sc.addToOne(student,studentId);
sc.addToOne(course, courseId);
student.addToMany(sc, studentId);
course.addToMany(sc,studentId);