强大的数据库ORM框架-GreenDao增删改查篇
作者: |
蒋东国 |
时间: |
2016年12月11日 星期日 |
应用来源: |
hqt APP(测试机型:华为荣耀4X) |
博客地址: |
http://blog.csdn.net/andrexpert/article/details/53572811 |
情景再现:“前两篇博文分别阐述了如何去搭建一个GreenDao框架项目和剖析了项目中的相关源码,这让我们对GreenDao框架有了初步的了解以及如何去使用它,那么接下来就来了解GreenDao框架是如何能够在不接触SQL语句的情况下实现对本地数据库的增删改查。”
由之前的博文可知,使用GreenDao框架对本地数据库的增删改查最终是通过GreenDao生成器自动生成的xxxDao类实现的(如PersonInfoDao、WorkInfoDao),它们封装了大部分数据库操作方法,通常一张表就对应一个xxxDao类。我们以表WORK_INFO对应的WorkInfoDao为例,它的源码如下:
/**
* DAO for table "WORK_INFO".
*/
public class WorkInfoDao extends AbstractDao<WorkInfo, Long> {
public static final String TABLENAME = "WORK_INFO";
/**
* Properties of entity WorkInfo.<br/>
* Can be used for QueryBuilder and for referencing column names.
*/
public static class Properties {
public final static Property Id = new Property(0, Long.class, "id", true, "_id");
public final static Property Company = new Property(1, String.class, "company", false, "COMPANY");
public final static Property Address = new Property(2, String.class, "address", false, "ADDRESS");
public final static Property Number = new Property(3, Integer.class, "number", false, "NUMBER");
};
public WorkInfoDao(DaoConfig config) {
super(config);
}
public WorkInfoDao(DaoConfig config, DaoSession daoSession) {
super(config, daoSession);
}
/** Creates the underlying database table. */
public static void createTable(SQLiteDatabase db, boolean ifNotExists) {
String constraint = ifNotExists? "IF NOT EXISTS ": "";
db.execSQL("CREATE TABLE " + constraint + "\"WORK_INFO\" (" + //
"\"_id\" INTEGER PRIMARY KEY ," + // 0: id
"\"COMPANY\" TEXT NOT NULL ," + // 1: company
"\"ADDRESS\" TEXT NOT NULL ," + // 2: address
"\"NUMBER\" INTEGER);"); // 3: number
}
/** Drops the underlying database table. */
public static void dropTable(SQLiteDatabase db, boolean ifExists) {
String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"WORK_INFO\"";
db.execSQL(sql);
}
/** @inheritdoc */
@Override
protected void bindValues(SQLiteStatement stmt, WorkInfo entity) {
stmt.clearBindings();
Long id = entity.getId();
if (id != null) {
stmt.bindLong(1, id);
}
stmt.bindString(2, entity.getCompany());
stmt.bindString(3, entity.getAddress());