使用LitePal来自动建立表关联不需要关心什么外键、中间表等实现的细节,只需要在对象中声明好它们相互之间的引用关系,LitePal就会自动在数据库表之间建立好相应的关联关系了,下面我们就来尝试一下吧。
首先确定一下一共涉及到了哪些实体类,Person和Comment,这两个类我们在前两篇文章中就已经建好了,然后还需要有Introduction和Category这两个类,新建Introduction类,代码如下所示:
public class Introduction {
private int id;
private String guide;
private String digest;
// 自动生成get、set方法
}
接着新建Category类,代码如下所示:
public class Category {
private int id;
private String name;
// 自动生成get、set方法
}
现在四个类都已经建好了,但目前它们都还是各自独立的,互相之间没有任何联系,那么我们现在就开始用极为简单易懂的方式来给它们建立关联。
表与表之间的关联关系一共有三种类型,一对一、多对一、和多对多。
Person和Introduction是一对一的关系,那就可以在Person类中添加如下引用:
public class Person{
...
private Introduction introduction;
// 自动生成get、set方法
}
就是这么简单,在Person类中可以得到一个对应的Introduction的实例,那么它们之间就是一对一关系了。
接着Comment和Person是多对一的关系,因此Person中应该包含多个Comment,而Comment中应该只有一个Person,所以就可以这样写:
public class Person{
...
private Introduction introduction;
private List commentList;
// 自动生成get、set方法
}
先使用一个泛型为Comment的List集合来表示Person中包含多个Comment,然后修改Comment类的代码,如下所示:
public class Comment {
...
private Person person;
// 自动生成get、set方法
}
在Comment类中声明了一个Person 的实例,这样就清楚地表示出了Person 中可以包含多个Comment,而Comment中只能有一个Person ,也就是多对一的关系了。
最后Person 和Category是多对多的关系,相信聪明的你一定已经知道该怎么写了。Person 中可以包含多个Category,所以仍然应该使用List集合来表示:
public class Person {
...
private Introduction introduction;
private List commentList;
private List categoryList ;
// 自动生成get、set方法
}
而Category中也可以包含多个News,因此Category类也应该使用相同的写法,如下所示:
public class Category {
...
private List personList;
// 自动生成get、set方法
}
这样就清楚地表达出它们之间是多对多的关联了。
关联关系都声明好了之后,我们只需要将所有的实体类都添加到映射列表当中,并将数据库版本号加1就可以了。修改litepal.xml的代码,如下所示:
<litepal>
<dbname value="demo" >dbname>
<version value="4" >version>
<list>
<mapping class="com.example.Person">mapping>
<mapping class="com.example.Comment">mapping>
<mapping class="com.example.Introduction">mapping>
<mapping class="com.example.Category">mapping>
list>
litepal>
导出数据库,用Sqlite expert工具打开userinf.db数据库后,查看userbean表效果如下:
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/39207945