GreenDao 3.1學習總結

項目中用的ormlite數據庫框架,混淆的時候一直出問題,現在學習使用GreenDao,看到好幾篇文章,走了很多彎路。

過程看起來很複雜,靜下心來看,其實並不複雜。

GreenDao 3.1改動:

GreenDao 3.0最大的變化就是採用註解的方式通過編譯方式生成Java數據對象和DAO對象,3.0之前需要通過新建GreenDaoGenerator工程生成Java數據對象和DAO對象,非常的繁瑣。

1.首先看我的目錄結構:



2、在Android項目中的配置文件(build.gradle)中加入:

sourceSets {
    main {
        java.srcDirs = ['src/main/java', 'src/main/java-gen']
    }
}
!不加上邊代碼,文件會變爲紅色
dependencies中導入:
compile 'org.greenrobot:greendao:3.1.1' //greendao
compile 'org.greenrobot:greendao-generator:3.1.0' //greendao
在main文件下建java-gen

3、新建java項目

File---New---New Mudole---Java Library

4、java項目中導入:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'org.greenrobot:greendao-generator:3.1.0'//greendao
}
5、java項目的文件。MyClass 生成java-ben裏的文件
 public static void main(String[] args) throws Exception {
        // 正如你所見的,你創建了一個用於添加實體(Entity)的模式(Schema)對象。
        // 兩個參數分別代表:數據庫版本號與自動生成代碼的包路徑。
        Schema schema = new Schema(1, "me.xiaohu.greendao");
//      當然,如果你願意,你也可以分別指定生成的 Bean 與 DAO 類所在的目錄,只要如下所示:
//      Schema schema = new Schema(1, "me.itangqi.bean");
//      schema.setDefaultJavaPackageDao("me.itangqi.dao");

        // 模式(Schema)同時也擁有兩個默認的 flags,分別用來標示 entity 是否是 activie 以及是否使用 keep sections。
        // schema2.enableActiveEntitiesByDefault();
        // schema2.enableKeepSectionsByDefault();

        // 一旦你擁有了一個 Schema 對象後,你便可以使用它添加實體(Entities)了。
        addNote(schema);

        // 最後我們將使用 DAOGenerator 類的 generateAll() 方法自動生成代碼,此處你需要根據自己的情況更改輸出目錄(既之前創建的 java-gen)。
        // 其實,輸出目錄的路徑可以在 build.gradle 中設置,有興趣的朋友可以自行搜索,這裏就不再詳解。
        new DaoGenerator().generateAll(schema, "./app/src/main/java-gen");
    }

    private static void addNote(Schema schema) {
        // 一個實體(類)就關聯到數據庫中的一張表,此處表名爲「Note」(既類名)
        Entity note = schema.addEntity("Note");
        // 你也可以重新給表命名
        // note.setTableName("NODE");

        // greenDAO 會自動根據實體類的屬性值來創建表字段,並賦予默認值
        // 接下來你便可以設置表中的字段:
        note.addIdProperty();
        note.addStringProperty("text").notNull();
        // 與在 Java 中使用駝峯命名法不同,默認數據庫中的命名是使用大寫和下劃線來分割單詞的。
        // For example, a property called “creationDate” will become a database column “CREATION_DATE”.
        note.addStringProperty("comment");
        note.addDateProperty("date");
    }
在文件中右鍵-Run(MyClass.main()) 有以下信息說明成功,去android項目中看java-gen就可以看到生成的文件
Copyright 2011-2016 Markus Junginger, greenrobot.de. Licensed under GPL V3.
This program comes with ABSOLUTELY NO WARRANTY
Processing schema version 1...
Written E:\ad\MYGreenDaoTest10.21\app\src\main\java-gen\me\xiaohu\greendao\NoteDao.java
Written E:\ad\MYGreenDaoTest10.21\app\src\main\java-gen\me\xiaohu\greendao\Note.java
Written E:\ad\MYGreenDaoTest10.21\app\src\main\java-gen\me\xiaohu\greendao\DaoMaster.java
Written E:\ad\MYGreenDaoTest10.21\app\src\main\java-gen\me\xiaohu\greendao\DaoSession.java
Processed 1 entities in 149ms


Process finished with exit code 0
6、回到android項目的MyApplication
public class MyApplication extends Application {
    private SQLiteDatabase db;
    private DaoMaster daoMaster;
    public static DaoSession daoSession;
    @Override
    public void onCreate() {
        super.onCreate();
        setupDatabase();
        //框架的sqlite語句控制檯打印 控制
        QueryBuilder.LOG_SQL = true;
        QueryBuilder.LOG_VALUES = true;
    }
    private void setupDatabase() {
         // 通過 DaoMaster 的內部類 DevOpenHelper,你可以得到一個便利的 SQLiteOpenHelper 對象。
        // 可能你已經注意到了,你並不需要去編寫「CREATE TABLE」這樣的 SQL 語句,因爲 greenDAO 已經幫你做了。
        // 注意:默認的 DaoMaster.DevOpenHelper 會在數據庫升級時,刪除所有的表,意味着這將導致數據的丟失。
        // 所以,在正式的項目中,你還應該做一層封裝,來實現數據庫的安全升級。
        //建立數據庫,指定名字
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "greendao-db", null);
        db = helper.getWritableDatabase();
        // 注意:該數據庫連接屬於 DaoMaster,所以多個 Session 指的是相同的數據庫連接。
        daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    }
}
7、MainActivity 使用:
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 插入操作,簡單到只要你創建一個 Java 對象
        Note note = new Note(1L, "title", "comment", new Date());
        getNoteDao().insert(note);
        //查詢
        Query<Note> noteQuery=getNoteDao()
                .queryBuilder()
                .where(NoteDao.Properties.Text.eq("title"))
                .where(NoteDao.Properties.Comment.like("c"),NoteDao.Properties.Comment.like("o"))
                .orderAsc(NoteDao.Properties.Date).build();
        List<Note>list=noteQuery.list();
    }
    private NoteDao getNoteDao() {
        return MyApplication.daoSession.getNoteDao();
    }
}
我把項目上傳到github上了,可以下載看看:
https://github.com/Strayxiaohu/MYGreenDaoTest10.21

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章