GreenDao 一对多完整代码
时间: 2023-07-16 15:13:07 浏览: 172
GreenDao的完整demo
3星 · 编辑精心推荐
这里是 GreenDao 实现一对多关系的完整代码示例:
假设我们有两个实体类:Order 和 Product,一个订单可以包含多个商品。
Order 类:
```java
@Entity
public class Order {
@Id(autoincrement = true)
private Long id;
private String orderNumber;
@ToMany(referencedJoinProperty = "orderId")
private List<Product> products;
// getters and setters
}
```
Product 类:
```java
@Entity
public class Product {
@Id(autoincrement = true)
private Long id;
private String productName;
private int price;
private Long orderId;
@ToOne(joinProperty = "orderId")
private Order order;
// getters and setters
}
```
在 Order 实体类中,我们使用了 `@ToMany` 注解来表示一个订单可以拥有多个商品,并使用 `referencedJoinProperty` 属性来指定关联的外键。在 Product 实体类中,我们使用了 `@ToOne` 注解来表示一个商品属于一个订单,并使用 `joinProperty` 属性来指定关联的外键。
接下来,在 GreenDao 的 `DaoMaster` 中添加 Order 和 Product 的实体类:
```java
public class DaoMaster extends AbstractDaoMaster {
public static final int SCHEMA_VERSION = 1;
public DaoMaster(SQLiteDatabase db) {
super(db, SCHEMA_VERSION);
registerDaoClass(OrderDao.class);
registerDaoClass(ProductDao.class);
}
public OrderDao getOrderDao() {
return new OrderDao(db);
}
public ProductDao getProductDao() {
return new ProductDao(db);
}
}
```
最后,在使用 GreenDao 的地方,我们可以通过以下方式来实现一对多的关系:
```java
// 创建订单
Order order = new Order();
order.setOrderNumber("20210001");
orderDao.insertOrReplace(order);
// 创建商品
Product product1 = new Product();
product1.setProductName("iPhone 12");
product1.setPrice(6999);
product1.setOrderId(order.getId());
productDao.insertOrReplace(product1);
Product product2 = new Product();
product2.setProductName("MacBook Pro");
product2.setPrice(13999);
product2.setOrderId(order.getId());
productDao.insertOrReplace(product2);
// 查询订单及其商品信息
Order orderWithProducts = orderDao.queryBuilder()
.where(OrderDao.Properties.Id.eq(order.getId()))
.build()
.unique();
List<Product> products = orderWithProducts.getProducts();
```
阅读全文