Android

GreenDao简单用法

2018-12-04  本文已影响133人  世道无情
1. 概述

这里记录下greendao的简单用法,常用的就是增删改查,这里是参照下边这位大神博客自己写的demo;
https://blog.csdn.net/ht1063899049/article/details/78519723

2. 使用

第一步:在项目的 build.gradle中添加下边依赖:
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
图片.png
第二步:在app的 build.gradle中添加下边依赖:
//使用greendao
apply plugin: 'org.greenrobot.greendao' // apply plugin

    greendao {
        schemaVersion 1 //数据库版本号
        daoPackage 'com.novate.greendao.db'// 设置DaoMaster、DaoSession、Dao 包名
        targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
    }

compile 'org.greenrobot:greendao:3.2.2' // add library
图片.png
图片.png
第三步:自定义一个实体类,User

自己只需要写下边的即可


图片.png

然后 build --> Make Project


图片.png
此时会在db包下生成如下图的3个类:
图片.png

同时,User实体类也会生成一些代码,如下:

package com.novate.greendao;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;

/**
 * ================================================
 * Email: 2185134304@qq.com
 * Created by Novate 2018/11/28 7:42
 * Version 1.0
 * Params:
 * Description:    实体类
 *
 * 备注:Bean 对象注释的解释
 *           @Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
             @Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
             @Property:可以自定义字段名,注意外键不能使用该属性
             @NotNull:属性不能为空
             @Transient:使用该注释的属性不会被存入数据库的字段中
             @Unique:该属性值必须在数据库中是唯一值
             @Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
 * ================================================
*/

@Entity
public class User {
    @Id(autoincrement = true)
    private Long id;
    private String name;
    private int age;
    private String sex;
    @Generated(hash = 689493095)
    public User(Long id, String name, int age, String sex) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    @Generated(hash = 586692638)
    public User() {
    }
    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;
    }
    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return this.sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}

第四步:AppApplication代码如下
/**
 * ================================================
 * Email: 2185134304@qq.com
 * Created by Novate 2018/11/28 7:44
 * Version 1.0
 * Params:
 * Description:
 * ================================================
*/

public class AppApplication extends Application {

    private DaoMaster.DevOpenHelper mHelper;
    private SQLiteDatabase db;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;

    public static AppApplication instances;


    /**
     * 单例模式
     */
    public static AppApplication getInstances() {
        return instances;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        instances = this;
        setDatabase();
    }

    private void setDatabase() {
        // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
        // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
        // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
        // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
        mHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
        db = mHelper.getWritableDatabase();
        // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
    }

    public DaoSession getDaoSession() {
        return mDaoSession;
    }

    public SQLiteDatabase getDb() {
        return db;
    }
}

第五步:在MainActivity中定义4个按钮,分别为添加、删除、修改、查询,代码如下:
/**
 * ================================================
 * Email: 2185134304@qq.com
 * Created by Novate 2018/11/28 8:51
 * Version 1.0
 * Params:
 * Description:    增删改查方法
 * ================================================
*/

public class MainActivity extends AppCompatActivity {

    int i = 1;
    private DaoSession daoSession;
    private UserDao userDao;

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

        initDaoSession() ;
    }

    private void initDaoSession() {
        daoSession = AppApplication.getInstances().getDaoSession();
        userDao = AppApplication.getInstances().getDaoSession().getUserDao();
    }


    /**
     * 添加数据
     */
    public void add(View view) {
        User user = new User(null , "zhangsan" , i , "男") ;
        i = i+1;
        daoSession.insert(user) ;

        List<User> list = userDao.queryBuilder().list();
        Log.e("TAG" , "插入成功,查询的结果个数为:"+list.size()+", 数据为:"+list) ;
    }


    /**
     * 删除
     */
    public void delete(View view) {
        List<User> list = userDao.queryBuilder().list();

        if (list == null || list.isEmpty()){
            return;
        }

        for (int j = 0; j < list.size(); j++) {
            User user = list.get(j);
            if ("zhangsan".equals(user.getName())){
                userDao.delete(user);
                Log.e("TAG" , "删除姓名为张三的人") ;
            }
        }

        Log.e("TAG" , "删除成功后,查询的结果个数为: "+userDao.queryBuilder().list().size()) ;
    }


    /**
     * 修改
     */
    public void update(View view) {
        QueryBuilder<User> builder = userDao.queryBuilder();

        // 获取年龄为1的 用户的集合
        List<User> list = builder.where(UserDao.Properties.Age.eq(1)).list();
        if (list == null || list.isEmpty()){
            return;
        }
        for (int j = 0; j < list.size(); j++) {
            User user = list.get(j);
            user.setName("lisi");
            user.setSex("女");
            daoSession.update(user);
            Log.e("TAG" , "修改成功") ;
        }
        Log.e("TAG" , "修改成功后,查询的结果个数为: "+userDao.queryBuilder().list().size()) ;


        // 查询数据库中所有数据的集合
        List<User> list1 = userDao.queryBuilder().list();
        if (list1 == null || list1.isEmpty()){
            Log.e("TAG" , "所有数据的集合list1 - 暂无数据") ;
            return;
        }

        for (int k = 0; k < list1.size(); k++) {
            User user = list1.get(k);

            Long id = user.getId();
            String name = user.getName();
            int age = user.getAge();
            String sex = user.getSex();
            Log.e("TAG" , "修改后 遍历所有集合的:姓名:"+name+", 年龄:"+age+", 性别:"+sex+", id: "+id) ;
        }
    }


    /**
     * 查询
     */
    public void query(View view) {
        QueryBuilder<User> builder = userDao.queryBuilder();
        // 获取 数据库中的list集合
        List<User> list = builder.list();

        if (list == null || list.isEmpty()){
            Log.e("TAG" , "集合中暂无数据") ;
            return;
        }

        for (int j = 0; j < list.size(); j++) {
            User user = list.get(j);

            Long id = user.getId();
            String name = user.getName();
            int age = user.getAge();
            String sex = user.getSex();
            Log.e("TAG" , "查询后 遍历所有集合的:姓名:"+name+", 年龄:"+age+", 性别:"+sex+", id: "+id) ;
        }
    }
}
以上就是greendao最基础的操作,增删改查,项目中有需要可以直接拿去用,如果有其他的需求,可以在此基础上修改即可
代码已上传至github:https://github.com/shuai999/GreenDao2.git
上一篇下一篇

猜你喜欢

热点阅读