ORM框架greenDAO搭建

简介

greenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询;

greenDAO搭建(Andorid Studio)

Step1:创建greenDAO工程

创建java工程用来生成DaoMaster,DaoSession,DAO文件,实体文件;


DaoMaster:一看名字就知道它是Dao中的最大的官了。它保存了sqlitedatebase对象以及操作DAO classes(注意:不是对象)。其提供了一些创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架;
DaoSession:会话层。操作具体的DAO对象(注意:是对象),比如各种getter方法;
XXXDao:实际生成的某某DAO类,通常对应具体的java类,比如NoteDao等。其有更多的权限和方法来操作数据库元素;
XXXEntity:持久的实体对象。通常代表了一个数据库row的标准java properties;

Step2:配置greenDAO工程build.gradle
apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    //greendao依赖库
    compile 'de.greenrobot:greendao-generator:2.1.0'
    compile 'de.greenrobot:greendao:2.1.0'
}
Step3:生成greenDAO代码

注:生成一对一或一对多表关系请参考这个 链接

public class MyKBang {

    public static void main(String args[]) throws Exception {
        //生成Greendao相关文件,需要参数版本号,生成bean类放的目录
        //数据库变化重新生成,版本号需要加1或都大于之前
        Schema schema = new Schema(1, "com.kbang.convenientlife.bean");

        //设置一下生成的三个java文件(DaoMaster,DaoSession,***Dao)的目录
        schema.setDefaultJavaPackageDao("com.kbang.convenientlife.greendao");

        initUserBean(schema);

        //生成到那个路径
        new DaoGenerator().generateAll(schema, "../android_kb_shangchao/kbang/src/main/java");
    }

    /**
     * 生成实体配置
     * 1.添加属性支持基本数据类型
     * @param schema
     */
    private static void initUserBean(Schema schema) {
        //用户信息表名
        Entity userBean = schema.addEntity("UserInfo");

        // 表重命名
        //userBean.setTableName("phone");

        //用来实现序列化的接口
        userBean.implementsSerializable();

        //方式一 建立自增的主键
        //userBean.addLongProperty("id").primaryKey().index().autoincrement();
        //方式二 建立自增的主键
        userBean.addIdProperty();

        userBean.addStringProperty("code");
        userBean.addStringProperty("os");
        userBean.addStringProperty("osVersion");
        userBean.addStringProperty("name");
        userBean.addStringProperty("phoneLocation");
        userBean.addStringProperty("attachmentPath");
        userBean.addStringProperty("cityId");
        userBean.addStringProperty("sex");
        userBean.addStringProperty("attachmentId");
    }
}
Step4:整合到android工程

将greenDAO工程生成文件拷贝到android项目中,存放路径跟生成路径保持一致;
在android项目build.gradle引入依赖库:

    compile 'de.greenrobot:greendao-generator:2.1.0'
    compile 'de.greenrobot:greendao:2.1.0'

创建简单类测试一下:

DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "Test-db", null);  
db = helper.getWritableDatabase();  
daoMaster = new DaoMaster(db);  
daoSession = daoMaster.newSession();  
noteDao = daoSession.getNoteDao();  
UserInfo note = new UserInfo();  
userInfo.setName("kais");
userInfo.setSex("男");
noteDao.insert(note);  //插入数据
noteDao.deleteByKey(id);//删除数据

为升级数据库在这自己继承封装DaoMaster.DevOpenHelper代码如下:
DatabaseHelper.java

public class DatabaseHelper extends DaoMaster.OpenHelper {

    public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch (oldVersion){
            case 1:
                break;
        }
    }
}

DatabaseLoader.java

public class DatabaseLoader {

    //数据库名称
    private static final String DATABASE_NAME = "Test-db";
    //用来获取Dao的
    private static DaoSession daoSession;

    /**
     * 在Application中调用,初始化数据库
     *
     * @param context
     */
    public static void init(Context context) {
        //使用自定义的OpenHelper的到SQLiteDatabase
        DatabaseHelper helper = new DatabaseHelper(context, DATABASE_NAME, null);
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    }

    public static DaoSession getDaoSession() {
        return daoSession;
    }
}

grenDAO增删改查

//常用操作
public long insert(T entity)//增
public void delete(T entity)//删
public void update(T entity)//改

//load查询
public T load(K key)//根据主键加载实体对象 
public T loadByRowId(long rowId)//根据rowId加载实体对象 
public List<T> loadAll()//加载所有有效实体对象
//query查询
public QueryBuilder<T> queryBuilder()//用于构建查询的类
public List<T> queryRaw(String where, String... selectionArg)//根据条件查询
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值