安卓ORM框架GreenDao的基本使用方法

安卓ORM框架GreenDao的基本使用方法

1.项目引入
2.建立数据库

1.项目引入
在build.gradle(Project)的dependencies里加入

classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin

在build.gradle(APP)上方加入

apply plugin: 'org.greenrobot.greendao' // apply plugin

在dependencies中加入

 implementation 'org.greenrobot:greendao:3.2.2' // add library
    implementation 'net.zetetic:android-database-sqlcipher:3.5.9@aar'

2.建立数据库
2.1建立实体类,我们以Goods(商品)类为例
我们只需要新建这个类,并且在类的上方加上@Entity注解即可,然后重新make_project,GreenDao就会为我们生成下方的代码

@Entity
public class GoodsModel {
    @Id(autoincrement = true)//设置id为主键,并且自增
    private long id;
    private Integer goodsId;
    private String name;
    private String icon;
    private String info;
    private String type;
    @Generated(hash = 1830037561)
    public GoodsModel(long id, Integer goodsId, String name, String icon,
            String info, String type) {
        this.id = id;
        this.goodsId = goodsId;
        this.name = name;
        this.icon = icon;
        this.info = info;
        this.type = type;
    }
    @Generated(hash = 971639536)
    public GoodsModel() {
    }
    public long getId() {
        return this.id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public Integer getGoodsId() {
        return this.goodsId;
    }
    public void setGoodsId(Integer goodsId) {
        this.goodsId = goodsId;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getIcon() {
        return this.icon;
    }
    public void setIcon(String icon) {
        this.icon = icon;
    }
    public String getInfo() {
        return this.info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    public String getType() {
        return this.type;
    }
    public void setType(String type) {
        this.type = type;
    }
}

2.2在myApplication中

/*
    连接数据库并创建会话
     */
  public class MyApplication extends Application
{
    public static final String DB_NAME = "goods.dp";
    public static final String DB_PASS = "123456";
    public static DaoSession mDaoSession;
    public static DaoMaster daoMaster;
    public static DaoMaster.DevOpenHelper devOpenHelper;
    @Override
    public void onCreate() {
        super.onCreate();
        initDb();
    }

    /*
    连接数据库并创建会话
     */
    public void initDb()
    {
        //1.获取需要连接的数据库
        devOpenHelper = new DaoMaster.DevOpenHelper(this,DB_NAME);
//        SQLiteDatabase db = devOpenHelper.getWritableDatabase();//非加密数据库
        Database database = devOpenHelper.getEncryptedReadableDb(DB_PASS);//加密数据库
        //2.创建数据库连接
        daoMaster = new DaoMaster(database);
        //3.根据连接创建数据库会话
        mDaoSession = daoMaster.newSession();
    }
    /*
    关闭数据库连接
     */
    public static void closeConnection()
    {
        if (devOpenHelper != null)
        {
            devOpenHelper.close();
            devOpenHelper=null;
        }
        if (mDaoSession != null)
        {
            mDaoSession.clear();
            mDaoSession=null;
        }
    }
}

3.对数据库的增删改查操作
在上文我们进行了makeproject操作后,GreenDao会帮我们生成一个叫做GoodsModelDao的类,我们通过对这个类的对象就可以对数据库进行操作。
我们新建一个GreenDaoManager的类:

public class GreenDaoManager
{
    private Context context;
    private GoodsModelDao mGoodModelDao;
    private static GreenDaoManager greenDaoManager;
    private DaoMaster daoMaster;
    private DaoSession daoSession;

    public GoodsModel goodsModel = new GoodsModel();

    private GreenDaoManager(Context context) {
        this.context = context;
        mGoodModelDao = MyApplication.mDaoSession.getGoodsModelDao();
    }
}

在初始化了mGoodModelDao 后,我们就可以利用mGoodModelDao进行CRUD操作
3.1插入数据

/**
     * 添加数据到数据库,常用的有三种方式
     */
    public void insertGoods()
    {
        //case1:插入一条数据,当指定主键已经存在时会发生错误
        mGoodModelDao.insert(goodsModel);

        //case2:插入一条数据,当指定主键存在时则进行替换,没有则进行插入
        mGoodModelDao.insertOrReplace(goodsModel);
        //case 3: 插入一条数据,判断数据的主键是否为空,若为空,则进行insert操作,否则进行update操作。
        // 但若数据库中无此条主键所在的数据,则会执行失败
        mGoodModelDao.save(goodsModel);
    }

其中,save()方法的源码是:

public void save(T entity) {
        if (hasKey(entity)) {
            update(entity);
        } else {
            insert(entity);
        }
    }

3.2查询数据,查询数据的方法有很多,列举如下:

    /**
     * 从数据库查询数据
     */

    public List<GoodsModel> quaryGoods( )
    {
        //查询全部数据
        mGoodModelDao.loadAll();
        //查询指定主键
        mGoodModelDao.load(Long key);
        //条件查询,名称等于奥利奥
        mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.Name.eq("奥利奥")).list();
        //条件查询,名称不等于奥利奥
        mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.Name.notEq("奥利奥")).list();
        //条件查询,id大于5的
        mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.GoodsId.gt(5)).list();
        //条件查询,id 大于等于5
        mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.GoodsId.ge(5)).list();
        //条件查询,id小于5
        mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.GoodsId.lt(5)).list();
        //条件查询,id小于等于5
        mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.GoodsId.le(5)).list();
        //模糊查询
        mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.Name.like("奥利%")).list();
        //查询区间内的数据
        mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.GoodsId.between(5,10)).list();
        //查询结果升序
        mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.Name.like("奥利")).orderAsc(GoodsModelDao.Properties.GoodsId).list();
        //查询结果降序
        mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.Name.like("奥利%")).orderDesc(GoodsModelDao.Properties.GoodsId).list();

    }

3.3更新数据

   public void updateGoods(GoodsModel goodsModel)
    {
        mGoodModelDao.update(goodsModel);
    }

3.4删除数据

  public void deleteGoods(GoodsModel goodsModel)
    {
        //删除全部
        mGoodModelDao.deleteAll();
        //删除指定主键数据
        mGoodModelDao.deleteByKey(Long key);
        //删除某个实体对应的数据
        mGoodModelDao.delete(goodsModel);
    }

关于GreenDao的基本操作就是这些,具体的东西还是要结合项目进行灵活变通

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

猜你喜欢

转载自blog.csdn.net/qq_41525021/article/details/104201101