zoukankan      html  css  js  c++  java
  • 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 5:  
                    //创建新表,注意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("1"));  
            st.setTeacherId(Long.parseLong("1"));  
            db.saveStuAndTea(st);  
      
            txt_many_info.setText(db.getStudentList().get(0).getStuName() + "--" +  
                    db.getStudentList().get(0).getManystu().get(0).getOnetea().getTeaName());  
        }       
    }  

    运行结果,你会发现,我们把学生和老师都打印出来了

  • 相关阅读:
    权限系统概要(收集,整理)
    全程参观 Google 总部
    从Excel表格中坐标生成 点线面
    Cross Site Script 知识
    UserControl 实现From_Close
    用后立即调用Dispose
    获取鼠标点击处的颜色
    arcsde9.3 the arcsde repository is not successfully created
    ArcGIS9.3全套 下载地址
    SQLServer 2008 安装 is not a volid login or don't have permission
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9051998.html
Copyright © 2011-2022 走看看