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()函數的函數名來確定表名,從而建立表與表之間的聯繫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章