Android数据库——GreenDao使用

背景

通过Android数据库——SQLite 可以看出尽管Android已经为我们提供了sqlite数据库内核,但我们要想操作数据库还需要自己拼sql,在大量的增删改查中拼sql这种操作显然是大大降低了我们的工作效率,因此Android的 orm(Object/Relational Mapping) 框架应运而生。大概在15、16年前后出现了大量的这种框架,而选择greendao的伙伴们大概都是因下面这张图:在这里插入图片描述
那时候还是greendao2.0的时代,aop 还没那么普遍(额,现在不用aop都不敢称为框架了),greendao的集成方式相对其他框架而言算是比较复杂的。但为了更好的用户体验,我们伟大的Android开发工程师还是选择了它。

GreenDao 2.0集成

上面说它集成有些复杂,我们来看看是要如何集成

  1. 创建一个java项目
    为了操作方便,最好和当前的Android项目在同一个project下
  2. 在java项目中添加greendao的依赖
    compile 'de.greenrobot:greendao-generator:2.1.0'
    
  3. 在java项目的main方法中完成以下操作
    public static void main(String[] arg) {
    	// 7 为数据库版本号
    	// "com.fcat.cloud.bean" 为Android项目中bean存放目录,greendao会自动在该目录下生产bean
    	Schema schema = new Schema(7, "com.fcat.cloud.bean");
    	//dao生成的目录
    	schema.setDefaultJavaPackageDao("com.fcat.cloud.dao");
    	//添加要存放的实体类
    	Entity user = schema.addEntity("UserInfo");
    	//该实体存放的表的名称
    	user.setTableName("userTable");
    	//表中的字段(类的属性)
    	user.addStringProperty("nickName");
    	user.addIntProperty("sex");
    	user.addStringProperty("birthday");
    	//添加userName,并将其设置为主键
    	user.addStringProperty("userName").primaryKey();
    	// /aaa/bbb 为Android项目所在目录
    	new DaoGenerator().generateAll(schema, '/aaa/bbb'); 
    }
    
    执行该main方法,则会在Android项目的com.fcat.cloud.bean的目录下生成UserInfo类,里面包含了上面生成的字段及字段的get、set方法。在com.fcat.cloud.dao下面生成DaoMasterDaoSessionUserInfoDao三个类,如果这些代码都成功生成,说明集成成功。

GreenDao 3.0集成

从上面我们了解到要使用GreenDao2.0需要创建个java项目,而这个java项目的工作就是自动生成代码。早期很多orm框架都是用注解+反射来实现这个步骤的,而反射的性能是比较低的。GreenDao的java项目正是解决了这个低效问题,但作为开发者来说,我们并不想维护这个java项目,而GreenDao 3.0中使用aop技术帮我们解决了这个问题。

  1. 在项目中添加GreenDao 3.0的依赖
    implementation 'org.greenrobot:greendao:3.1.0'
    implementation 'org.greenrobot:greendao-generator:3.1.0'
    
  2. 在gradle中配置版本信息
    在project的gradle中添加
    classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
    
    在app的gradle中添加
    apply plugin: 'org.greenrobot.greendao'
    greendao {
        // 数据库schema版本号
        schemaVersion 3
        // 生成的dao的包名
        daoPackage 'com.fcat.cloud.dao'
        // 生成的dao的存放路径
        targetGenDir 'src/main/java'
    }
    
  3. 编辑要存入数据库的类
    // GreenDao会根据@Entity注解来生成对应的数据表,表名默认为类名,可以使用nameInDb进行更改
    @Entity(nameInDb = "userTable")
    public class UserInfo{
    	public String userName;
    	public String nickName;
    	public int sex;
    	public String birthday;
    }
    
    OK,这样就可以了。GreenDao 3.0 的集成跟其他orm的框架还是很相似的。

GreenDao使用

GreenDao在使用上2.0和3.0还是保持一致的。数据的增删改查都是通过dao来执行,dao则是通过daoSession来获取,整体调用链是:

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "cloud", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
UserInfoDao userinfoDao = daoSession.getUserInfoDao()

拿到dao之后,我们就可以直接调用里面的insert、update、delete等方法。

GreenDao前景

关于greendao的前景,我并不看好,就目前而言,greendao还不支持kotlin,而且谷歌的 jetpack 也包含了数据库操作的组件 Room,同时文档中还提供了数据库迁移的解决方案。

发布了37 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/github_34790294/article/details/103901232
今日推荐