Android greenDAO 3.2.2简单使用

简介: Android greenDAO 3.2.2简单使用

集成

// In your root build.gradle file:
buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    }
}
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
    implementation 'org.greenrobot:greendao:3.2.2' // add library
}
greendao {
    //数据库版本号
    schemaVersion 1
    //设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的路径。
    daoPackage 'com.yechaoa.test.dao'
    //设置DaoMaster、DaoSession、Dao目录
    targetGenDir 'src/main/java'
}

常用注解

@Id(autoincrement = true) 主键自增长

@NotNull 不为空

@OrderBy(asc desc) 排序

@Transient 短暂的,不会持久化,表示实体类中普通的字段

@Property 参数 字段

@Unique 唯一约束

@ToOne 一对一,定义到另一个实体对象的关系,应在持有目标实体对象的字段上使用该注解

@ToMany 一对多,使用@ToMany的属性代表目标实体的List,集合里的对象都必须至少有一个属性指向拥有@ToMany的实体

@JoinEntity 多对多,如果两个实体是多对多的关系,那么需要第三张表(表示两个实体关系的表)

常用的SQL语句条件关键词

eq():==

noteq():!=

orderAsc:升序排序

orderDesc: 降序排序

gt(): >

t():<

ge:>=

le:<=

like():包含

between:俩者之间

in:在某个值内

notIn:不在某个值内

limit(int): 限制查询的数量

list() 返回一个集合

listLazy() 懒查询

新建一个实体类

@Entity
public class OrderDB {
    @Id(autoincrement = true)
    private Long id;
  @NotNull
    private Integer price;
    private String name;
    private String num;
  ....
}

然后编译会在自定义的文件夹包名(比如上面的‘com.yechaoa.test.dao’)下生成3个文件:


DaoMaster

DaoSession

OrderDBDao

bean也会生成set get方法。


编写OrderDaoManager类

单例保证唯一性,统一入口


/**
 * Created by yechaoa on 2018/10/29.
 * Describe :
 */
public class OrderDaoManager {
    private static final String DB_NAME = "order_db";
    private Context context;
    @SuppressLint("StaticFieldLeak")
    private volatile static OrderDaoManager manager = new OrderDaoManager();
    private static DaoMaster sDaoMaster;
    @SuppressLint("StaticFieldLeak")
    private static DaoMaster.DevOpenHelper sHelper;
    private static DaoSession sDaoSession;
    /**
     * 单例模式获得操作数据库对象
     */
    public static OrderDaoManager getInstance() {
        return manager;
    }
    public void init(Context context) {
        this.context = context;
    }
    /**
     * 判断是否有存在数据库,如果没有则创建
     */
    private DaoMaster getDaoMaster() {
        if (sDaoMaster == null) {
            DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
            sDaoMaster = new DaoMaster(helper.getWritableDatabase());
        }
        return sDaoMaster;
    }
    /**
     * 完成对数据库的添加、删除、修改、查询操作
     */
    public DaoSession getDaoSession() {
        if (sDaoSession == null) {
            if (sDaoMaster == null) {
                sDaoMaster = getDaoMaster();
            }
            sDaoSession = sDaoMaster.newSession();
        }
        return sDaoSession;
    }
    /**
     * 关闭所有的操作,数据库开启后,使用完毕要关闭
     */
    public void closeConnection() {
        closeHelper();
        closeDaoSession();
    }
    private void closeHelper() {
        if (sHelper != null) {
            sHelper.close();
            sHelper = null;
        }
    }
    private void closeDaoSession() {
        if (sDaoSession != null) {
            sDaoSession.clear();
            sDaoSession = null;
        }
    }
}

编写OrderDBHelper类,处理增删改查

/**
 * Created by yechao on 2018/10/29.
 * Describe :
 */
