Android greenDAO入门

Android greenDAO入门

       我们在进行android APK开发的时候经常要用到数据库,最初的时候我们都是自己写DBOpenHelper继承SQLiteOpenHelper,DbManager去管理数据库的表,而且经常会碰到不同线程访问的问题导致APK挂掉的问题,greenDAO 就可以很好的帮我们处理掉这些问题。用起来也非常的方便,用greenDAO的时候我们自己不用考虑什么问题。
       网上也有好多关于greenDAO的文章。我这里就用一个很简单的例子写给像我一样刚入门级别的菜鸟看,我也是偶然在一个项目中用到了,如果你也是和我一样第一次使用greenDAO,可以结合代码一起看下怎么使用,可以让你很快的入门。

1. 实例代码地址

实例代码CSDN下载地址不用资源分下载

例子写的非常的简单,没有进行很多数据库的操作,只是让像我一样菜鸟的人能够大概知道要怎么使用。

2. 代码简单的介绍

代码是基于android studio的代码,主要包括两个module(app, templategenerator)。app module是android 工程是在这个工程里面都数据库进行操作。templategenerator module是java工程是用来自动greenDAO相关的代码。

  • templategenerator module:非常的简单(JAVA工程,自动生成一些代码)。
    gradle 文件:
project(':templategenerator') {
    apply plugin: 'application'
    apply plugin: 'java'

    mainClassName = "com.mktech.gsmartrouter.MobileTemplateGenerator"
    // edit output direction
    def outputDir = "../app/src-gen"

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'de.greenrobot:DaoGenerator:1.3.0'
        compile 'org.freemarker:freemarker:2.3.20'
    }

    sourceSets {
        main {
            java.srcDirs = ['src/main/java']
            resources.srcDirs = ['res']
        }
    }

    task createDocs {
        def docs = file(outputDir)
        docs.mkdirs()
    }

    run {
        args outputDir
    }
}
  1. def outputDir = “../app/src-gen” 中./app/src-gen 是我们要自动生产代码存放的路径。
  2. compile ‘de.greenrobot:DaoGenerator:1.3.0’
    compile ‘org.freemarker:freemarker:2.3.20’ 则是greenDAO generator工程要依赖的两个库。
    java代码:
    public void generateAll(String outDir) throws Exception {
        Schema schema = new Schema(1, "greendao");
        addCloudAccounts(schema);
        addHomeShareUploadTableInfo(schema);
        new DaoGenerator().generateAll(schema, outDir);
    }

    private static void addCloudAccounts(Schema schema) {
        Entity accounts = schema.addEntity("User");
        accounts.addStringProperty("password").notNull();
                accounts.addStringProperty("username").notNull().primaryKey();
        accounts.addBooleanProperty("rememberPassword");
    }

    private static void addHomeShareUploadTableInfo(Schema schema) {
        Entity uploadInfo = schema.addEntity("HomeShareUploadInfo");
        uploadInfo.addIdProperty().autoincrement();
        uploadInfo.addStringProperty("filename").notNull();
        uploadInfo.addStringProperty("md5").notNull();
        uploadInfo.addStringProperty("from").notNull();
        uploadInfo.addStringProperty("to").notNull();
        uploadInfo.addDateProperty("uploadTime").notNull();
        uploadInfo.addIntProperty("percent");
        uploadInfo.addIntProperty("state");
        uploadInfo.addIntProperty("type");
    }

这里我就随便建了两个表User表 和 HomeShareUploadInfo表,如果需要的话可以继续添加比较简单。
Schema schema = new Schema(1, “greendao”); 中 greendao 是包的名字(/app/src-gen 文件夹下面的包的名字)

当执行`

    public static void main(String[] args) throws Exception {
        new DaoTemplate().generateAll(args[0]);
    }

完之后就会在../app/src-gen/greendao目录下面生成一些文件,当然前提是要保证这个目录在执行templategenerator module 之前是存在。 这样templategenerator module的功能就结束了(写的非常简单,一些具体的东西可以去google下)。

  • app module:这个才是我们主要关注的module,要在这个工程里面对数据库进行操作。首先是../app/src-gen/greendao目录,在app目录下面新建src-gen/greendao 文件夹。gradle设置。
    sourceSets {
        main {
            java.srcDirs = ['src', 'src-gen']
        }
    }

依赖库

compile 'de.greenrobot:greendao:1.3.7'

在application 中获取 private DaoSession mDaoSession 全局使用; DaoSession类是代码自动生成的。

    private void setupDatabase() {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "gsmartrouter-mobile.db", null);
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        mDaoSession = daoMaster.newSession();
    }

    public DaoSession getDaoSession() {
        return mDaoSession;
    }

然后就是具体的操作了,对于每个表我们一般都会对应一个class如图
Android greenDAO入门_第1张图片
在对应的表的class里面写相应的数据库的操作,具体的可以看下class文件里面的内容,网上也有很多greenDAO数据库增删改查的例子,仿照来写就可以了。

具体调用

    private void saveInDatabase() {
        Task.callInBackground(new Callable<Void>() {
            @Override
            public Void call() throws Exception {
                /** save info to database */
                User user = new User("abc", "abc", false);
                UserRepository.insertOrUpdate(mContext, user);
                return null;
            }
        });
    }

    private void readFromDatabase() {
        Task.callInBackground(new Callable<Void>() {
            @Override
            public Void call() throws Exception {
                /** read info from database */
                List<User> list = UserRepository.getAll(mContext);
                Log.d("vae_tag", list.size() + " = size");
                return null;
            }
        });
    }

就简单的调用了插入和读取。主要是

User user = new User("abc", "abc", false);
UserRepository.insertOrUpdate(mContext, user);

List<User> list = UserRepository.getAll(mContext);
Log.d("vae_tag", list.size() + " = size");

使用的时候要先运行templategenerator module让自动生成对应的代码。运行方法如图。

然后就随便你怎么操作了。用同样的方式可以很方便的运用到大家的项目当中去。
写的比较乱,但还是希望能在大家在不知道greenDAO如何使用的时候起到入门的作用。

你可能感兴趣的:(android,数据库,greenDAO)