GreenDAO是一个开源的Android ORM(“对象/关系映射”),经过ORM(称为“对象/关系映射”),节省了咱们在数据库开发过程的时间!java
经过GreenDao,咱们能够更快速的操做数据库,咱们可使用简单的面相对象的API来存储,更新,删除和查询Java对象。android
1. 高性能数据库
2. 易于使用的强大API,涵盖关系和链接安全
3. 最小的内存消耗app
4. 库大小(<100KB)以保持较低的构建时间并避免65k方法限制dom
5. 数据库加密:greenDAO支持SQLCipher,以确保用户的数据安全;maven
GreenDao的核心类有三个:分别是DaoMaster, DaoSession, XXXDao,这三个类都会自动建立,无需本身编写建立!ide
要在Android项目中使用GreenDao,您须要添加GreenDao Gradle插件并添加GreenDao库:性能
a). 导入插件单元测试
// 在 Project的build.gradle 文件中添加: buildscript { repositories { jcenter() mavenCentral() // add repository } dependencies { classpath 'com.android.tools.build:gradle:3.1.2' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin } }
b). 配置相关依赖
// 在 Moudle:app的 build.gradle 文件中添加: apply plugin: 'com.android.application' apply plugin: 'org.greenrobot.greendao' // apply plugin dependencies { implementation 'org.greenrobot:greendao:3.2.2' // add library }
c). 配置数据库相关信息
greendao { schemaVersion 1 //数据库版本号 daoPackage 'com.renhui.testapp.functions.database.greenDao.db' // 设置DaoMaster、DaoSession、Dao 包名 targetGenDir 'src.main.java'//设置DaoMaster、DaoSession、Dao目录,请注意,这里路径用.不要用/ generateTests false //设置为true以自动生成单元测试。 targetGenDirTests 'src/main/java' //应存储生成的单元测试的基本目录。默认为 src / androidTest / java。 }
配置完成,在Android Studio中使用Build> Make Project,重写build项目,GreenDao集成完成!
使用GreenDao存储数据只须要在存储数据类前面声明@Entity注解就让GreenDao为其生成必要的代码:
@Entity public class Student { @Id(autoincrement = true) Long id; @Unique int studentNo;//学号 int age; //年龄 String telPhone;//手机号 String sex; //性别 String name;//姓名 String address;//家庭住址 String schoolName;//学校名字 String grade;//几年级 ……getter and setter and constructor method…… }
咱们能够在Application中维持一个全局的会话。咱们在Applicaiton进行数据库的初始化操做:=
/** * 初始化GreenDao,直接在Application中进行初始化操做 */ private void initGreenDao() { DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "aserbao.db"); SQLiteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); } private DaoSession daoSession; public DaoSession getDaoSession() { return daoSession; }
初始化完成以后从新rebuild一下项目会发如今设置的targetGenDir的目录生成三个类文件,这个是GreenDao自动生成的!说明数据库已经链接好了,我们接下来只须要进行数据库的增删改查操做就好了。
insert() 插入数据
@Override public void insertData(Thing s) { DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession(); for (int i = 0; i < 1000; i++) { Student student = new Student(); student.setStudentNo(i); int age = mRandom.nextInt(10) + 10; student.setAge(age); student.setTelPhone(RandomValue.getTel()); String chineseName = RandomValue.getChineseName(); student.setName(chineseName); if (i % 2 == 0) { student.setSex("男"); } else { student.setSex("女"); } student.setAddress(RandomValue.getRoad()); student.setGrade(String.valueOf(age % 10) + "年纪"); student.setSchoolName(RandomValue.getSchoolName()); daoSession.insert(student); } }
insertOrReplace()数据存在则替换,数据不存在则插入
@Override public void insertData(Thing s) { DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession(); for (int i = 0; i < 1000; i++) { Student student = new Student(); student.setStudentNo(i); int age = mRandom.nextInt(10) + 10; student.setAge(age); student.setTelPhone(RandomValue.getTel()); String chineseName = RandomValue.getChineseName(); student.setName(chineseName); if (i % 2 == 0) { student.setSex("男"); } else { student.setSex("女"); } student.setAddress(RandomValue.getRoad()); student.setGrade(String.valueOf(age % 10) + "年纪"); student.setSchoolName(RandomValue.getSchoolName()); daoSession.insertOrReplace(student);//插入或替换 } }
删除有两种方式:delete()和deleteAll();分别表示删除单个和删除全部。
@Override public void deleteData(Student s) { DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession(); daoSession.delete(s); } @Override public void deleteAll() { DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession(); daoSession.deleteAll(Student.class); }
经过update来进行修改:
@Override public void updataData(Student s) { DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession(); daoSession.update(s); }
查询的方法有:
public List queryAll() { List<Student> students = daoSession.loadAll(Student.class); return students; } @Override public void queryData(String s) { List<Student> students = daoSession.queryRaw(Student.class, " where id = ?", s); mDataBaseAdapter.addNewStudentData(students); }