LitePal框架是郭神的开源框架,郭神博客
啦啦啦,先膜拜一下郭神,郭神威武。下面开始正题,利用LitePal去实现表关联。
表关联口诀:
1:1--》 外键关联
1:N--》 外键关联
N:N--》 中间表关联
首先演示1:N的
首先确定相关的表,在前三篇中,我们创建了两个表,分别是News表和Comment表,一个新闻可以对应多个评论,而一个评论却只能属于一条新闻,so,它们符合1:N的关系。
我们这样想,既然LitePal是采用ORM模式的,那么,怎么才能实现1:N的关联呢?
既然一个新闻里可以有多条评论,那么我们就在实体News里面添加一个List集合,里面元素的类型是Comment。
然后添加它的setXXX、getXXX方法。
package org.guya.litepaltest.model;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class News {
private int id;
private String title;
private String content;
private Date publishDate;
private int commentCount;
private List<Comment> commentList=new ArrayList<Comment>();
public List<Comment> getCommentList() {
return commentList;
}
public void setCommentList(List<Comment> commentList) {
this.commentList = commentList;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getPublishDate() {
return publishDate;
}
public void setPublishDate(Date publishDate) {
this.publishDate = publishDate;
}
public int getCommentCount() {
return commentCount;
}
public void setCommentCount(int commentCount) {
this.commentCount = commentCount;
}
}
然后呢,一个评论只属于一个新闻,那么同样的,我们去实体Comment里去添加一个News对象。
package org.guya.litepaltest.model;
import java.util.Date;
public class Comment {
private int id;
private String content;
private Date pubDate;
private News news=new News();
public News getNews() {
return news;
}
public void setNews(News news) {
this.news = news;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getPubDate() {
return pubDate;
}
public void setPubDate(Date pubDate) {
this.pubDate = pubDate;
}
}
这样,我们就很清爽很清楚很简单的描述出了Cews和Comment之间1:N的关系了。激动不,可以去运行程序了,但是在此之前,麻烦你先更新一下litepal.xml里面版本号的值先。
自此,1:N关联演示完毕。
接下来演示1:1关联
News表和Comment的表关系明显不满足1:1,so,我们要先弄一个新的表出来,麻烦你先回忆一下如何创建一个新的表先。没错啦,就是先创建一个实体(Model),然后去litepal.xml文件里去注册,然后更新版本号,o(︶︿︶)o 唉,郭神威武。
我们来创建一个Introduce表吧,一个新闻对应一个介绍,一个介绍也对应一个新闻,满足1:1关系。下面开搞。
package org.guya.litepaltest.model;
import org.litepal.crud.DataSupport;
public class Introduce extends DataSupport {
private int id;
private String content;
<span style="white-space:pre"> </span>set、get方法
}
然后去litepal.xml里去注册。
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo" >
</dbname>
<version value="6" >
</version>
<list>
...
<mapping class="org.guya.litepaltest.model.Introduce" >
</mapping>
</list>
</litepal>
嘿嘿,新的表出现啦。
那么现在去实现Introduce表与News表的一对一关联。先想想我们上面的1:N是怎么搞的,没错啦,就是你想的那样,我们只需要在实体Introduce里添加一个News对象就好啦。这样,在Introduce实体里就可以得到News对象的引用啦。
自此,我们就完成了2个独立表的1:1关联。
下面来演示N:N关联。
同上,我们先搞一个新表,这个表与News表满足N:N关系。为此,我们先创建一个Category表先,麻烦你再想想怎么利用LitePal来创建一个新表的。
o(︶︿︶)o 唉,没错啦,就是先创建Model,然后去litepal.xml文件里注册啦,还有要该版本号。
package org.guya.litepaltest.model;
public class Category {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo" >
</dbname>
<version value="8" >
</version>
<list>
...
<mapping class="org.guya.litepaltest.model.Category" >
</mapping>
</list>
</litepal>
然后呢,你想啊,一个新闻里可能属于多个目录,一个目录里可能包含多个新闻,再想想我们一开始的1:N怎么搞的,有思路的么?没跑啦,就是你想的那样子的。
一个新闻可能属于多个目录,那么我们就去实体News里去添加一个Category集合
package org.guya.litepaltest.model;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class News {
private int id;
private String title;
private String content;
private Date publishDate;
private int commentCount;
private List<Comment> commentList = new ArrayList<Comment>();
private List<Category> categoryList = new ArrayList<Category>();
public List<Category> getCategoryList() {
return categoryList;
}
public void setCategoryList(List<Category> categoryList) {
this.categoryList = categoryList;
}
public List<Comment> getCommentList() {
return commentList;
}
public void setCommentList(List<Comment> commentList) {
this.commentList = commentList;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getPublishDate() {
return publishDate;
}
public void setPublishDate(Date publishDate) {
this.publishDate = publishDate;
}
public int getCommentCount() {
return commentCount;
}
public void setCommentCount(int commentCount) {
this.commentCount = commentCount;
}
}
然后呢,一个目录里可能含有多个新闻,同理,我们去实体Category里添加一个News集合。
package org.guya.litepaltest.model;
import java.util.ArrayList;
import java.util.List;
public class Category {
private int id;
private String name;
private List<News> newsList = new ArrayList<News>();
public List<News> getNewsList() {
return newsList;
}
public void setNewsList(List<News> newsList) {
this.newsList = newsList;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后去litepal.xml里更新一下版本号就可以啦。
艾玛,终于把这篇表关联写完了,累死。
结尾顺便膜拜一下郭神。