Android数据库高手秘籍(四)——使用LitePal建立表关联

使用LitePal建立表关联

虽说口诀就是这个样子,但牵扯到表关联的时候毕竟增加了建表的难度,建表语句会更加复杂,你也需要格外地小心以防止出现什么错误。因此,使用LitePal来自动建立表关联又是一个非常不错的选择,我们不需要关心什么外键、中间表等实现的细节,只需要在对象中声明好它们相互之间的引用关系,LitePal就会自动在数据库表之间建立好相应的关联关系了,下面我们就来尝试一下吧。

首先确定一下一共涉及到了哪些实体类,News和Comment,这两个类我们在前两篇文章中就已经建好了,然后还需要有Introduction和Category这两个类,新建Introduction类,代码如下所示:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Introduction {  
  2.       
  3.     private int id;  
  4.       
  5.     private String guide;  
  6.       
  7.     private String digest;  
  8.       
  9.     // 自动生成get、set方法  
  10. }  
接着新建Category类,代码如下所示:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Category {  
  2.       
  3.     private int id;  
  4.       
  5.     private String name;  
  6.       
  7.     // 自动生成get、set方法  
  8. }  
现在四个类都已经建好了,但目前它们都还是各自独立的,互相之间没有任何联系,那么我们现在就开始用极为简单易懂的方式来给它们建立关联吧。首先,News和Introduction是一对一的关系,那就可以在News类中添加如下引用:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class News {  
  2.     ...  
  3.     private Introduction introduction;  
  4.       
  5.     // 自动生成get、set方法  
  6. }  
就是这么简单,在News类中可以得到一个对应的Introduction的实例,那么它们之间就是一对一关系了。

接着Comment和News是多对一的关系,因此News中应该包含多个Comment,而Comment中应该只有一个News,所以就可以这样写:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class News {  
  2.     ...  
  3.     private Introduction introduction;  
  4.       
  5.     private List<Comment> commentList = new ArrayList<Comment>();  
  6.       
  7.     // 自动生成get、set方法  
  8. }  
先使用一个泛型为Comment的List集合来表示News中包含多个Comment,然后修改Comment类的代码,如下所示:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Comment {  
  2.     ...  
  3.     private News news;  
  4.       
  5.     // 自动生成get、set方法   
  6. }  
在Comment类中声明了一个News的实例,这样就清楚地表示出了News中可以包含多个Comment,而Comment中只能有一个News,也就是多对一的关系了。

最后News和Category是多对多的关系,相信聪明的你一定已经知道该怎么写了。News中可以包含多个Category,所以仍然应该使用List集合来表示:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class News {  
  2.     ...  
  3.     private Introduction introduction;  
  4.       
  5.     private List<Comment> commentList = new ArrayList<Comment>();  
  6.       
  7.     private List<Category> categoryList = new ArrayList<Category>();  
  8.       
  9.     // 自动生成get、set方法  
  10. }  
而Category中也可以包含多个News,因此Category类也应该使用相同的写法,如下所示:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Category {  
  2.     ...  
  3.     private List<News> newsList = new ArrayList<News>();  
  4.       
  5.     // 自动生成get、set方法  
  6. }  
这样就清楚地表达出它们之间是多对多的关联了。
关联关系都声明好了之后,我们只需要将所有的实体类都添加到映射列表当中,并将数据库版本号加1就可以了。修改litepal.xml的代码,如下所示:
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <litepal>  
  3.     <dbname value="demo" ></dbname>  
  4.   
  5.     <version value="4" ></version>  
  6.   
  7.     <list>  
  8.         <mapping class="com.example.databasetest.model.News"></mapping>  
  9.         <mapping class="com.example.databasetest.model.Comment"></mapping>  
  10.         <mapping class="com.example.databasetest.model.Introduction"></mapping>  
  11.         <mapping class="com.example.databasetest.model.Category"></mapping>  
  12.     </list>  
  13. </litepal>  
基本上到这里就可以轻松地说结束了,现在只需要任意操作一下数据库,表之间的关联关系就将会自动建立,比如说调用一下Connector.getDatabase()方法。

下面我们来验证一下吧,输入.table命令查看一下当前数据库中的表,如下所示:


OK,news、comment、category、introduction这几张表全都有了,除此之外还有一张category_news中间表。那我们要来一一检查一下了,先查看一下introduction表的结构吧,如下所示:


可以看到,多了一个news_id列,说明introduction表和news表之间的一对一关系已经建立好了。

然后再检查一下comment表的结构,如下所示:


OK,comment表中也有一个news_id的列,那么comment表和news表之间的多对一关系也已经建立好了。

最后检查一下category_news这张中间表的结构,如下所示:


一共只有两列,一列是news_id,一列是category_id,分别对应着两张表的外键,这样news表和category表的多对多关系也建立好了。

借助LitePal的帮助,即使你并不熟悉数据库的表关联设计,只要你会面向对象编程,都可以轻松地将表与表之间的关联建立起来。创建表、升级表、表关联,这就是LitePal在数据库表管理方面给我们带来的巨大便利,相信大家都能体会到它的魅力所在了。那么到这里为止,我们就把使用LitePal进行表管理的知识全部学完了,从下一篇文章开始,我将会讲解如何使用LitePal进行CRUD的操作。感兴趣的朋友请继续阅读 Android数据库高手秘籍(五)——LitePal的存储操作 。

LitePal开源项目地址:https://github.com/LitePalFramework/LitePal

第一时间获得博客更新提醒,以及更多技术信息分享,欢迎关注我的微信公众号,扫一扫下方二维码或搜索微信号guolin_blog,即可关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值