public class OrderDBHelper {
    private OrderDaoManager mManager;
    public OrderDBHelper(Context context) {
        mManager = OrderDaoManager.getInstance();
        mManager.init(context);
    }
    /**
     * 插入单条数据,如果表未创建,先创建OrderDB表
     */
    public boolean insertOrderDB(OrderDB o) {
        boolean flag;
        flag = mManager.getDaoSession().getOrderDBDao().insert(o) != -1;
        return flag;
    }
    /**
     * 插入多条数据,在子线程操作
     */
    public boolean insertMultiOrderDB(final List<OrderDB> oList) {
        boolean flag = false;
        try {
            mManager.getDaoSession().runInTx(new Runnable() {
                @Override
                public void run() {
                    for (OrderDB o : oList) {
                        mManager.getDaoSession().insertOrReplace(o);
                    }
                }
            });
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    /**
     * 修改一条数据
     */
    public boolean updateOrderDB(OrderDB o) {
        boolean flag = false;
        try {
            mManager.getDaoSession().update(o);
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    /**
     * 删除单条记录
     */
    public boolean deleteOrderDB(OrderDB o) {
        boolean flag = false;
        try {
            mManager.getDaoSession().delete(o);
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    /**
     * 删除所有记录
     */
    public boolean deleteAll() {
        boolean flag = false;
        try {
            mManager.getDaoSession().deleteAll(OrderDB.class);
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    /**
     * 查询所有记录
     */
    public List<OrderDB> queryAllOrderDB() {
        return mManager.getDaoSession().loadAll(OrderDB.class);
    }
    /**
     * 根据主键id查询记录
     */
    public OrderDB queryOrderDBById(long key) {
        return mManager.getDaoSession().load(OrderDB.class, key);
    }
    /**
     * 使用native sql进行查询操作
     */
    public List<OrderDB> queryOrderDBByNativeSql(String sql, String[] conditions) {
        return mManager.getDaoSession().queryRaw(OrderDB.class, sql, conditions);
    }
    /**
     * 使用queryBuilder进行查询
     */
    public List<OrderDB> queryOrderDBByQueryBuilder(long id) {
        QueryBuilder<OrderDB> queryBuilder = mManager.getDaoSession().queryBuilder(OrderDB.class);
        return queryBuilder.where(OrderDBDao.Properties.Id.eq(id)).list();
    }
    /**
     * orderAsc:升序排序  orderDesc: 降序排序
     */
    public List<OrderDB> queryOrderDBByQueryBuilder2(Integer price, String name) {
        QueryBuilder<OrderDB> queryBuilder = mManager.getDaoSession().queryBuilder(OrderDB.class);
        return queryBuilder
                .where(OrderDBDao.Properties.Price.eq(price),
                        OrderDBDao.Properties.Name.eq(name))
                .orderAsc(OrderDBDao.Properties.StatusId)
                .list();
    }
    /**
     * 模糊查找 关键词需要前后加上%
     */
    public List<OrderDB> queryOrderDBByQueryBuilderSearch(String key) {
        QueryBuilder<OrderDB> queryBuilder = mManager.getDaoSession().queryBuilder(OrderDB.class);
        return queryBuilder
                .where(OrderDBDao.Properties.Name.like("%" + key + "%"))
                .orderAsc(OrderDBDao.Properties.StatusId)
                .list();
    }
}

使用

先初始化help对象

mOrderDBHelper = new OrderDBHelper(PickActivity.this);

插入多条

mOrderDBS = new ArrayList<>();
  mOrderDBHelper = new OrderDBHelper(this);
  for (int i = 0; i < mList.size(); i++) {
     mOrderDBS.add(new OrderDB(null,  mDate,mList.get(i).price,,  mDate,mList.get(i).name, i, ...));
  }
  mOrderDBHelper.insertMultiOrderDB(mOrderDBS);

查询单条

Long id = mOrderDBS.get(pos).getId();
  OrderDB orderDB1 = mOrderDBHelper.queryOrderDBById(id);

根据条件查询

mOrderDBS = (ArrayList<OrderDB>) mOrderDBHelper.queryOrderDBByQueryBuilder2(mPrice, mName);

更新单条

Long id = mOrderDBS.get(pos).getId();
  OrderDB orderDB1 = mOrderDBHelper.queryOrderDBById(id);
  orderDB1.setName("测试");
  mOrderDBHelper.updateOrderDB(orderDB

模糊查找

mOrderDBS = (ArrayList<OrderDB>) mOrderDBHelper.queryOrderDBByQueryBuilderSearch(searchTe

删除所有

mOrderDBHelper.deleteAll();

其他的使用起来大同小异,根据自己的业务添加


记得释放资源


@Override
  protected void onDestroy() {
      super.onDestroy();
      //关闭资源
      OrderDaoManager.getInstance().closeConnection();
  }

数据库升级

修改版本号,即schemaVersion 1

修改实体类

然后编译即可。


特殊情况

自定义DBHelper,继承DaoMaster.OpenHelper


public class DBHelper extends DaoMaster.OpenHelper {  
      public static final String DBNAME = "lenve.db";  
      public DBHelper(Context context) {  
          super(context, DBNAME, null);  
      }  
      @Override  
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
          super.onUpgrade(db, oldVersion, newVersion);  
      }  
  }

在onUpgrade方法中处理


然后数据库的初始化也需要重新处理


DBHelper devOpenHelper = new DBHelper(this);  
  DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());  
  DaoSession daoSession = daoMaster.newSession();  
  userDao = daoSession.getUserDao();

目录
相关文章
|
6月前
|
SQL 缓存 安全
Android ORM 框架之 greenDAO
Android ORM 框架之 greenDAO
317 0
|
6月前
|
数据库 Android开发
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
|
6月前
|
Java API 数据库
Android greenDao
Android greenDao
49 2
|
数据库 Android开发
android 多级下拉菜单实现教程 greendao使用
android 多级下拉菜单实现教程 greendao使用
243 0
android 多级下拉菜单实现教程 greendao使用
|
存储 缓存 JSON
RxCache 整合 Android 的持久层框架 greenDAO、Room
RxCache 整合 Android 的持久层框架 greenDAO、Room
270 0
RxCache 整合 Android 的持久层框架 greenDAO、Room
|
API 数据库 Android开发
Android GreenDao的基本使用
Android GreenDao的基本使用
475 0
Android  GreenDao的基本使用
|
缓存 Java 数据库
Android之greenDao使用
Android之greenDao使用文章大纲一、greenDao简介二、greenDao实战三、项目源码下载四、参考文章 一、greenDao简介 什么是greenDao  GreenDAO是一个开源的Android ORM(“对象/关系映射”),通过ORM(称为“对象/关系映射”),在我们数据库开发过程中节省了开发时间。
3741 0
|
API 数据库 Android开发
Android--数据库GreenDao使用
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/80228390 一、简介 greenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。
1376 0
|
SQL Java 数据库
Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包 但是对于我个人来说,我可能更加倾向于用GreenDao,所以今天也为.
1448 0