记录GreenDao的使用

集成GreenDao

  1. 在Project目录下build.gradle下添加插件
buildscript {

    repositories {
        google()
        jcenter()
        
    }
    
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        // 添加插件 更好支持GreenDao
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
  1. 在app目录下的build.gradle下添加插件依赖
apply plugin: 'org.greenrobot.greendao'
  1. 在app目录下的build.gradle配置数据库
greendao {
        schemaVersion 1 //当前数据库版本
    }
  1. 在app目录下的build.gradle添加依赖库
dependencies {
    implementation 'org.greenrobot:greendao:3.2.2' // 添加库
}

到这儿集成已经完成,接下来就是如何使用greendao进行操作数据了

使用GreenDao

  • 创建实体
@Entity
public class UserBean {

    /*设置自增的id*/
    @Id(autoincrement = true)
    private long id;

    private String Name;

    private int age ;

    private String info ;
    }

@Entity:表明这个实体类会在数据库中生成一个与之相对应的表
属性:

  • schema:告知greenDAO当前实体属于哪个 schema
  • schema active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
  • nameInDb:在数据库中使用的别名,默认使用的是实体的类名,
  • indexes:定义索引,可以跨越多个列
  • createInDb:标记创建数据库表(默认:true)
  • generateConstructors 自动创建全参构造方法(同时会生成一个无参构造方法)(默认:true)
  • generateGettersSetters 自动生成 getters and setters 方法(默认:true)

@Id(autoincrement = true)对应数据表中的 Id 字段
@Index 作为一个属性来创建一个索引,可以作为唯一标识

GreenDao对外提供的核心类

1.DaoMaster
DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的Dao类。它具有静态方法来创建表或将他们删除。其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的SQLiteOpenHelper实现。

2.DaoSession
管理特定模式的所有可用Dao对象,您可以使用其中一个getter方法获取。DaoSession还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。最后,DaoSession对象也跟踪一个身份范围。

3.Dao层
数据访问对象(Dao)持续存在并查询实体。对于每个实体,GreenDao生成一个Dao,它比DaoSession有更多的持久化方法,

4.模糊查询 区间查询
gt 大于
ge 大于等于
lt 小于
le 小于等于
Between 介于中间
升降序
orderAsc 升序
orderDesc 降序
and /or

初始化GreenDao ,建议在Application中初始化

  
import android.app.Application;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.yxjme.flycoroundview.sqllite.DaoMaster;
import com.yxjme.flycoroundview.sqllite.DaoSession;

public class MyApp extends Application {


    static Context context ;


    public static Context getContext() {
        return context;
    }



    //获取Helper对象
    private DaoMaster.DevOpenHelper mHelper;
    private DaoMaster mDaoMaster;
    private static DaoSession mDaoSession;


    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        initDatabase();
    }


    /**
     * 初始化數據庫
     */
    private void initDatabase() {
        mHelper = new  DaoMaster.DevOpenHelper(this, "app.db");
        SQLiteDatabase db = mHelper.getWritableDatabase();
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
    }


    /**
     * dao
     *
     * @return
     */
    public static DaoSession getDaoSession() {
        return mDaoSession;
    }



    /**
     * 可寫
     * @return
     */
    public SQLiteDatabase getWDb() {
        return mHelper.getWritableDatabase();
    }

    /**
     * 可讀
     * @return
     */
    public SQLiteDatabase getRDb() {
        return mHelper.getReadableDatabase();
    }

增删改查管理类UserManager


public class UserManager {


    private static UserManager manager;

    private UserBeanDao dao;

    private UserManager(){
        dao = MyApp.getDaoSession().getUserBeanDao();
    }

    public static UserManager newInstance(){
        if (null == manager){
            synchronized (UserManager.class){
                if (null == manager){
                    manager=new UserManager();
                }
            }
        }
        return manager ;
    }




    /**
     * 插入一条记录,表里面要没有与之相同的记录
     *
     */
    public long insert(UserBean userBean){
        return  dao.insert(userBean);
    }




    /**
     * 更新数据
     * @param userBean
     */
    public void update(UserBean userBean){
        UserBean mOldPersonInfor = dao.queryBuilder()
                        .where(UserBeanDao.Properties.Id.eq(userBean.getId()))
                        .build()
                        .unique();//拿到之前的记录
        if(mOldPersonInfor != null){
            mOldPersonInfor.setName("张三");
            dao.update(mOldPersonInfor);
        }
    }



    /**
     * 按条件查询数据
     */
    public List<UserBean> searchByWhere(String wherecluse){
        List<UserBean>personInfors = (List<UserBean>) dao.queryBuilder().where(UserBeanDao.Properties.Name.eq(wherecluse)).build().unique();
        return personInfors;
    }



    /**
     * 查询所有数据
     */
    public List<UserBean> searchAll(){
        List<UserBean>personInfors=dao.queryBuilder().list();
        return personInfors;
    }



    /**
     * 删除数据
     */
    public void delete(String wherecluse){
        dao.queryBuilder().where(UserBeanDao.Properties.Name.eq(wherecluse)).buildDelete().executeDeleteWithoutDetachingEntities();
    }



    /**
     * 刪除所以
     */
    public void delete(){
        dao.deleteAll();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

将哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值