Android技术知识Android知识Android开发

GreenDao的简单使用

2017-07-28  本文已影响1430人  程序员丶星霖

GreenDao的简单使用

一、简介

greenDao是一款开源的Android ORM,使得SQLite的二次开发更简单,减轻了开发人员处理低级数据库需求,同时节省开发时间。

greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。

GreenDao.png

二、greenDao的优点

三、greenDao 3.0的使用

greenDao 3.0 采用注解的方式来定义实体类,通过gradle插件生成相应的代码。

/*GreenDao*/
    compile'org.greenrobot:greendao:3.2.0'
    compile'org.greenrobot:greendao-generator:3.2.0'

在根build.gradle文件中添加

// In your root build.gradle file:
buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    }
}

在app中的build.gradle中添加

// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
 
dependencies {
    compile 'org.greenrobot:greendao:3.2.2' // add library
}
greendao {
    schemaVersion 1
    daoPackage 'com.tengxin.chelingwang.gen'
    targetGenDir 'src/main/java'
}

四、上代码

基础注解
Entity
public class User {
    @Id
    private String id;
    private String phone;
    private String phone_full;
    private String email;
    private String email_full;
    private String money;
    private String money_text;
    private String trade;
    private String username;
    private String realname;
    private String nickname;
    private String show_name;
    private String gender;
    private String avatar;
    private String deposit;
    private String deposit_text;
    private String birthday;
    private String good;
    private String bad;
    private String is_seller;
    private String is_auth;
    private String auth_waiting;
    private String pay_pwd_set;
    private String last_login;
    private String token;
    private String chat_token;
}
实体注解:
@Entity(
        // 如果你有超过一个的数据库结构,可以通过这个字段来区分
        // 该实体属于哪个结构
        schema = "myschema",

        //  实体是否激活的标志,激活的实体有更新,删除和刷新的方法
        active = true,

        // 确定数据库中表的名称
        // 表名称默认是实体类的名称
        nameInDb = "AWESOME_USERS",

        // Define indexes spanning multiple columns here.
        indexes = {
                @Index(value = "name DESC", unique = true)
        },

        // DAO是否应该创建数据库表的标志(默认为true)
        // 如果你有多对一的表,将这个字段设置为false
        // 或者你已经在GreenDAO之外创建了表,也将其置为false
        createInDb = false
)
public class User {
  ...
}
  1. 实体@Entity注解
  1. 基础属性注解
  1. 索引注解
  1. 关系注解

五、编译项目

编译项目,User实体类会自动编译,生成get、set方法并且会在设置的目录下生成三个文件DaoMaster、DaoSession、UserDao。

六、编写帮助类

public class GreenDaoManager {
    private static GreenDaoManager mInstance;
    private static DaoSession daoSession;
    private static DaoMaster daoMaster;
    private static SQLiteDatabase db;

    private GreenDaoManager(Context context) {
        //通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper
        //注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context, "contacts-db",null);
        //注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
        db = devOpenHelper.getWritableDatabase();

        daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    }

    public static GreenDaoManager getmInstance(Context context){
        if (mInstance == null){
            synchronized (GreenDaoManager.class){
                if (mInstance == null){
                    mInstance = new GreenDaoManager(context);
                }
            }
        }
        return mInstance;
    }
    public DaoSession getDaoSession(){
        return  daoSession;
    }
    public DaoMaster getDaoMaster(){
        return daoMaster;
    }
    public static SQLiteDatabase getDb() {
        return db;
    }
}

七、GreenDao基本操作

  1. 获取UserDao对象
mUserDao = GreenDaoManager.getmInstance(this).getDaoSession().getUserDao();
User mUser = new User((long)1,"张三");
mUserDao.save(mUser);//添加一个User
User mUser = new User((long)1,"张三");
mUserDao.insert(mUser);//保存一个User
List<User> users = (List<User>) mUserDao.queryBuilder().where(UserDao.Properties.Id.le(10)).build().list();  
        for (User user : users) {  
            mUserDao.delete(user);  
        }  
User user = mUserDao.queryBuilder().where(UserDao.Properties.Id.eq(16)).build().unique();  
        if (user == null) {  
            Toast.makeText(MainActivity.this, "用户不存在", Toast.LENGTH_SHORT).show();  
        }else{  
            mUserDao.deleteByKey(user.getId());  
        }  
mUserDao.deleteByKey(id);
mUserDao.deleteAll();
mUser = new User((long)2,"anye0803");
mUserDao.update(mUser);
List<User> users = mUserDao.loadAll();    
User user = mUserDao.queryBuilder().where(UserDao.Properties.name.eq("张三")).unique();

八、升级GreenDao数据库

数据库的升级其实就两个步骤

  1. 修改gradle文件
//改为最新的版本号
schemaVersion 2
  1. 修改实体类
@Entity  
public class User {  
    @Property  
    private int age;  
    @Property  
    private String password;  
    @Id  
    private Long id;  
    @Property(nameInDb = "USERNAME")  
    private String username;  
    @Property(nameInDb = "NICKNAME")  
    private String nickname;  
}

九、遇到的问题

报错.png 配置Gradle.png

十、刚刚接触,记录下来,与君共勉。欢迎大家关注我的微信公众号。

二维码.jpg
上一篇 下一篇

猜你喜欢

热点阅读