數據庫框架: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