Android之GreenDao3.0使用

作者: 吃饱了就送 | 来源:发表于2018-03-16 13:48 被阅读0次

    首先附上项目地址:https://github.com/greenrobot/greenDAO
    API文档:http://greenrobot.org/files/greendao/javadoc/current/

    第一步:了解注解。

    注解API:
    @Entity 参数:

    schema:告知GreenDao当前实体属于哪个schema
    active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
    nameInDb:在数据库中使用的别名,默认使用的是实体的类名
    indexes:定义索引,可以跨越多个列
    createInDb:标记创建数据库表
    

    基础属性注解

    @Id:主键 Long 型,[可以通过@Id](mailto:%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87@id)(autoincrement = true)设置自增长
    @Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "name")
    @NotNull:设置数据库表当前列不能为空
    @Transient:添加此标记后不会生成数据库表的列
    

    索引注解

    @Index:[使用@Index作为一个属性来创建一个索引](mailto:%E4%BD%BF%E7%94%A8@index%E4%BD%9C%E4%B8%BA%E4%B8%80%E4%B8%AA%E5%B1%9E%E6%80%A7%E6%9D%A5%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%B4%A2%E5%BC%95),通过name设置索引别名,也可以通过unique给索引添加约束
    @Unique:向数据库添加了一个唯一的约束
    

    关系注解

    @ToOne:定义与另一个实体(一个实体对象)的关系
    @ToMany:定义与多个实体对象的关系
    

    第二步:编译项目生成所需文件

    编写完数据库实体类之后,编译一下项目,会在build目录下生成三个文件DaoMaster,DaoSession,XXXDao。


    编译项目

    第三步:初始化GreenDao

    一般是在Application里初始化,

            DevOpenHelper helper = new DevOpenHelper(this, "DateBaseName");
            Database db = helper.getWritableDb();
            daoSession = new DaoMaster(db).newSession();
    

    注意:DevOpenHelper有两个重载方法:DevOpenHelper(Context context,String name) 和DevOpenHelper(Context context,String name,CursorFactory factory)。context上下文这个不用多说,name数据库的名字,cursorFactory游标工厂,一般不用,传入null或者使用两个参数的方法即可。
    为了开发方便,我们会对外提供一个getDaoSession()的方法供外部使用。

    public DaoSession getDaoSession() {
            return daoSession;
        }
    

    在activity中使用:

            DaoSession daoSession = ((App) getApplication()).getDaoSession();
            DateBaseNameDao = daoSession.getDateBaseNameDao();
    

    剩下的就是拿着Dao实例进行增删改查的操作。

    保存List和实体类类型数据

    PropertyConverter接口

    //将数据库中的值,转化为实体Bean类对象(比如List<String>)
    P convertToEntityProperty(D databaseValue);
    
    //将实体Bean类(比如List<String>)转化为数据库中的值(比如String)
    D convertToDatabaseValue(P entityProperty);
    

    实体类

    @Entity
    public class User {
        @Id(autoincrement = true)//设置自增长
        private Long id;
        private String name;
    
    //用到了这个Convert注解,表明它们的转换类,这样就可以转换成String保存到数据库中了
      @Convert(columnType = String.class, converter = List_Converter.class)
        private List<JavaBean> listBean; //实体类中list数据
    
     @Convert(columnType = String.class, converter = Bean_Converter.class)
        private JavaBean javaBean;//实体类套实体类
    

    保存的List类型数据转换类

    public class List_Converter implements PropertyConverter<List<JavaBean>, String> {
        @Override
        public List<JavaBean> convertToEntityProperty(String databaseValue) {
            if (databaseValue == null) {
                return null;
            }
          
            TypeToken<List<JavaBean>> typeToken = new TypeToken<List<JavaBean>>(){};
            return new Gson().fromJson(databaseValue, typeToken.getType());
        }
    
        @Override
        public String convertToDatabaseValue(List<JavaBean> arrays) {
            if (arrays == null||arrays.size()==0) {
                return null;
            } else {
                String sb = new Gson().toJson(arrays);
                return sb;
            }
        }
    
    public class Bean_Converter implements PropertyConverter<JavaBean, String> {
        @Override
        public JavaBean convertToEntityProperty(String databaseValue) {
            return new Gson().fromJson(databaseValue, JavaBean.class);
        }
    
        @Override
        public String convertToDatabaseValue(TempReport entityProperty) {
            return new Gson().toJson(entityProperty);
        }
    }
    

    相关文章

      网友评论

        本文标题:Android之GreenDao3.0使用

        本文链接:https://www.haomeiwen.com/subject/jaxizxtx.html