數據庫框架:GreenDao 實現原理

數據庫框架:GreenDao 實現原理

Android數據庫greenDAO框架用法和源碼分析
https://blog.csdn.net/duanyy1990/article/details/50955228

greenDAO -> OrmLite、AndrORM。


object/relational mapping

OrmLite、AndrORM。 LitePal等數據庫相比

ActiveOrm、LitePal等數據庫相比

LitePal等數據庫相比

greenDAO Entity,DaoExample/src/main/java

java File  New  New Module->Java Library建立greenDAO    generator


main        Schema = Schema        de.greenrobot.DaoExample/src/main/java

Entity note = schema.addEntity  "Note"


note.addIdProperty.primaryKey.autoincrement

note.addStringProperty
note.addDateProperty

addNote (schema)

DaoGenerator.generateAll

./DaoExample/src/main/java  src/main/java

Entity note = schema.addEntity("Note");     // 默認表名爲類名
note.setTableName("CustomNote");            // 自定義表名

greenDAO

note.setTableName("CustomNote")

note.addIdProperty.primaryKey.autoincrement

greendao-generator:2.1.0

4、 執行Java工程,就可以生成項目所需的各種Entity、DAO等文件

Entity DAO等文件

DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();




DevOpenHelper DaoMaster.DevOpenHelper

helper.getWritableDatabase
DaoMaster

daoMaster.newSession
daoMaster.getNoteDao

notes-db爲數據庫名稱,

CursorFactory        factory       SCHEMA_VERSION

createAllTables

DaoMaster DaoSession管理所有的DAO文件,並提供相應的getter方法。


  @Override
    public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, 
    RecyclerView.State state) {
        //屏蔽之後無滑動效果,證明滑動的效果就是由這個函數實現
        
        
scrollHorizontallyBy  int dx, RecyclerView.Recycler recycler,
RecyclerView.State state








line Bezier  

DaoMaster->DaoSession管理所有的DAO文件,並提供相應的getter方法。


noteDao.
insert  insertInTx        Note[]


INSERT OR REPLACE INTO

delete  deleteByKey deleteByKeyInTx deleteAll

note.addIdProperty.primaryKey.autoincrement

deleteByKeyInTx  List


noteDao.update note     

noteDao.updateInTx noteList

noteDao.queryRaw

queryBuilder()
.where  
        NoteDao.Properties.Id.ge 10
        
 .limit
 .orderAsc
orderAsc(
    NoteDao.Properties.Date






)
.list .Date

QueryBuilder qb.where
qb.and


public List<T> queryRaw(String where, String... selectionArg) {
    Cursor cursor = db.rawQuery(statements.getSelectAll() + where, selectionArg);
    return loadAllAndCloseCursor(cursor);
}



queryRaw
where   selectionArg     db.rawQuery() statements.getSelectAll+ where

loadAllAndCloseCursor(cursor)


build  offset limit  orderAsc表示根據某一列進行排序,最後list得到查詢結果。

greenDAO generator  Entity.addToOne


Property[] fkProperties = {};


addToOne        addEntity 


schema.addEntity

to-one getter

greenDAO建立
    to-many模型的方法和數據庫中的操作類似,首先需要在目標實體中增加一個屬性,用於關聯To-many關係中的資源實體,然後使用這個屬性,添加到資源實體的To-many關係。

schema.addEntity.setTableName
.addIdProperty 

order.addToOne customer customerId
addToMany  


customer.addToMany(order,customerId)

OrmLite、AndrORM。


onRequestDisallowInterceptTouchEvent

onRequestDisallowInterceptTouchEvent

createTable  

dropTable


DevOpenHelper  helper = new DaoMaster.DevOpenHelper

queryRaw

dao.getDatabase.rawQuery
SqliteStatement

executeInsert T entity,SQLiteStatement stmt

updateKeyAfterInsertAndAttach  entity,rowId,true

executeInsert

bindValues stmt ,entity

stmt.executeInsert()

updateKeyAfterInsertAndAttach

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