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());  
        }       
    }  

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

  • 相关阅读:
    服务器状态码
    QuerySet中添加Extra进行SQL查询
    django配置一个网站建设
    MySQL数据库查询中的特殊命令
    125. Valid Palindrome
    121. Best Time to Buy and Sell Stock
    117. Populating Next Right Pointers in Each Node II
    98. Validate Binary Search Tree
    91. Decode Ways
    90. Subsets II
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9051998.html
Copyright © 2011-2022 走看看