前面介绍了ormlite操作单张表以及多表之间的一对多(多对一)的关系(请参考android对象关系映射框架ormlite学习之单表操作和android关系映射框架ormlite学习之OneToMany),但是我们还经常会遇到多对多的数据库表关系,在处理多对多的关系表时,ormlite官方给出的解决方案是通过建立第三张关联表来解决的。这里通过这个解决方案来解决我们最后一个关于多对多关系。
我假设的场景是项目(Project)和用户(User),即一个用户参与多个项目,而一个项目又由多个人员进行开发,构成多对多的关系。同样的对于中间重要的方法类注释在代码中。首先同样给出运行效果图:
实体用户类User.java
@DatabaseTable(tableName = "tb_user")
public class User {
//这里用一个常量来设置属性的名字,这样我们在中就可以直接使用该名字
public final static String ID_FIELD_NAME = "user_id";
//用户编号
@DatabaseField(generatedId=true,columnName=ID_FIELD_NAME)
private int userId;
//用户名
@DatabaseField
private String userName;
public User() {
//提供无参构造函数,这样查询的时候可以返回查询出来的对象
}
public User( int userId,String userName) {
this.userId = userId;
this.userName = userName;
}
get/set方法
}实体项目类Project.java
/**
* 项目类(假设一个用户参与多个项目,一个项目又由多个用户参与负责)
* @author leox
*
*/
@DatabaseTable(tableName="tb_project")
public class Project {
public final static String ID_FIELD_NAME = "project_id";
//项目编号
@DatabaseField(generatedId=true,columnName=ID_FIELD_NAME)
private int projectId;
//项目名
@DatabaseField
private String projectName;
public Project() {}
public Project(int projectId, String projectName) {
this.projectId = projectId;
this.projectName = projectName;
}
get/set方法
}
用户项目关联类
/**
* 用户项目关联类
*(用ormlite实现ManyToMany需要在数据库中建立一张关联表)
* @author leox
*
*/
@DatabaseTable(tableName="tb_user_project")
public class UserProject {
public final static String USER_ID_FIELD_NAME = "user_id";
public final static String PROJECT_ID_FIELD_NAME = "project_id";
//用户项目编号
@DatabaseField(generatedId=true)
private int id;
//关联用户表
@DatabaseField(foreign = true,colum

本文探讨了如何使用ORMlite在Android上处理多对多(ManyToMany)关系。通过创建关联表解决此类数据库关系,并以项目(Project)与用户(User)为例,阐述了这种关系的实现方式。文中提供了详细的代码注释和运行效果截图。
最低0.47元/天 解锁文章
91

被折叠的 条评论
为什么被折叠?



