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)) ...
随机推荐
- IoT:目录
ylbtech-IoT:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech.c ...
- Docker入门(六):Stacks
这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...
- CodeForces 489B BerSU Ball (水题 双指针)
B. BerSU Ball time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- map中根据value获取key
public static String getKeyByValue(Map map, Object value) { String keys=""; Iterator it = ...
- .Net HttpWebRequest 爬虫核心爬取
1 爬虫,爬虫攻防 2 下载html 3 xpath解析html,获取数据和深度抓取(和正则匹配) 4 多线程抓取 熟悉http协议 提供两个方法Post和Get public static stri ...
- Xilinx SDSoc 加载opencv库
Xilinx SDSoc 加载opencv库需要下载两个文件 xfopencv 和 Revision Platform, Revision Platform需要和具体的开发板型号对应,我用的是zcu1 ...
- uva1331 Minimax Triangulation
题目大意: 按照顺时针或者逆时针的顺序给出多边的点,要将这个多边形分解成n-2个三角形,要求使得这些三角行中面积最大的三角形面积尽量小,求最小值. /* dp[i][j]表示从第i个点到第j个点,划分 ...
- jzoj6002. 【PKUWC2019模拟2019.1.15】Permutation (组合数)
题面 题解 设\(lim=(n-1)/2\)(这里是下取整),那么\(x\)位置的值最大不能超过\(lim\),而\(y\)处的值不能小于\(y\),于是有\[Ans=\sum_{i=1}^{lim} ...
- pytest框架(三)
pytharm运行三种方式 代码示例: # coding=utf-8 import pytest class TestClass: def test_one(self): x = "this ...
- 微信小程序采坑之上拉触底加载更多和下拉刷新
小程序中加载更多数据一般都是触底刷新 有自带的函数: onReachBottom: function (){} 但是在使用时触发完全没有反应,后来尝试给外层加了一个高度,解决问题 仔细想想也是,没有设 ...