天天看点

Litepal使用心得之建立数据之间的联系Litepal使用心得之建立数据之间的联系

Litepal使用心得之建立数据之间的联系

去年开始接触到郭神的“儿子”,关于数据库的框架——Litepal。从一个什么都不懂得菜鸟,到用这个框架完成一些想要的功能。为郭神的创造点赞。方便自己之余,将一些用法心得分享给大家,免得大家走弯路。

1.建立表和表之间的关系。

参考郭神的系列教程Android数据库高手秘籍

我们也以New为例,建立对象。来说明表与表之间建立的联系。

以新闻和评论为例,建立表与表的关联。

public class News  extends DataSupport
{
        private int id;
        private List<Comments> comments;

    public int getId() 
    {
        return id;
    }

    public void setId(int id) 
    {
        this.id = id;
    }

//编译器自动生成的属性函数
    public List<Comments> getComments() 
    {
        return comments;
    }

 //编者自己加的的属性函数,在“动态建立表与表的联系中”要用到。与上面函数仅仅是函数名不同
 public List<Comments> getCommentsList() 

    {
        return comments;
    }

    public void setComments(List<Comments> comments) 
    {
        this.comments = comments;
    }
}
           

注意,这里,在给News类添加了一个 int id 属性。无须给它赋值,只需要调用news.getId( ) 便可以得到news 在数据库中的id。在AndroidStudio中,按Alt+insert 键,自动生成get和set系列成员函数。这一点很重要!!!不然在后面建立表间联系时,按照郭神的方法,无法建立联系。

OK,继续把Comments类建立好。

public class Comments extends DataSupport{
    private int id;
    private String content;

    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;
    }
}
           

参考郭神系列教程可知,Comments与News两表已经建立了联系。在数据库中,comments表中多了一个news_id属性。

动态添加表与表之间地关联关系

这里新建一个Comments类的实例,并且给这个实例与一个已存在的news绑定(假设数据库中有很多条news,这里从中取出第一条news).

郭神的教程是这样的:

Comments comments=new Comments();
comments.setContent("这是一条评论");
comments.save();//必须存入数据库中,才可以和news表建立联系

News news=DataSupport.findFirst(News.class);//从数据库中取出第一条数据。

news.getComments().add(comments);//建立comments与news的联系
news.save();//保存
           

通过实践可以保证,comments与news确实建立了联系。在comments的键值news_id中的值为刚才那条news的id。

但是!如果改成下面的代码。则无法建立关联。

Comments comments=new Comments();
comments.setContent("这是一条评论");
comments.save();//必须存入数据库中,才可以和news表建立联系

News news=DataSupport.findFirst(News.class);//从数据库中取出第一条数据。

//这里用自定义的属性函数getCommentsList()来建立表与表的联系
news.getCommentsList().add(comments);//建立comments与news的联系
news.save();//保存
           
但是最后在数据库中,始终无法建立联系。但是用*news.getComments().add(comments)*,便可以建立联系。
           

总结

在LitePal中,建立表与表的联系非常简单。但是一定要注意类的属性函数,不要自己命名,而是要利用编译器的自动生成属性的功能。来生成get和set系类函数。因为系统是根据成员的成员名来生成get和set方法。在LitePal的内部,很有可能是根据get()函数的函数名来确定表名,从而建立表与表之间的联系。