数据库框架: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

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