GreenDao的简单使用说明(五)多表n:m
在设计一些比较复杂的数据库结构的时候,我们会遇到表之间是n:m的关系,就是常说的多对多的关系,最常用的情况,就是用户权限这块,日常最常见的就是学生与老师的关系了,哪么我们来看一下GreenDao中如何实现这层关系呢。
在GreenDao中其实是没有多对多这个关系,也就是它不支持这种关系,但是呢,我们可以自己去定义和设计一下。我们来看代码。
一,MyDaoGenerator.java文件中添加学生,老师,学生老师关联表
Entity studentBean = schema.addEntity("Students");
studentBean.implementsSerializable();
studentBean.addIdProperty();
studentBean.addStringProperty("stuName");
studentBean.addStringProperty("stuSex"); Entity teacherBean = schema.addEntity("Teachers");
teacherBean.implementsSerializable();
teacherBean.addIdProperty();
teacherBean.addStringProperty("teaName");
teacherBean.addStringProperty("teaSex"); Entity stuAndteaBean = schema.addEntity("stuAndtea");
Property studentId = stuAndteaBean.addLongProperty("studentId").getProperty();
Property teacherId = stuAndteaBean.addLongProperty("teacherId").getProperty(); //这里其实很简单,就是建立两个1:n的关系
stuAndteaBean.addToOne(studentBean,studentId).setName("onestu");
stuAndteaBean.addToOne(teacherBean,teacherId).setName("onetea");
studentBean.addToMany(stuAndteaBean,studentId).setName("manystu");
teacherBean.addToMany(stuAndteaBean,teacherId).setName("manytea");
很简单吧,来改一下版本号,Schema schema = new Schema(5, "greendao");
二,gradle面板运行MyDaoGenerator,生成相应的bean文件和操作dao文件
三,修改我们的THDevOpenHelper.java文件
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
case :
//创建新表,注意createTable()是静态方法
//infosDao.createTable(db, true);
//infoTypeDao.createTable(db,true);
//AreasDao.createTable(db,true); StudentsDao.createTable(db,true);
TeachersDao.createTable(db,true);
stuAndteaDao.createTable(db,true); // 加入新字段
// db.execSQL("ALTER TABLE 'moments' ADD 'audio_path' TEXT;"); // TODO
break;
}
}
四,测试一下我们的功能是不是好用,这里我就使用了,最简单的几行代码。
package com.example.cg.greendaolearn; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView; import com.example.cg.greendaolearn.db.DbService; import greendao.Students;
import greendao.Teachers;
import greendao.stuAndtea; public class manyActivity extends AppCompatActivity { private DbService db;
private TextView txt_many_info; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_many); db = DbService.getInstance(this); txt_many_info = (TextView)findViewById(R.id.txt_many_info); Students stu = new Students();
stu.setStuName("小明");
stu.setStuSex("男");
db.saveStudent(stu); Teachers tea = new Teachers();
tea.setTeaName("小何");
tea.setTeaSex("女");
db.saveTeacher(tea); stuAndtea st = new stuAndtea();
st.setStudentId(Long.parseLong(""));
st.setTeacherId(Long.parseLong(""));
db.saveStuAndTea(st); txt_many_info.setText(db.getStudentList().get().getStuName() + "--" +
db.getStudentList().get().getManystu().get().getOnetea().getTeaName());
}
}
运行结果,你会发现,我们把学生和老师都打印出来了
GreenDao的简单使用说明(五)多表n:m的更多相关文章
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- ORACLE 五种表的优缺点总结
ORACLE 五种表的优缺点总结: 1.普通表(heap table):适合大部分设计场景,有长处也有缺点. 长处: a,语法简单方便 b,适合大部分场景 缺点: a,更新日志开销较大 b,Delet ...
- PHP简单利用token防止表单重复提交
<?php /* * PHP简单利用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token() { $_S ...
- 简单的哈希表实现 C语言
简单的哈希表实现 简单的哈希表实现 原理 哈希表和节点数据结构的定义 初始化和释放哈希表 哈希散列算法 辅助函数strDup 哈希表的插入和修改 哈希表中查找 哈希表元素的移除 哈希表打印 测试一下 ...
- struts 标签<s:ierator>的简单使用说明
struts 标签<s:ierator>的简单使用说明,只显示<s:ierator> 的前6条数据 <s:iterator value="lstVisitor& ...
- 利用js的for循环实现一个简单的“九九乘法表”
For循环九九乘法表 for循环是javascript中一种常用的循环语句,可以很好的解决在程序中需要重复执行某些语句,利用for循环实现简单的“九九乘法表”的效果: 让循环从小到大,依次排序,并计算 ...
- Spring依赖注入 --- 简单使用说明
Spring依赖注入 --- 简单使用说明 本文将对spring依赖注入的使用做简单的说明,enjoy your time! 1.使用Spring提供的依赖注入 对spring依赖注入的实现方法感兴趣 ...
- PHP简单利用token防止表单重复提交(转)
<?php/* * PHP简单利用token防止表单重复提交 */function set_token() { $_SESSION['token'] = md5(microtime(true)) ...
随机推荐
- web攻击之零:WEB攻击及防御技术汇总
一.XSS攻击 [介绍] xss攻击是跨站脚本攻击,例如在表单中提交含有可执行的javascript的内容文本,如果服务器端没有过滤或转义这些脚本,而这些脚本由通过内容的形式发布到了页面上,这个时候如 ...
- wpf RenderTargetBitmap保存控件为图片时图片尺寸不对的问题
使用RenderTargetBitmap渲染图片时,必须在需要渲染的控件外层包含一个border控件,不然渲染的图片返回就会出现问题. 如下: <Grid> <Grid.RowDef ...
- MySQL 之 导出导入数据
导出数据库(sql脚本) mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u root -p --databases db_name > test ...
- Swoole 多协议 多端口 的应用
目录 概述 网络通信协议设计 多端口监听的使用 小结 概述 这是关于 Swoole 学习的第五篇文章:Swoole 多协议 多端口 的应用. 第四篇:Swoole HTTP 的应用 第三篇:Swool ...
- ue4 delegate event
官网相关 https://docs.unrealengine.com/latest/CHN/Programming/UnrealArchitecture/Delegates/index.html wi ...
- PJzhang:子域名爆破工具wydomain(猪猪侠)
猫宁!!! 参考链接:https://www.secpulse.com/archives/53182.html https://www.jianshu.com/p/65c85f4b7698 http: ...
- Java使用FFmpeg处理视频文件的方法教程
这篇文章主要给大家介绍了关于Java使用FFmpeg处理视频文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 前言 本文主要 ...
- IOS字符串截取保留小数点后两位
-(NSString*)getTheCorrectNum:(NSString*)tempString { //计算截取的长度 NSUInteger endLength = tempString.len ...
- python进阶04 装饰器、描述器、常用内置装饰器
python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...
- 详解javascript中的this对象
详解javascript中的this对象 前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的 ...