LitePal学习总结 (四)

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里更新一下版本号就可以啦。


艾玛,终于把这篇表关联写完了,累死。

结尾顺便膜拜一下郭神。

























  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值