数据库框架GreenDAO的简单使用

数据库框架GreenDAO的简单使用

一、引入依赖(两步)

第一步:在Project的build.gradle下增加以下注释的属性

buildscript {
    repositories {
        mavenCentral()//add repositories because greendao needed
    }
    dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'//add greendao plugin
    }
}

第二步:在你所在的Module的build.gradle下增加如下属性:

apply plugin: 'org.greenrobot.greendao'//add plugin for greendao
android {
    //配置greendao数据库相关的信息
    greendao {
        schemaVersion 1 //数据库版本号
        daoPackage 'com.example.demo_test_sqlite.greendao' //设置生成dao一系列类的包名
        targetGenDir 'src/main/java' //设置生成dao一系列类所在目录
    }
}
dependencies {
    compile 'org.greenrobot:greendao:3.2.2' //add library for greendao
    //不需要可以不依赖
    compile 'net.zetetic:android-database-sqlcipher:3.5.6'//加密库依赖
}

二、简单使用

Application全局配置
package com.example.demo_test_sqlite;

import android.app.Application;

import com.example.demo_test_sqlite.greendao.DaoMaster;
import com.example.demo_test_sqlite.greendao.DaoSession;

import org.greenrobot.greendao.database.Database;

public class NewApplication extends Application {

    private static NewApplication myApplication;

    public static NewApplication getInstance() {
        return myApplication;
    }

    private static final String DATABASE_NAME = "test.db";

    // 是否加密
    public static final boolean ENCRYPTED = false;
    private static final String ENCRYPT_PWD = "qzx";

    @Override
    public void onCreate() {
        super.onCreate();
        myApplication = this;
        initGreenDAO();
    }

    private DaoSession daoSession;

    public DaoSession getDaoSession() {
        return daoSession;
    }

    /**
     * 初始化greendao
     */
    private void initGreenDAO() {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, DATABASE_NAME);
        Database database = null;
        if (ENCRYPTED) {
            database = helper.getEncryptedWritableDb(ENCRYPT_PWD);
        } else {
            database = helper.getWritableDb();
//            helper.getWritableDatabase();//SQLiteDatabase
        }
        DaoMaster daoMaster = new DaoMaster(database);
        daoSession = daoMaster.newSession();
    }
}
创建实体类

【说明:id必须是Long类型否则会报错,如下这样写好后build下即可会自动生成DAO的相关类,greendao的配置已经将版本号、代码生成路径写好了】
ps:toString方法如有需要需要自己添加

以整形值作为主键

@Entity
public class SimpleTestInfo {
    @Id
    private Long id;//必须要是Long类型
    private String name;
    private int age;
    private String address;
}

不以一个整形值作为主键

@Entity
public class SimpleTest2Info {
    @Id
    private String sudentNum;
    private String name;
    private String sex;
}
运用

[注意:本示例没有考虑做异步处理,特别是在查询的时候可能会耗时间等,如果数据庞大的话正式运用需要考虑]

public class GreenDAOActivity extends AppCompatActivity {

    SimpleTestInfoDao simpleTestInfoDao;

    SimpleTest2InfoDao simpleTest2InfoDao;

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

        simpleTestInfoDao = NewApplication.getInstance().getDaoSession().getSimpleTestInfoDao();

        simpleTest2InfoDao = NewApplication.getInstance().getDaoSession().getSimpleTest2InfoDao();
    }

    /**
     * 检查是否数据库中已经存在该学生数字的对象
     * */
    private boolean checkExistsByNum(String studentNum) {
        SimpleTest2Info simpleTest2Info = simpleTest2InfoDao.queryBuilder().where
                (SimpleTest2InfoDao.Properties.SudentNum.eq(studentNum)).build().unique();
        if (simpleTest2Info != null) {
            return true;
        } else {
            return false;
        }
    }

    private long count = 0;

    //数据的增删该查

    public void addData(View view) {
//        SimpleTestInfo simpleTestInfo = new SimpleTestInfo(count,"七子笑",27,"合肥");
//        simpleTestInfo.setName("七子笑");
//        simpleTestInfo.setAge(27);
//        simpleTestInfo.setAddress("合肥");
//        simpleTestInfoDao.insertOrReplace(simpleTestInfo);
//
//        count++;
    }

    public void delData(View view) {
//        simpleTestInfoDao.deleteAll();
//        count = 0;

        simpleTest2InfoDao.deleteAll();
        count = 0;
    }

    public void queryData(View view) {
//        simpleTestInfoDao.loadAll()
//        List<SimpleTestInfo> list = simpleTestInfoDao.queryBuilder().list();
//        Iterator<SimpleTestInfo> iterator = list.iterator();
//        while (iterator.hasNext()) {
//            Log.d("zbv", "info=" + iterator.next() + "/n");
//        }

        List<SimpleTest2Info> list = simpleTest2InfoDao.loadAll();
        for (SimpleTest2Info simpleTest2Info : list) {
            Log.d("zbv", "imfo2=" + simpleTest2Info);
        }
    }

完毕

三、拓展:做一下增删改查的静态处理使用

package com.example.demo_test_sqlite.specialDAO;

