Android 之 Greendao 简易快速上手

GreenDao

 

简介

greenDAO是一个开源的Android ORM,使SQLite数据库的开发再次变得有趣。 它减轻了开发人员处理底层的数据库需求,同时节省开发时间。 SQLite是一个很不错的关系型数据库。 尽管如此,编写SQL和解析查询结果仍然是相当乏味和耗时的任务。 greenDAO通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”)来解决这些问题。 这样,您可以使用简单的面向对象的API来存储,更新,删除和查询Java对象。

 

ORM原理介绍

    ORM实际上是,对象关系模型的程序方法,用于实现面向对象编程语言不通类型系统的数据之间的转换,也就是说,我们不需要要在java层关系关系数据库的具体实现,也不需要在关系数据库层,关心java对象的使用,从而提高编程的效率。

 

Dao(Data Access object)

是一个数据访问接口。

数据访问:顾名思义就是与数据库打交道,夹在业务逻辑与数据库资源中间。

 

诱人特性

  • 最高性能
  • 涵盖关系和连接且易用的强大API
  • 最小的内存开销
  • 迷你开源库
  • 数据库加密
  • 强大的社区

 

使用

( 注意以下使用皆为个人案例 )

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

1、配置

(1)在 Project 下的 build.grade下配置

buildscript {
    repositories {
        maven {
            url 'https://maven.google.com'
        }
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

(2)在 Moudle 下的 build.grade下配置

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
    compile 'org.greenrobot:greendao:3.2.0'
}

 

2、完成 Bean 类(user)

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

 对Bean中的对象进行解释

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

Moudle 下的 Build.gradle 配置文件信息

greendao{
    schemaVersion 1 // 数据库版本号
    daoPackage 'com.example.jie.tengxuntui.gen'//自动生成的dao的包名,包名默认是entity所在的包;
    targetGenDir 'src/main/java'//生成数据库文件的目录
}

 

3、生成配置文件

方法 : “Make Project” 或 按下  CRTL+f9

Android 之 Greendao 简易快速上手_第1张图片

 生成 DaoMaster DaoSession UserDao 文件

  • DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表

  • DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API

  • UserDao :Dao对象

 

4、Gao的 API

 

  • 增加单个数据 

    • getShopDao().insert(shop);

    • getShopDao().insertOrReplace(shop);

  • 增加多个数据 

    • getShopDao().insertInTx(shopList);

    • getShopDao().insertOrReplaceInTx(shopList);

  • 查询全部 

    • List< Shop> list = getShopDao().loadAll();

    • List< Shop> list = getShopDao().queryBuilder().list();

  • 查询附加单个条件 

    • .where()

    • .whereOr()

  • 查询附加多个条件 

    • .where(, , ,)

    • .whereOr(, , ,)

  • 查询附加排序 

    • .orderDesc()

    • .orderAsc()

  • 查询限制当页个数 

    • .limit()

  • 查询总个数 

    • .count()

  • 修改单个数据 

    • getShopDao().update(shop);

  • 修改多个数据 

    • getShopDao().updateInTx(shopList);

  • 删除单个数据 

    • getTABUserDao().delete(user);

  • 删除多个数据 

    • getUserDao().deleteInTx(userList);

  • 删除数据ByKey 

    • getTABUserDao().deleteByKey();

 

5、开始操作数据库

以下demo展示

Android 之 Greendao 简易快速上手_第2张图片

(个人封装的工具类)

package com.example.jie.tengxuntui.utils;

import android.content.Context;

import com.example.jie.tengxuntui.Enity.User;
import com.example.jie.tengxuntui.gen.DaoMaster;
import com.example.jie.tengxuntui.gen.DaoSession;
import com.example.jie.tengxuntui.gen.UserDao;

import java.util.List;

/**
 * Created by jie on 2018/8/21.
 */

public class DBManager {
    private Context mContext;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    private UserDao userDao;

    private DBManager(Context context) {
        mContext = context;
    }

    private static volatile DBManager instance = null;
    public static DBManager getInstance(Context context){
        if (instance==null){
            synchronized (DBManager.class){
                if (instance==null){
                    instance = new DBManager(context);
                }
            }
        }
        return instance;
    }

    public void init() {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(mContext, "user.db");
        mDaoMaster = new DaoMaster(helper.getWritableDb());
        mDaoSession = mDaoMaster.newSession();
        userDao = mDaoSession.getUserDao();
    }

    public void insertTopicMo(User user) {
        userDao.insertOrReplace(user);
    }

    public void insertTopicMo(List user) {
        userDao.insertOrReplaceInTx(user);
    }
    //单个删除
    public void deleteTopicMo(User user) {
        userDao.delete(user);
    }
    //删除所有
    public void deleteTopicMo() {
        userDao.deleteAll();
    }
    //更新
    public void updateTopicMo(User user) {
        userDao.update(user);
    }
    //查询所有
    public List queryAllTopicMo() {
        return userDao.queryBuilder().build().list();
    }
    //where查询
    public List query(String name) {
        return userDao.queryBuilder().where(UserDao.Properties.Name.eq(name)).list();
    }
    //between
    public List queryarrang(int a,int b) {
        return userDao.queryBuilder().where(UserDao.Properties.Id.between(a,b)).list();
    }
}

 

    public void onClick(View v) {
        switch (v.getId()){
            case R.id.insert:
                User user = new User("杰","21");
                User use1r = new User("杰","22");
                ArrayList users1 = new ArrayList<>();
                users1.add(user);
                users1.add(use1r);

//                instance.insertTopicMo(user);
                instance.insertTopicMo(users1);
                lists.addAll(users1);
                adapter.notifyDataSetChanged();
                break;
            case R.id.revise:
                User user1 = new User(Long.valueOf(2),"喜","20");
                instance.updateTopicMo(user1);
                lists.clear();
                List users = instance.queryAllTopicMo();
                for (User user2 : users) {
                    lists.add(user2);
                }
                adapter.notifyDataSetChanged();
                break;
            case R.id.delete:
//                User user3 = new User(Long.valueOf(2),"喜","20");
//                instance.deleteTopicMo(user3);
//                lists.remove(user3);
                instance.deleteTopicMo();
                lists.clear();
                adapter.notifyDataSetChanged();
                break;
            case R.id.query:
                lists.clear();
//                List yao = instance.query("喜");
                List yao = instance.queryarrang(1,5);
                for (User user2 : yao) {
                    lists.add(user2);
                }
                adapter.notifyDataSetChanged();
                break;
            default:
                break;
        }
    }

 

6、GreenDao的表关系操作

一对一 ,一对多 ,多对多

推荐文章  https://blog.csdn.net/RobotHost/article/details/70098744#21-%E6%B3%A8%E8%A7%A3

 

Thanks

 

你可能感兴趣的:(Android)