在使用的时候先要导入一个依赖
compile 'org.greenrobot:greendao:3.2.2'
在跟目录里面添加一个
//greenDao
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
在依赖导入里面还要加一个自动添加表名的
greendao { schemaVersion 1 //数据库版本号 daoPackage 'com.example.greendaodemo.database' //设置时生成代码的目录 targetGenDir 'src/main/java' //设置DaoMaster、DaoSession、Dao目录 }然后在第一行添加apply plugin: 'org.greenrobot.greendao' //greenDao
下面就是自己创建的表
把下面的表在构造一下就好了以便在打印的时候用
@Entity(nameInDb = "MY_STUDENT", active = true) public class Student { //主键必须是Long类型 @Id(autoincrement = true) public Long id; public String name; public int age; public Long teacherID; /** Used to resolve relations */ @Generated(hash = 2040040024) private transient DaoSession daoSession; /** Used for active entity operations. */ @Generated(hash = 1943931642) private transient StudentDao myDao; @Generated(hash = 2076102013) public Student(Long id, String name, int age, Long teacherID) { this.id = id; this.name = name; this.age = age; this.teacherID = teacherID; } @Generated(hash = 1556870573) public Student() { }
@Entity(active = true) public class Teacher { //主键必须是Long类型 @Id(autoincrement = true) public Long id; public String name; @Property(nameInDb = "myage") public int age; @Transient public boolean gender ; @ToMany(referencedJoinProperty = "teacherID") List<Student> studentList ; /** Used to resolve relations */ @Generated(hash = 2040040024) private transient DaoSession daoSession; /** Used for active entity operations. */ @Generated(hash = 648119699) private transient TeacherDao myDao; @Generated(hash = 2041461762) public Teacher(Long id, String name, int age) { this.id = id; this.name = name; this.age = age; }
app包public class App extends Application{ @Override public void onCreate() { super.onCreate(); GreenDaoUtils.initGreenDao(this); } }
GreenDaoUtils包public class GreenDaoUtils { private static DaoSession daoSession; public static void initGreenDao(Context context){ daoSession = DaoMaster.newDevSession(context, "class.db"); } public static DaoSession getDaoSession() { return daoSession; } }
下面是增删改查package com.example.greendaodemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import com.example.greendaodemo.database.DaoSession; import com.example.greendaodemo.database.StudentDao; import com.example.greendaodemo.database.TeacherDao; import com.example.greendaodemo.greendao.GreenDaoUtils; import com.example.greendaodemo.greendao.Student; import com.example.greendaodemo.greendao.Teacher; import org.greenrobot.greendao.query.Query; import java.util.List; public class MainActivity extends AppCompatActivity { private DaoSession daoSession; private TeacherDao teacherDao; private StudentDao studentDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); daoSession = GreenDaoUtils.getDaoSession(); teacherDao = daoSession.getTeacherDao(); studentDao = daoSession.getStudentDao(); } public void add(View view) { Teacher teacherWang = new Teacher(null, "姓名", 18); Teacher teacherFan = new Teacher(null, "姓名", 28);
teacherDao.insertInTx(teacherWang, teacherFan, teacherZhao);
Student studentLi = new Student(null, "姓名", 19, teacherFan.getId()); studentDao.insertInTx(studentShi, studentWang, studentLi); } public void delete(View view) { // Teacher teacher = teacherDao.queryBuilder() // .where(TeacherDao.Properties.Name.eq("姓名")) // //只会查询出一个,如果数据库有多个的话,会抛异常 // .unique(); // teacherDao.deleteByKey(teacher.getId()); // teacherDao.delete(teacher); teacherDao.deleteAll(); } public void update(View view) { Teacher teacher = teacherDao.queryBuilder() .where(TeacherDao.Properties.Name.eq("姓名")) //只会查询出一个,如果数据库有多个的话,会抛异常 .unique(); teacher.setAge(20); teacherDao.update(teacher); } // public void query(View view) { // Teacher teacher = teacherDao.queryBuilder() // .where(TeacherDao.Properties.Name.eq("姓名")) // //只会查询出一个,如果数据库有多个的话,会抛异常 // .unique(); // Long id = teacher.getId(); // List<Student> list = studentDao.queryBuilder() // //查询条件 利用**Dao.Properties.** 去查询 // .where(StudentDao.Properties.TeacherID.eq(id)) // //倒序 // .orderDesc(StudentDao.Properties.Age) // //生成一个集合 // .list(); // for (Student student : list) { // Log.e("tag",student.toString()+"\n"); // } // } // public void query(View view) { // List<Student> list = studentDao.queryBuilder() // .where(StudentDao.Properties.Name.like("姓名")) // .list(); // for (Student student : list) { // Log.e("tag",student.toString()+"\n"); // } // } // public void query(View view) { // Teacher teacher = teacherDao.queryBuilder() // .where(TeacherDao.Properties.Name.eq("姓名")) // //只会查询出一个,如果数据库有多个的话,会抛异常 // .unique(); // // Log.e("tag", teacher == null ? "==============" : teacher.toString()); // } // public void query(View view) { // //查询可以用load来快速查询,即使查询不到,这个list也不为null,而是长度为0 // List<Teacher> teachers = teacherDao.loadAll(); // Log.e("tag", (teachers == null ? "==============" : teachers.get(0)).toString()); // } // public void query(View view) { // Teacher teacher = teacherDao.queryBuilder() // .where(TeacherDao.Properties.Name.eq("姓名")) // //只会查询出一个,如果数据库有多个的话,会抛异常 // .unique(); // // Log.e("tag", (teacher == null ? "==============" : teacher.toString())); // // // //直接拿查询出来的对象操作数据库和表 teacher.delete(); // teacher.setAge(17); // teacher.setAge(16); // teacher.setName("王老师"); // // Teacher teacher1 = teacherDao.queryBuilder() // .where(TeacherDao.Properties.Name.eq("姓名")) // //只会查询出一个,如果数据库有多个的话,会抛异常 // .unique(); // Log.e("tag", (teacher1 == null ? "==============" : teacher1.toString())); // } //在子线程查询 public void query(View view) { new Thread() { @Override public void run() { Query<Teacher> query = teacherDao.queryBuilder() .where(TeacherDao.Properties.Name.eq("姓名")) //只会查询出一个,如果数据库有多个的话,会抛异常 .build(); List<Teacher> list = query.forCurrentThread().list(); } }.start(); } }