android数据库存储-GreenDao

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hualele/article/details/79525496

官网:http://greenrobot.org/greendao/features//

代码:https://github.com/greenrobot/greenDAO

简介:greenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。

GreenDao 优点:

  • 性能高,号称Android最快的关系型数据库

  • 内存占用小
  • 简洁易用的API
  • 库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制

  • 支持数据库加密  greendao支持SQLCipher进行数据库加密

使用方法:

s1.项目的build.gradle文件追加:

classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'

s2.程序的build.gradle文件做如下修改:

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'

android {
    compileSdkVersion 25
    buildToolsVersion "27.0.3"
    defaultConfig {
        applicationId "com.example.hufhu.act1"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'

    compile 'org.greenrobot:greendao:3.2.2' // add library
    compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v1.4.0'//数据库升级辅助
}

greendao {
    schemaVersion 1//<--数据库的版本,用于升级时候进行更改
    daoPackage 'com.ccl.greendao.gen'//这个是生成DAOs、DaoMaster、DaoSession代码保存的包名,默认为entities所在包名
    targetGenDir 'src/main/java'//生成DAOs、DaoMaster、DaoSession的目录。默认为build/generated/source/greendao
}

s3.编写entity

@Entity
public class User {
    @Id(autoincrement = true)
    private Long id;
    private String name;
    private int age;
    private int sex;
}

属性的相对应的get、set方法会自动生成

s4.GreenDaoManager.java

package com.ccl.greendao.db;

import com.ccl.greendao.gen.DaoMaster;
import com.ccl.greendao.gen.DaoSession;

/**
 * Created by hufhu on 2018/3/12.
 */

public class GreenDaoManager {
    // 数据库
    private static final String DB_NAME = "greendaodb";
    private static GreenDaoManager greenDaoManager;
    private static DaoSession daoSession;

    public static GreenDaoManager getInstance(){
        if(null == greenDaoManager){
            synchronized (GreenDaoManager.class){
                if(null == greenDaoManager){
                    greenDaoManager = new GreenDaoManager();
                }
            }
        }
        return greenDaoManager;
    }

    public GreenDaoManager(){
        DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(GreenApplication.getContext(),DB_NAME,null);
        DaoMaster daoMaster = new DaoMaster(openHelper.getWritableDatabase());
        daoSession = daoMaster.newSession();
    }

    public static DaoSession getDaoSession(){
        return daoSession;
    }

}

GreenApplication.java

public class GreenApplication extends Application {
    private static Context context;
    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();

        // 单例初期化 设置数据库
        GreenDaoManager.getInstance();
    }

    public static Context getContext() {
        return context;
    }
}

将GreenApplication配置在AndroidManifest.xml文件中<application android:name=".GreenApplication">

s5.GreenDao的增删改查操作

 /**
     * greenDao 的增删改查
     * @param view
     */
    public void greenDaoAdd(View view) {
        Log.i("add","greenadd");
        UserDao userDao = GreenDaoManager.getDaoSession().getUserDao();
        User user = new User();
        user.setName("name2");
        user.setAge(12);
        user.setSex(0);
        userDao.insert(user);
    }


    public void greenDaoDel(View view) {
    }


    public void greenDaoUpd(View view) {
        UserDao userDao = GreenDaoManager.getDaoSession().getUserDao();
        User user = userDao.queryBuilder().where(UserDao.Properties.Name.eq("name2")).unique();
        Log.i("user:", user.getId() + ";" + user.getName() + ";" + user.getAge() + ";" + user.getSex());
        user.setAge(2);
        user.setSex(1);
        userDao.update(user);
        Log.i("user:", user.getId() + ";" + user.getName() + ";" + user.getAge() + ";" + user.getSex());
    }


    public void greenDaoQuery(View view) {
        UserDao userDao = GreenDaoManager.getDaoSession().getUserDao();
		//方法一
        List<User> userList = userDao.loadAll(); 
        //方法二  
        //List<User> userList = userDao.queryBuilder().list();  
        //方法三 惰性加载  
        //List<User> userList = userDao.queryBuilder().listLazy();  
        Log.i("log", "***********start");
        for (User user : userList) {
            Log.i("user:", user.getId() + ";" + user.getName() + ";" + user.getAge() + ";" + user.getSex());
        }
        Log.i("log", "***********start");
    }

注解:

(1)@Entity 实体标识
     @nameInDb 在数据库中的名字,如不写则为实体中类名
     @indexes 索引
     @createInDb 是否创建表,默认为true,false时不创建
     @schema 指定架构名称为实体
     @active 无论是更新生成都刷新
(2)@Id 每条数据对应的位置,必写项
(3)@Property(nameInDb = "") 表示该属性将作为表的一个字段,其中nameInDb属性值是在数据库中对应的字段名称,可以自定义字段名,例如可以定一个跟实体对象字段不一样的字段名
(4)@NotNull 不为null
(5)@Unique 唯一约束   该属性值必须在数据库中是唯一值
(6)@ToMany 一对多
(7)@OrderBy 排序
(8)@ToOne 一对一 关系表
(9)@Transient 不保存于数据库
(10)@generated 由greendao产生的构造函数或方法


猜你喜欢

转载自blog.csdn.net/hualele/article/details/79525496