数据库框架:GreenDao 实现原理

本文深入探讨了Android数据库框架GreenDao的实现原理和使用方法。通过创建Java Library项目并引入greenDAO库,可以自动生成Entity和DAO类。GreenDao支持自定义表名、设置主键和属性,提供了增删改查等基本操作。DaoMaster和DaoSession是核心管理组件,负责数据库的创建和管理。同时,文章对比了GreenDao与其他ORM框架如OrmLite和AndrORM的使用差异。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值