greendao创建关联表的数据库

参考: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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值