文章目录
前篇:使用操作数据库
详细介绍参考:数据库高手秘籍(四)——使用建立表关联
一、四张表简介
News表:标题title、内容、发布时间、评论数、id;
表:内容、发布时间、id;
表:导语guide、摘要、id;
表:名称name、id;
一条新闻只有一个简介,一个简介也只能属于一条新闻,所以News表与表是一对一关系。需要在News类中持有一个类的引用即可。
一条新闻可以有多个评论,但是一条评论只能属于一条新闻,所以News表与表是多对一关系,
每个种类下面会有许多条新闻,一条新闻也可以属于多个种类,因此News表与表是多对多关系,两张表之间建立多对多的关联关系只能是借助中间表来完成了。
二、代码实现 1. 创建独立的四个类
//Introduction类
public class Introduction {
private int id;
private String guide;
private String digest;
//get、set方法
}
//Category类
public class Category {
private int id;
private String name;
//get、set方法

}
//Comment类
public class Comment {
private int id;
private String content;
private Date publishDate;
//get、set方法
}
//News类
public class News {
private int id;
private String title;
private String content;
private Date publishDate;
private int commentCount;
//get、set方法
private Introduction introduction;
}
三. 建立关联 1. 一对一关系
在News类中可以得到一个对应的的实例,那么它们之间就是一对一关系了。
//News类
public class News {
private Introduction introduction;
private List<Comment> commentList=new ArrayList<Comment>();
//get、set方法
}
2. 多对一关系
先使用一个泛型为的List集合来表示News中包含多个,再在类中声明了一个News的实例,这样就清楚地表示出了News中可以包含多个,而中只能有一个News,也就是多对一的关系了。
//News类
public class News {
private List<Comment> commentList=new ArrayList<Comment>();
private List<Comment> commentList=new ArrayList<Comment>();
private List<Category> categoryList=new ArrayList<Category>();
//get、set方法
}
//Comment类
public class Comment {
private News news;
//get、set方法
}
3. 多对多关系
先使用一个泛型为的List集合来表示News中包含多个,再在类中使用泛型为News的List集合来表示中包含多个News,这样就清楚地表示出了News中可以包含多个,中包含多个News,也就是多对多的关系了。
//News类
public class News {
private List<Category> categoryList=new ArrayList<Category>();
//get、set方法
}
//Category类
public class Category {
private int id;
private String name;
private List<News> newsList=new ArrayList<News>();
//get、set方法
}
4. 添加映射
关联关系都声明好了之后,将所有的实体类都添加到映射列表当中,并修改数据库版本号。
<litepal>
<dbname value="demo">dbname>
<version value="4">version>
<list>
<mapping class="com.aye.test_databases.News">mapping>
<mapping class="com.aye.test_databases.Comment">mapping>

<mapping class="com.aye.test_databases.Category">mapping>
<mapping class="com.aye.test_databases.Introduction">mapping>
list>
litepal>
5. 验证
打开cmd,输入adb shell,su获取管理员权限后使用cd命令进入到data/data/+包名/文件中litepal数据库删除指定表,输入 +数据库名进入中
查看数据库中的所有表
查看表的结构,使用命令 (表名);,可以看到多了一个列,说明表和news表之间存在一对一关系
查看表的结构,可以看到多了一个列,说明表和news表之间存在多对一关系。
查看中间表的结构,可以看到多了一个列和列说明表和news表之间存在多对一关系。
四、使用聚合函数
中一共提供了count()、sum()、()、max()和min()这五种聚合函数。
根据以上总结类中的连缀查询都都可以适用litepal数据库删除指定表,比如where条件约束连缀count聚合函数,或者连缀order等
1. count()
用于统计行数
//统计News表行数
int result=DataSupport.count(News.class);

//统计多少条新闻是0评论的
result=DataSupport.where("commentcount=?","0").count(News.class);
2. sum()
用于对结果进行求和,sum()方法只能对具有运算能力的列进行求合,比如说整型列或者浮点型列
//统计news表中评论总数
// 第二个参数为列名,表示希望对哪一列数据进行求和,第三个参数用于指定结果的类型
result=DataSupport.sum(News.class,"commentcount",int.class);
3. ()
统计平均数,注意返回值类型为型,()方法也只能对具有运算能力的列进行求平均值
//统计news表中平均每条新闻有多少评论
//第二个参数为想要统计哪一列的平均数
result=DataSupport.average(News.class,"commentcount");
4. max()
求出某一列最大值,max()方法也只能对具有运算能力的列进行求最大值的
//news表中所有新闻里面最高的评论数是多少
//第一个参数用于指定去统计哪张表当中的数据。第二个参数是列名,表示希望统计哪个列中的最大值。第三个参数用于指定结果的类型
result=DataSupport.max(News.class,"commentcount",double.class);
5. min()
求出某一列最小值,用法与max相同
//news表中所有新闻里面最低的评论数是多少
result=DataSupport.min(News.class,"commentcount",double.class);