greendao3.x 以及操作外部数据库

简介

greenDao是一个使用于android的ORM框架,现在主流的ORM框架有OrmLite,SugarORM,Active Android,Realm以及GreenDAO.greenDao的性能远远高于同类的ORM框架,具体的测试结果官网有。

示例代码

https://github.com/7449/AndroidDevelop/tree/master/greenDao

3.0示例代码

https://github.com/7449/AndroidDevelop/tree/master/greendao_3.0

读写第三方数据表,示例代码

https://github.com/7449/AndroidDevelop/tree/master/greenDaoExternal

有时候数据表会由后台分发而不是自动生成,所以这里简单介绍下怎么使用greendao操作这种情况下的数据表

需要注意以下几点

    1:android数据库操作都是在databases文件夹下,所以要把需要动的数据库复制到databases文件夹下

    /**
     * assets目录下的db转移到databases
     */
    public void copyDBToDatabases() {
        try {
            String outFileName = DB_PATH + DB_NAME;
            File file = new File(DB_PATH);
            if (!file.mkdirs()) {
                file.mkdirs();
            }
            File dataFile = new File(outFileName);
            if (dataFile.exists()) {
                dataFile.delete();
            }
            InputStream myInput;
            myInput = getApplicationContext().getAssets().open(DB_NAME);
            OutputStream myOutput = new FileOutputStream(outFileName);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }
            myOutput.flush();
            myOutput.close();
            myInput.close();
        } catch (IOException e) {
            Log.i(TAG, "error--->" + e.toString());
            e.printStackTrace();
        }

    }


    2:geenDao自动生成的时候table 默认为TABLENAME,默认id生成时"_id",这些生成的字段必须要和数据表中的字段一致,可以用 nameInDb="" 指定字段name和tableName


    @Entity(nameInDb = "blacklist")
    public class ExternalBean {
        @Property(nameInDb = "id")
        private Integer id;
        @Property(nameInDb = "email")
        private String email;
        @Generated(hash = 1314000312)
        public ExternalBean(Integer id, String email) {
            this.id = id;
            this.email = email;
        }
        @Generated(hash = 981826822)
        public ExternalBean() {
        }
        public Integer getId() {
            return this.id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getEmail() {
            return this.email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
    }

3.x更新

项目build.gradle添加

classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'

app下的build.gradle添加

apply plugin: 'org.greenrobot.greendao'

compile 'org.greenrobot:greendao:3.2.0'

    //修改生成类的位置
    greendao {
        targetGenDir 'src/main/java/' //生成源文件的目录,默认是build目录中的(build/generated/source/greendao)
//        daoPackage //生成的DAO,DaoMaster和DaoSession的包名。默认是实体的包名
//        schemaVersion //当前数据库结构的版本
//        generateTests //设置是否自动生成单元测
//        targetGenDirTest //生成的单元测试的根目录
    }

然后自定义UserBean类

@Entity
public class UserBean {

    @Id
    private Long id;
    private String name;
    private int age;
    @Generated(hash = 1032023074)
    public UserBean(Long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    @Generated(hash = 1203313951)
    public UserBean() {
    }
}

注解:

@Entity 定义实体
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
@Id
@NotNull 不为null
@Unique 唯一约束
@ToMany 一对多
@OrderBy 排序
@ToOne 一对一
@Transient 不存储在数据库中
@generated 由greendao产生的构造函数或方法

重新rebuild 一下项目,就可以看到greenDao自动生成的数据库相关类,比2.X时确实好用多了,之后用法还和以前一样

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值