GreenDao的使用与封装

官方api文档
SQLite可视化工具下载地址 Personal为免费版本

配置

在项目build.gradle中配置

 dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
 }

在你要使用的模块下的build.gradle配置(我是直接在app模块下)

apply plugin: 'org.greenrobot.greendao'
greendao {
    // 指定数据库schema版本号,迁移等操作会用到
    schemaVersion 1
    // 通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名
    daoPackage 'com.example.greendao.dao'
    // 生成的数据库文件默认目录为:build/generated/source/greendao
    // 自定义生成数据库文件的目录,可以将生成的文件放到java目录中,而不是build中,这样就不用额外的设置资源目录了
    targetGenDir 'src/main/java'
}
dependencies {
    compile 'org.greenrobot:greendao:3.1.0'
}

greendao build配置
schemaVersion: 数据库schema版本,也可以理解为数据库版本号
daoPackage:设置DaoMaster 、DaoSession、Dao包名
targetGenDir:设置DaoMaster 、DaoSession、Dao目录
targetGenDirTest:设置生成单元测试目录
generateTests:设置自动生成单元测试用例
实体@Entity注解
schema:告知GreenDao当前实体属于哪个schema
active:标记一个实体处于活动状态,活动实体有更新、删除和刷新方法
nameInDb:在数据中使用的别名,默认使用的是实体的类名
indexes:定义索引,可以跨越多个列
createInDb:标记创建数据库表
基础属性注解
@Id :主键 Long型,可以通过@Id(autoincrement = true)设置自增长
@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb=”name”)
@NotNul:设置数据库表当前列不能为空
@Transient :添加次标记之后不会生成数据库表的列
索引注解
@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
@Unique:向数据库列添加了一个唯一的约束
关系注解
@ToOne:定义与另一个实体(一个实体对象)的关系
@ToMany:定义与多个实体对象的关系

使用

我的entity是写在com.example.greendao.entity包下,当编译的时候,系统会自动找到@Entity注解过的类,在com.example.greendao.dao下产生greendao所需的类(这个包在build.gradle中指定了daoPackage,否则会在build/generated/source/greendao下)。
为了测试方便,写了三种entity类:person,animal.house,body,PersonWithHouse类,默认的测试关系是person和animal是1:N,person和body是1:1,person和house是N:M,PersonWithHouse是person和house的联系。

@Entity
public class Person {
   
    //自增id类型只能是Long
    @Id(autoincrement = true)
    private Long id;
    @Property(nameInDb = "user")
    private String username;
    private int age;
    private Long bodyId;
    //一对一,将Person表中的bodyId与body的主键关联
    @ToOne(joinProperty = "bodyId")
    private Body body;
    //一对多
    @ToMany(referencedJoinProperty = "ownerId")
    private List<Animal> animals;
    //多对多
    @ToMany
    @JoinEntity(
            entity = PersonWithHouse.class,
            sourceProperty = "personId",
            targetProperty = "houseId"

    )
    private List<House> personWithHouse;
    //get,set方法编译后会自动产生
}
@Entity
public class Animal {
   
    @Id(autoincrement = true)
    private Long id;
    private Long ownerId;
    private String name;
}
@Entity
public class Body {
   
    @Id(autoincrement = true)
    private Long id;
    private int height;
    private int weight;
}
@Entity
public class House {
   
    @Id(autoincrement = true)
    private Long id;
    private String location;
    private String price;
      @ToMany
    @JoinEntity(
            entity = PersonWithHouse.class,
            sourceProperty = "houseId",
            targetProperty = "personId"
    )
    private List<Person> personList;
}
@Entity
public class PersonWithHouse {
   
    @Id(autoincrement = true)
    private Long id;
    private Long personId;
    private Long houseId;
}

封装

//在application中初始化MyDatabaseLoader.init(this,"greendao_db",null);
public class MyDatabaseLoader {
    private static DaoSession daoSession;
    public static void init(Context context,String databaseName,MyDataBaseOpenHelper.DataOpenHelper update){
            MyDataBaseOpenHelper openHelper = new MyDataBaseOpenHelper(context,databaseName,null,update);
            SQLiteDatabase database =  openHelper.getWritableDatabase();
            DaoMaster daoMaster =new DaoMaster(database);
            daoSession = daoMaster.newSession();
    }

    public static DaoSession getDaoSession() {
        return daoSession;
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值