greenDAO项目实战-ToOne-ToMany实现一对一,一对多关联映射

619 字
3 分钟
greenDAO项目实战-ToOne-ToMany实现一对一,一对多关联映射

在上一篇文章greenDAO项目实战中,我们对GreenDao有了初步的认识。今天我们熟悉一下GreenDao中使用ToOneToMany实现一对一,一对多关联映射。本文在上篇的基础上进行。

添加Category类#

我们现在对上一篇的Note进行扩展,添加类别。我们假设一个Note属于一个类别Category,一个类别Category可以拥有多个Note.

@Entity
public class Category {
@Id
private Long id;
private String name;
@ToMany(referencedJoinProperty = "categoryId")
private List<Note> notes;

修改Note类,Category信息#

@Entity
public class Note {
@Id(autoincrement = true)
private Long id;
@NotNull
private String text;
private String comment;
private java.util.Date date;
@Convert(converter = NoteTypeConverter.class, columnType = String.class)
private NoteType type;
private Long categoryId;
@ToOne(joinProperty = "categoryId")
private Category category;
//省略了其他的geter,setter
}

注解分析#

上面的Category类代码中: @ToMany(referencedJoinProperty = "categoryId")这个注解表明,一个Category可以拥有多个Note(一对多).referencedJoinProperty= "categoryId"表示使用Note类中的categoryId字段进行关联。注意这个字段应该是Long类型.在Category中用 List<Note> notes表示拥有的Note.

上面的Note类代码中: @ToOne(joinProperty = "categoryId")这个注解表明,一个Note属于一个Category。注意我们添加了private Long categoryId这字段,然后在@ToOne注解中使用joinProperty = "categoryId"CategorycategoryId关联起来。

经过在一的端(Category)使用@ToMany,在多的端(Note)使用@ToOne,我们就把一对多和多对一关联关系建立起来了。

使用#

//添加一个类别:技术分享.
Category category = new Category(1L,"技术分享");
categoryDao.insert(category);
//添加一个类别:心灵鸡汤.
category = new Category(2L,"心灵鸡汤");
categoryDao.insert(category);
//添加一条技术分享note记录
Note note = new Note();
note.setText("这是note内容文本,技术分享");
note.setComment("这是note的comment");
note.setDate(new Date());
note.setType(NoteType.TEXT);
note.setCategoryId(1L);//设置分类为技术分类
noteDao.insert(note);
//再添加一条技术分享note记录
note = new Note();
note.setText("这是note内容文本,也是技术分享");
note.setComment("这是note的comment");
note.setDate(new Date());
note.setType(NoteType.TEXT);
note.setCategoryId(1L);//设置分类为技术分类
noteDao.insert(note);
//接着添加一条属于心灵鸡汤Note记录
note = new Note();
note.setText("这是note内容文本,心灵鸡汤");
note.setComment("这是note的comment");
note.setDate(new Date());
note.setType(NoteType.TEXT);
note.setCategoryId(2L);//设置分类为心灵鸡汤
noteDao.insert(note);
//查询所有的分类为技术分享(id=1)的note数据
List<Note> notes = categoryDao.load(1L).getNotes();
System.out.println(notes);
//通过Note反查Category
noteDao.load(1L).getCategory().getName();
//顺便演示一下通过对文本内容的模糊查询匹配返回包含"心灵鸡汤"文本的Note。
notes = noteDao.queryBuilder().where(NoteDao.Properties.Text.like("%心灵鸡汤%")).list();
System.out.println(notes);

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
greenDAO项目实战-ToOne-ToMany实现一对一,一对多关联映射
https://ernest-su.github.io/greendao-project-practice-toone-tomany/
作者
Ernest
发布于
2017-03-20
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
greenDAO项目实战
开发效率在安卓移动APP开发过程中,一般使用安卓默认的sqlite数据库做数据持久化存储。虽然android提供了ContentProvider等框架支持,但是写SQL语句依然是一件不少程序猿的头疼的事。无论是简单的SQL语句,还是复杂的多表查询,都是影响开发效率的苦力活。幸运的是,我们
2
如何快速搭建模拟接口服务
开发效率相信大家在移动APP开发中,无论是做安卓还是iOS开发,都会遇到一个很尴尬的问题,接口没有开发好。而请求网络接口数据是开发中开发流程的第一步,因此方便快捷的模拟接口返回数据给APP,有助于提高开发效率。
3
GitHub上star超过2k的安卓项目和代码风格指南(绝对干货)
最佳实践近日在搜MVP模式作为安卓项目架构时候,发现GitHub上一篇介绍MVP架构的文章。一看star已经超过2K了。作者同项目的这篇文章讲安卓项目和代码风格指南,也非常有参考价值。为了方便大家查阅,把原文翻译了一下。点击查看作者介绍安卓MVP架构指南的翻译文章。
4
GitHub上star超过2k的安卓MVP架构指南
架构近日在搜MVP模式作为安卓项目架构时候,发现GitHub上一篇介绍MVP架构的文章。一看star已经超过2K了。通读全文发现作者用实际项目将MVP架构要怎么分职责讲得十分通俗易懂。为了方便大家查阅,把原文翻译了一下。作者还有一篇文章讲安卓项目和代码风格指南的。欢迎查看相关翻译。
5
Linux 命令手册安卓版
工具前两天逛GitHub时候发现了一个命令行手册项目jaywcjlove/linuxcommand 手册网站,觉得非常实用。GitHub的Pages很方便,但是国内访问有时候比较慢。虽然网上类似的在线手册很多了,但是我觉得一个手册应该是随手可用,而且即使在没有网时候,也可随时翻阅的。
随机文章随机推荐
Profile Image of the Author
Ernest
一个有理想的Android程序员
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
27
分类
12
标签
47
总字数
123,546
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.6
文章许可
CC BY-NC-SA 4.0

文章目录