Android数据库——GreenDAO3.2.2的使用

来源:互联网 发布:算量软件有哪些 编辑:程序博客网 时间:2024/06/06 07:10

废话不多说,今天我们来学习:开源的Android数据库ORM框架——greenDAO。


GreenDao介绍

greenDAO是Android的一个对象/关系映射(ORM)工具。它为关系数据库SQLite提供面向对象的界面。

greenDao

了解更多,详见官网:http://greenrobot.org/greendao
github地址:https://github.com/greenrobot/greenDAO


GreenDao优点

  • 性能最大化(Android平台最快的ORM框架)
  • 简洁直观的API
  • 支持SQLCipher加密数据库
  • 依赖体积小
  • 内存开销最小化
  • 对Android进行高度优化

GreenDao的使用

在Android Studio项目 build.gradle(Project:项目名称)文件中引入:

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

在 build.gradle(Module.app)文件中引入:

apply plugin: 'com.android.application'apply plugin: 'org.greenrobot.greendao' // apply plugin...//greendao配置greendao {    schemaVersion 1  //数据库版本号    daoPackage 'app.hjw.com.greendao.gen' //生成Dao,DaoMaster和DaoSession的包名(默认实体的包名)    targetGenDir 'src/main/java' //自定义生成源文件的路径}dependencies {    ...    compile 'org.greenrobot:greendao:3.2.2' // add library}

编写代码示例

创建User实体类中的代码

@Entitypublic class User {    @Id(autoincrement = true)    private Long id;    @NotNull    private String name;    @NotNull    private int age;    @Transient    private int tempUsageCount;    ...}

MakeProject

编译项目,自动编译User实体类,并在User类中生成get、set方法以及在app.hjw.com.greendao.gen目录下生成三个文件,如下:

gen

编写Application中的代码

public class MyApplication extends Application {    private DaoMaster.DevOpenHelper mHelper;    private SQLiteDatabase db;    private DaoMaster mDaoMaster;    private DaoSession mDaoSession;    public static MyApplication instances;    public static MyApplication getInstances() {        return instances;    }    @Override    public void onCreate() {        super.onCreate();        instances = this;        setDataBase();    }    private void setDataBase() {        mHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null);        //通过DaoMaster.DevOpenHelper得到SQLiteOpenHelper对象        db = mHelper.getWritableDatabase();        //该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。        mDaoMaster = new DaoMaster(db);        mDaoSession = mDaoMaster.newSession();    }    public DaoSession getmDaoSession() {        return mDaoSession;    }    public SQLiteDatabase getDb() {        return db;    }}

最后不要忘记在我们的AndroidManifest.xml中指定MyApplication。

在MainAcitivity中onCreate获取Dao对象

 daoSession = MyApplication.getInstances().getmDaoSession(); userDao = daoSession.getUserDao();

Insert

 private void insertData() {        User user = new User();        try {            user.setName("hjw");            user.setAge(23);            userDao.insert(user);            Log.d(TAG, "insertData: " + user.getId());        } catch (Exception e) {            e.printStackTrace();        }    }

当我们点击Insert按钮,观察日志如下:

insert

Delete

根据条件删除数据:

private void deleteData(long id) {        List<User> userList = null;        try {            userList = (List<User>) userDao.queryBuilder().where(UserDao.Properties.Id.le(id)).build().list();            for (User user : userList) {                userDao.delete(user);            }        } catch (Exception e) {            e.printStackTrace();        }    }

当我们点击Delete按钮,就可以根据Id删除想要删除的数据。

首先我们通过where查询条件,这里id传入的小于等于id的数据,where可以有多个参数(多个查询条件),最后list()表示查询结果是一个List集合。(unique表示查询一条数据)。

根据主键删除:

 private void deleteDataById(long id){        userDao.deleteByKey(id);    }

删除所有的数据:

 private void deleteDataAll() {        userDao.deleteAll();    }

Update

根据Id修改数据:

  private void updateData(long id) {        try {            User user = new User(id,"hxn",18);            userDao.update(user);            Log.d(TAG, "updateData: " + user.getName());        } catch (Exception e) {            Log.d(TAG, "updateData failed" + e.getMessage());        }    }

当我们点击Update按钮,观察日志如下:

update

Query

查询全部数据:

private void queryAll() {        try {            List<User> users = userDao.loadAll();            for (User u : users) {                Log.d(TAG, "queryAll: "                        + "  id:" + u.getId()                        + "  name" + u.getName()                        + "  age" + u.getAge());            }        } catch (Exception e) {            e.printStackTrace();        }    }

当我们点击Query按钮时,观察打印日志如下:

queryAll

查询单个数据:

private void queryByName() {        User hjw = userDao.queryBuilder().where(UserDao.Properties.Name.eq("hjw")).unique();        Log.d(TAG, "queryByName: " + "  name" + hjw.getName() + "  age" + hjw.getAge() + "  id" + hjw.getId());    }

数据库升级

升级数据库分为两个步骤:

  • 修改gradle
    首先module中的gradle文件中修改数据库的版本号:
schemaVersion 2  //最新版本号
  • 修改实体类(比如增加或删除字段)

最后我们MakeProject编译项目即可。一般的数据库升级这样就可以了,特殊情况可能需要自己编写数据库迁移脚本。


注解

实体@Entity注解

schema:告知GreenDao当前实体属于哪个schemaactive:标记一个实体处于活动状态,活动实体有更新、删除和刷新方法nameInDb:在数据中使用的别名,默认使用的是实体的类名indexes:定义索引,可以跨越多个列createInDb:标记创建数据库表

基础属性注解

@Id :主键 Long型,通过@Id(autoincrement = true)设置自增长@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb="name")@NotNul:设置数据库表当前列不能为空@Transient :添加次标记之后不会生成数据库表的列

索引注解

@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束@Unique:向数据库列添加了一个唯一的约束

关系注解

@ToOne:定义与另一个实体(一个实体对象)的关系@ToMany:定义与多个实体对象的关系

总结

本教程主要总结了GreenDao基本语法和配置,欢迎童鞋们学习。
最后附上源代码地址:https://github.com/HjwJack/GreenDao

阅读全文
0 0
原创粉丝点击