有些项目中要频繁的使用数据库,我们大多数会选择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"); }
关于使用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。利用到我们的项目中,提高他们的效率吧!