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)) ...
随机推荐
- CAS单点登录学习(二):客户端配置
下载jar包因为cas的源码修改变动很大,所以客户端引入的jar包根据服务端的war包而定.之前搭建的cas服务端用的版本是3.5.2,经过测试,可以使用cas-client-core的3.2.1版本 ...
- Session与Cookie(1)
Session session是一种位于服务端,用于存储一个会话(指打开浏览器访问某个域名,及其下面的资源,然后关掉浏览器的过程)中所需的配置信息.也就是在一个会话中,只存在一个session.对于J ...
- web性能并发测试工具(转)
导读:随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务,通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因此,当Web网站遇到访问高峰时,容易发生 ...
- day1 java基础回顾- 文件路径
绝对路径 以根目录或某盘符开头的路径(或者说完整的路径) 例如: l c:/a.txt (Windows操作系统中) l c:/xxx/a.txt (Windows操作系统中) l /var/x ...
- gin-swagger包Api文档生成, Post请求参数无法接收, 问题修复。
Bug描述 FormData方式下,任意参数类型都只生成file参数类型. 问题重现 问题代码在这一行 github.com\swaggo\swag\operation.go : 131 line c ...
- 2013年第四届蓝桥杯国赛试题(JavaA组)
1.结果填空 (满分12分)2.结果填空 (满分15分)3.结果填空 (满分10分)4.程序设计(满分16分)5.程序设计(满分20分)6.程序设计(满分27分) 1.标题:填算式 请看下面的算式: ...
- 如何選擇最佳的 Wi-Fi 無線網路頻道,獲得最佳的傳輸速度(转载)
转自:https://blog.gtwang.org/useful-tools/how-to-find-the-best-wi-fi-channel-for-your-router/
- 动态插入的html代码,点击节点无效以及获取节点下标的方法
动态插入的html,需要使用delegate或者on事件来监听,方式如下. 如果需要获取节点对应的下标,$(this).index()是无法获取的,需要以$(selectot).index(this) ...
- unity打包iOS上线归纳
1.去https://developer.apple.com登陆账号去生成打包用的签名文件,生成一个测试用的和一个上线发布用的签名文件 注意:签名文件绑定id必须和应用绑定包命一致,iOSapp唯一性 ...
- IT兄弟连 Java语法教程 编译Java程序
编写好Java程序的源代码后,接下来就应该编译该Java源文件来生成字节码文件了. 编译Java程序需要使用JDK中提供的javac命令,因为已经把javac命令所在的路径添加到了系统的Path环境变 ...