import com.example.demo_test_sqlite.greenDaoEntities.SimpleTestInfo;
import com.example.demo_test_sqlite.greendao.SimpleTestInfoDao;

import java.util.List;

/**
 * 静态方法专供SimpleTestInfo的数据库增删改查
 */
public class SimpleTestInfoSpecialOperatioin {


    public static void insertDataToDB(SimpleTestInfoDao simpleTestInfoDao, SimpleTestInfo simpleTestInfo) {
        //如果存在就替换
        simpleTestInfoDao.insertOrReplace(simpleTestInfo);
    }

    public static void deleteAllDataFromDB(SimpleTestInfoDao simpleTestInfoDao) {
        //如果存在就替换
        simpleTestInfoDao.deleteAll();
    }

    //一般都是一句主键删除
    public static void deleteDataByOneKey(SimpleTestInfoDao simpleTestInfoDao, long id) {
        //检查是否存在
        boolean exist = checkExistsByNum(simpleTestInfoDao, id);
        if (exist) {
            simpleTestInfoDao.deleteByKey(id);
        }
    }

    private static boolean checkExistsByNum(SimpleTestInfoDao simpleTestInfoDao, long id) {
        SimpleTestInfo simpleTestInfo = simpleTestInfoDao.queryBuilder().
                where(SimpleTestInfoDao.Properties.Id.eq(id)).build().unique();
        if (simpleTestInfo != null) {
            return true;
        } else {
            return false;
        }
    }

    //例如一句名字改年龄
    public static void updateDataByName(SimpleTestInfoDao simpleTestInfoDao, String name, int age) {
        SimpleTestInfo simpleTestInfo = simpleTestInfoDao.queryBuilder().
                where(SimpleTestInfoDao.Properties.Name.eq(name)).build().unique();
        if (simpleTestInfo != null) {
            simpleTestInfo.setAge(age);
            simpleTestInfoDao.update(simpleTestInfo);
        }
    }

    public static List<SimpleTestInfo> QueryAllDataFromDB(SimpleTestInfoDao simpleTestInfoDao) {
//        List<SimpleTestInfo> allDatas = simpleTestInfoDao.loadAll();

        //可以一句where条件查询一部分符合条件的数据链表
        List<SimpleTestInfo> allDatas = simpleTestInfoDao.queryBuilder().list();

        return allDatas;

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GreenDao是一个高效、轻量级、快速的ORM(对象关系映射)框架,可以方便地将Java对象映射到SQLite数据库中。下面是GreenDao的引入和使用步骤: 1. 在build.gradle文件中添加以下依赖: ```groovy dependencies { implementation 'org.greenrobot:greendao:3.3.0' } ``` 2. 在app/build.gradle文件中添加以下配置: ```groovy android { defaultConfig { //... javaCompileOptions { annotationProcessorOptions { arguments = ["schemaVersion": "1", "daoPackage": "com.example.myapp.db"] } } } } greendao { schemaVersion 1 daoPackage 'com.example.myapp.db' targetGenDir 'src/main/java' } ``` 这些配置将告诉GreenDao在编译时生成DAO(数据访问对象)类。schemaVersion是数据库的版本号,daoPackage是生成DAO类的包名,targetGenDir是DAO类的生成目录。 3. 创建实体类,例如: ```java @Entity public class User { @Id(autoincrement = true) private Long id; private String name; private int age; // getters and setters } ``` @Entity注解表示这是一个实体类,@Id注解表示这是主键,autoincrement = true表示主键自增。 4. 在app/src/main/java目录下创建一个名为“greenDao”的包,并在该包下创建一个名为“DaoMasterOpenHelper”的类。该类继承自DaoMaster.OpenHelper,用于创建和升级数据库。例如: ```java public class DaoMasterOpenHelper extends DaoMaster.OpenHelper { public DaoMasterOpenHelper(Context context, String name) { super(context, name); } @Override public void onCreate(Database db) { super.onCreate(db); } @Override public void onUpgrade(Database db, int oldVersion, int newVersion) { // 数据库升级逻辑 } } ``` 5. 初始化GreenDao,在Application类的onCreate()方法中添加以下代码: ```java public class MyApp extends Application { private DaoSession daoSession; @Override public void onCreate() { super.onCreate(); DaoMasterOpenHelper helper = new DaoMasterOpenHelper(this, "mydb"); Database db = helper.getWritableDb(); daoSession = new DaoMaster(db).newSession(); } public DaoSession getDaoSession() { return daoSession; } } ``` 这里创建了一个DaoMasterOpenHelper实例,并通过它获取可写的数据库,然后创建一个DaoSession实例。 6. 使用GreenDao,例如: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DaoSession daoSession = ((MyApp) getApplication()).getDaoSession(); User user = new User(); user.setName("Tom"); user.setAge(18); daoSession.getUserDao().insert(user); List<User> userList = daoSession.getUserDao().queryBuilder() .where(UserDao.Properties.Age.gt(10)) .orderAsc(UserDao.Properties.Age) .list(); } } ``` 这里通过getApplication()方法获取MyApp实例,然后通过getDaoSession()方法获取DaoSession实例。接着创建了一个User实例并插入到数据库中。最后使用查询构建器查询年龄大于10的所有用户,并按年龄升序排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值