GreenDao使用笔记

11 篇文章 1 订阅
1 篇文章 0 订阅

使用的GreenDao版本为3.2.2

1.引入GreenDao

// 在根 build.gradle 文件中添加:
buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    }
}
 
// 在app工程 build.gradle 文件中添加:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
 
dependencies {
    implementation 'org.greenrobot:greendao:3.2.2' // add library
}

引入成功后会添加两个greendao的aar包

2.最简单的使用

通过第一步其实就可以使用GreenDao了。

第一步:创建一个Bean

创建一个UserInfo类:

import org.greenrobot.greendao.annotation.Entity;
@Entity
public class UserInfo {
    public long id;
    public String name;
}

注意这里添加了一个@Entity注解,这个注解标明这个类需要和数据库进行映射。

第二步:Make Project

这步是GreenDao最主要的操作,会自动帮我们生成一些用于数据库映射的代码

Make Project 操作完成后,会在build目录下生成如下代码:

 

同时GreenDao会自动帮我们给bean生成构造函数和get/set等方法。

@Entity
public class UserInfo {
    public long id;
    public String name;
    @Generated(hash = 134938140)
    public UserInfo(long id, String name) {
        this.id = id;
        this.name = name;
    }
    @Generated(hash = 1279772520)
    public UserInfo() {
    }
    public long getId() {
        return this.id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

我们看到GreenDao在默认build->generated->source目录下为我们创建了DaoMaster,DaoSession,UserInfoDao这几个类。

(可选项,不写也能运行GreenDao):添加下面代码来指定GreenDao生成代码的位置,不添加则在上面的默认目录生成代码

   greendao {
        schemaVersion 1
         daoPackage 'com.ping.greendao.gen'
         targetGenDir 'src/main/java'
    }

第三步:初始化GreemDao

在Application类里面初始化GreenDao,最主要的目的是为了获取一个全局的DaoSession。

 

public class MyApplication extends Application {

    private DaoSession daoSession;
    @Override
    public void onCreate() {
        super.onCreate();

        // 通常 SQLite database
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db");
        Database db = helper.getWritableDb();

        // 加密 SQLCipher database
        // note: you need to add SQLCipher to your dependencies, check the build.gradle file
        // DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db-encrypted");
        // Database db = helper.getEncryptedWritableDb("encryption-key");
        daoSession = new DaoMaster(db).newSession();
    }
 
    /**
     * 提供daoSession给全局使用
     * @return
     */
    public DaoSession getDaoSession() {
        return daoSession;
    }
}

这里先解释下上面GreenDao自动生成的DaoMaster类。这个类是用来管理所有的Dao的。通过上面的代码我们获取到了我们最重要的一个类DaoSession,并提供了get方法,以后大部分发数据库操作都要用到它。

运行App到手机上,这时GreenDao会创建一个notes-db的数据库,具体是通过new DaoMaster.DevOpenHelper(this, "notes-db");这行代码创建的。

我是在真机上通过Root Explorer管理器查看的,需要root权限,数据库具体位置为/data/data/应用包名/databases。

简单原理:

到这里GreenDao就为我们创建了数据库并且还创建了数据里面我们指定的UserInfo表。创建数据库是比较好理解的,通过new DaoMaster.DevOpenHelper(this, "notes-db");这行代码创建,那么它是如何创建UserInfo表的?

答:用到了@Entity()和UserInfoDao这两个类。具体步骤MyApplication->创建数据库->识别有@Entity注解的bean->通过xxxDao(这里是UserInfoDao)创建表。

第四步:具体使用

通过@Entity注解可以让GreenDao帮我们创建具体的表,那么剩下的工作就是具体的增删改查了!

如何增删改查?我们需要用到DaoSession。

public class MainActivity extends AppCompatActivity {
    DaoSession daoSession;
    UserInfoDao userInfoDao;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initDB();
    }

    private void initDB() {
      daoSession= ((MyApplication)getApplication()).getDaoSession();
      //通过这个具体的dao操作
      userInfoDao=daoSession.getUserInfoDao();
      UserInfo userInfo=new UserInfo();
      userInfo.setName("小明");
      userInfoDao.insert(userInfo);
    }
}

1.通过MyApplication写的getSession()方法获取DaoSession;

2.通过DaoSession 获取到具体的Dao(这里是UserInfoDao)。

3.通过Dao进行增删改查等具体操作。

 

3.GreenDao特性

3.1关于id

1.如果需要id为自增长类型,必须设置id的类型包装Long类型,而不是基本数据类型long.

2.当id字段被@ID注解标记时,数据库中的字段名称为_id,如果id没有被@ID注解标记,那么在数据库中的字段名字就是id,不会在前面添加下划线。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值