使用ORM数据库框架greenDao

有些项目中要频繁的使用数据库,我们大多数会选择android自带的SQLite,因为的确非常强大,但是在执行效率上,我们选择greenDao框架似乎更合适。

ORM数据库框架有greenDao、ORMLite等。但是在效率上,greenDao更占优势,而且比自带的SQLite还要更快,具体请自行百度。所以在项目中我们当然选择效率更高的greenDao。

对greenDao的理解还不深刻,这里我们只要讲解一下greenDao的基本使用,在对一些小型项目中足够使用。当我们经常的使用学习它,在遇到大型项目的时候相信我们也能很好的解决。

1、greenDao的基本配置(参考http://www.open-open.com/lib/view/open1438065400878.html)

在项目增添加jar包   compile 'de.greenrobot:2.1.0'

在main目录新建directory,命名为java-gen

在build.gradle中声明sourceSets {

    main {

            java.srcDirs = ['src/main/java', 'scr/main/java-gen']

    }

}

新建一个java工程,即new Module,选择java library,在该工程下的build.gradle中导入jar包:compile 'de.greenrobot:greendao:2.1.0'并且在最后声明tasks.withType(JavaCompile) {

                                                                                                   options.encoding = 'UTF-8'

                                                                                            }


在java工程中建一个java类Generator,添加如下代码

public static void main(String[] args) throws Exception {
        // 正如你所见的,你创建了一个用于添加实体(Entity)的模式(Schema)对象。
        // 两个参数分别代表:数据库版本号与自动生成代码的包路径。
        Schema schema = new Schema(3, "com.baiyyyhjl.greendaoexample");
        // 当然,如果你愿意,你也可以分别指定生成的 Bean 与 DAO 类所在的目录,只要如下所示:
//      Schema schema = new Schema(1, "com.baiyyyhjl.greendaoexample.bean");
//      schema.setDefaultJavaPackageDao("com.baiyyyhjl.greendaoexample.dao");
        // 模式(Schema)同时也拥有两个默认的 flags,分别用来标示 entity 是否是 activie 以及是否使用 keep sections。
        // schema2.enableActiveEntitiesByDefault();
        // schema2.enableKeepSectionsByDefault();
        // 一旦你拥有了一个 Schema 对象后,你便可以使用它添加实体(Entities)了。
        addNote(schema);
        // 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-gen)。
        // 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。
        new DaoGenerator().generateAll(schema, "D://GreenDaoExample/app/src/main/java-gen");
    }

    private static void addNote(Schema schema) {
        // 一个实体(类)就关联到数据库中的一张表,此处表名为「Note」(既类名)
        Entity note = schema.addEntity("Note");
        // 你也可以重新给表命名,默认的表名为NOTE
        // note.setTableName("NODE");
        // 设置一个自增主键id
        note.addIdProperty();
        // 与在 Java 中使用驼峰命名法不同,默认数据库中的命名是使用大写和下划线来分割单词的。
        // For example, a property called “creationDate” will become a database column “CREATION_DATE”.
        note.addStringProperty("text").notNull();
        note.addStringProperty("comment");
        note.addDateProperty("date");
        note.addStringProperty("test");
    }

运行该工程,会自动在GreenDaoExample/app/src/main/java-gen中生成响应的工具类

关于使用greenDao前的配置基本完成了

2、greenDao的基本使用

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();
NoteDao noteDao = daoSession.getNoteDao();
此时获取到的DaoMaster、DaoSession、NoteDao用于对数据库的一系列操作

几个基本操作:增、删、改、查

增、改:noteDao.insertOrReplace(new Note());(当id重复时,新的数据会覆盖老的数据)

删:noteDao.deleteByKey(note.getId());

查:noteDao.loadAll();

需要注意:

添加操作默认为事务,所以在一次性添加多个数据时:

daoSession.runInTx(new Runnable() {

                               @Override
                               public void run() {

                                   for (int i = 0; i != 400; i++) {

                                       Note note= new Note();
                                       noteDao.insertOrReplace(new Note());
                                   }
                               }
                           }
        );

建立一对一,一对多的关系数据库。

首先看一对一的关系数据库如何添加:

例如一个人对应一个身份证号码,而User跟IDCard分别表示两个表,这时候需要在IDCard表中加一个Long类型的外键用于对应User表中的自增长的id。

<pre name="code" class="java">Property commentId = IDCard.addLongProperty("commonId").notNull().getProperty();
ToOne toId= user.addToOne(IDCard, commentId);
bigToSmall.setName("idNumber");

 
 一对多的关系数据同样 
 

Property commonId = IDCard.addLongProperty("comnonId").notNull().getProperty();
IDCard.addToOne(user, commonId)
ToMany toId= user.addToMany(IDCard, commonId);
bigToSmall.setName("idNumber");
这样会自动生成多个表,而且是根据id形成一对一、一对多的关系

在简单的添加数据

// 插入一条User数据
userDao.insert(new User());
// 设置IDCard数据,将外键id置为1,对应User表中的id
IDCard idCard = new IDCard();
idCard.setCommonId(1);
// 将此条数据插入表中
IDCardDao.insert(idCard);
// 获取id为1的所有数据
User user = userDao.load(1L);
// 获取到刚刚插入的idCard数据
IDCard newIDCard = user.getIdNumber();
整个添加数据库的方法就完成了,掌握了这些方法,就可以游刃有余的使用greenDao。利用到我们的项目中,提高他们的效率吧!

你可能感兴趣的:(android)