GreenDao3.0的简单使用

首先配置grendao

1、导入相应的包

[java]  view plain  copy
  1. compile'org.greenrobot:greendao:3.0.1'  
  2. compile'org.greenrobot:greendao-generator:3.0.0'  

2、配置项目的Gradle

    1.  dependencies {  
    2.         classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'  
    3.     }

3、配置app的Gradle

[java]  view plain  copy
  1. apply plugin: 'org.greenrobot.greendao'  
  2.   //android里添加下面代码
  3. greendao {  
  4.     schemaVersion 1  
  5.     daoPackage 'com.example.anonymous.greendao.gen'  //一般为app包名+生成文件的文件夹名
  6.     targetGenDir 'src/main/java'  //生成文件路径
  7. // schemaVersion   指定数据库schema版本号,迁移等操作会用到
    // daoPackage   通过gradle插件生成的数据库相关文件,这里我设置的文件路径是com.example.anonymous.greendao
    // targetGenDir  这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的java目录中,而不  // 是build中,这样就不用额外的设置资源目录了

3.编写实体类(对应的是数据库的每张表)
[java]  view plain  copy
  1. @Entity  
  2. public class User {  
  3.     @Id  
  4.     private Long id;  
  5.     private String name;  
  6. }  
@Entity:将我们的java普通类变为一个能够被greenDAO识别的数据库类型的实体类
@Id:通过这个注解标记的字段必须是Long类型的,这个字段在数据库中表示它就是主键,并且它默认就是自增的

就这么简单含有两个字段的实体类

然后点击这个按钮

builder完之后会有两个地方发生了变化



这是GreenDao自动为你生成的,路径就是你在gradle中配置的路径

现在只有一个User表,如果再添加一个Age实体类,你在点击Make Project按钮,他还会把AgeDao自动生成出来

在增、删、改、查之前第一步做的就是需要对数据库进行初始化,不可能就这样直接对实体类操作,这样不太现实的,否则为什么GreenDao会自动生成这么多代码呢?

[java]  view plain  copy
  1. DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MyApplication.getContext(), "my-db");    
  2. DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());    
  3. DaoSession daoSession = daoMaster.newSession();    
  4. UserDao userDao = daoSession.getUserDao();    
my-db是数据库的名字,自己随便写就行。

通过GreenDao生成的代码,我们可以获取到实体类的实例,也就是数据库表的实例,这样我们才能操作数据库

4、增、删、改、查

1、增加

[java]  view plain  copy
  1. User user1 = new User(,"zhangsan");  
  2. userDao.insert(user1); 

2、删除

[java]  view plain  copy
  1. User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq("zhangsan")).build().unique();    
  2. if(findUser != null){    
  3.     userDao.deleteByKey(findUser.getId());    

3、修改

[java]  view plain  copy
  1. User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq("zhangsan")).build().unique();    
  2. if(findUser != null) {    
  3.     findUser.setName("lisi");    
  4.     userDao.update(findUser);    
  5.     Toast.makeText(MyApplication.getContext(), "修改成功", Toast.LENGTH_SHORT).show();    
  6. else {    
  7.     Toast.makeText(MyApplication.getContext(), "用户不存在", Toast.LENGTH_SHORT).show();    
把zhangsan改成lisi

4、查询

[java]  view plain  copy
  1. List<User> userList = userDao.queryBuilder()    
  2.        .where(UserDao.Properties.Id.notEq(1))   
  3.        .limit(5)    
  4.        .build().list();

查询语句是数据库操作最多的,语句也比较复杂,具体的语句请去看官网

简单封装

其实这样写代码,作为程序员并不能满足,最起码的重用还是需要的,所以简单的封装一下吧

我们需要添加几个类来负责代码的重用工作,先看一下整体的工程结构:


1、MyApplication:返回Context对象

2、DaoManager:初始化数据库,获取相应的操作对象

3、EntityManager:对数据库表的初始化,获取实体类的操作对象

[java]  view plain  copy
  1. public class MyApplication extends Application {  
  2.     private static Context mContext;  
  3.   
  4.     @Override  
  5.     public void onCreate() {  
  6.         super.onCreate();  
  7.         mContext = getApplicationContext();  
  8.     }  
  9.   
  10.     public static Context getContext() {  
  11.         return mContext;  
  12.     }  
  13. }  
[java]  view plain  copy
  1. /** 
  2.  *  greenDao管理类 
  3.  */  
  4. public class DaoManager {  
  5.     private static DaoManager mInstance;  
  6.     private DaoMaster mDaoMaster;  
  7.     private DaoSession mDaoSession;  
  8.   
  9.     private DaoManager() {  
  10.         DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MyApplication.getContext(), "my-db");  
  11.         DaoMaster mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());  
  12.         mDaoSession = mDaoMaster.newSession();  
  13.     }  
  14.   
  15.     public DaoMaster getMaster() {  
  16.         return mDaoMaster;  
  17.     }  
  18.   
  19.     public DaoSession getSession() {  
  20.         return mDaoSession;  
  21.     }  
  22.   
  23.     public static DaoManager getInstance() {  
  24.         if (mInstance == null) {  
  25.             mInstance = new DaoManager();  
  26.         }  
  27.         return mInstance;  
  28.     }  
  29. }  
[java]  view plain  copy
  1. public class EntityManager {  
  2.     private static EntityManager entityManager;  
  3.     public UserDao userDao;  
  4.   
  5.     /** 
  6.      * 创建User表实例 
  7.      * 
  8.      * @return 
  9.      */  
  10.     public UserDao getUserDao(){  
  11.         userDao = DaoManager.getInstance().getSession().getUserDao();  
  12.         return userDao;  
  13.     }  
  14.   
  15.     /** 
  16.      * 创建单例 
  17.      * 
  18.      * @return 
  19.      */  
  20.     public static EntityManager getInstance() {  
  21.         if (entityManager == null) {  
  22.             entityManager = new EntityManager();  
  23.         }  
  24.         return entityManager;  
  25.     }  
三个东西一看便知,但是这个东西怎么用呢?

[java]  view plain  copy
  1. // TODO: 2017/1/1 一句话就把相应的数据库表的实例返回,进行操作    
  2. UserDao userDao = EntityManager.getInstance().getUserDao();  
  3. User user1 = new User(,"zhangsan");  
  4. userDao.insert(user1);  


DaoManager和EntityManager主要作用是对数据库和表的初始化工作抽出来作为复用,在Activity中使用的时候,我们可以直接操作表,不需要在初始化工作了,这篇文章作为我的学习笔记,希望也能为看到的朋友提供帮助!


猜你喜欢

转载自blog.csdn.net/qq_42081816/article/details/80726351
今日推荐