GreenDao 3.0使用详解

使用步骤:

 

1.module的build.gradle添加:

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

2.module的build.gradle依赖添加:

compile'org.greenrobot:greendao:3.0.1'
compile'org.greenrobot:greendao-generator:3.0.0'

3.module的build.gradle根级别下配置:

greendao {
    schemaVersion 1 //数据库版本号
    daoPackage 'com.paradoxie.demo.dao'  //生成的dao路径
    targetGenDir 'src/main/java'    //数据库文件的目录
}

4.在project的在build.gradle中配置:

dependencies {
   classpath 'com.android.tools.build:gradle:2.2.1'
   classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'//添加

 }

5.编写java实体类,注意注解:

@Entity
public class Advert {
    @Id
    private Long id;//主键id,必须Long型
    private String classify;//广告类型
    private String times;//广告次数
    private String time;//广告时长

更多注解类型不在此列出,写完以上实体类属性后,编译,编译,编译,自动生成get、set内容以及第三步中配置的com.paradoxie.demo.dao目录下三个文件,就是这个:

文件目录截图

6.编写MyOpenHelper,升级数据库使用,初步使用可以忽略:

文件目录截图

7.编写核心类DbCore,构造方法略过,主要是两个静态方法:

 public static DaoMaster getDaoMaster() {
    if (daoMaster == null) {
        //自定义辅助类;DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失,此处使用OpenHelper。
        DaoMaster.OpenHelper helper = new MyOpenHelper(mContext, DB_NAME);
        daoMaster = new DaoMaster(helper.getWritableDatabase());
    }
    return daoMaster;
}

public static DaoSession getDaoSession() {
    if (daoSession == null) {
        if (daoMaster == null) {
            daoMaster = getDaoMaster();
        }
        daoSession = daoMaster.newSession();
    }
    return daoSession;
}

8.在自定义MyApplication中初始化:

 @Override
public void onCreate() {
    super.onCreate();
    //初始化数据库
    DbCore.init(this);
}

9.实例化mAdvertDao后,用其操作实体bean对象,例如:

mAdvertDao.insert(T entity);//增
mAdvertDao.delete(T entity);//删,也可deleteByKey(K key)
mAdvertDao.update(T entity);//改
mAdvertDao.load(K key);//查


GreenDao 3.0简单实战:
1.)通过上面使用方式我们可以获取DaoMaster 、DaoSession、Dao类
public class DBManager {
    private final static String dbName = "test_db";
    private static DBManager mInstance;
    private DaoMaster.DevOpenHelper openHelper;
    private Context context;

    public DBManager(Context context) {
        this.context = context;
        openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
    }

    /**
     * 获取单例引用
     *
     * @param context
     * @return
     */
    public static DBManager getInstance(Context context) {
        if (mInstance == null) {
            synchronized (DBManager.class) {
                if (mInstance == null) {
                    mInstance = new DBManager(context);
                }
            }
        }
        return mInstance;
    }
}
2.)获取可读可写数据库
    /**
     * 获取可读数据库
     */
    private SQLiteDatabase getReadableDatabase() {
        if (openHelper == null) {
            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
        }
        SQLiteDatabase db = openHelper.getReadableDatabase();
        return db;
    }
     /**
     * 获取可写数据库
     */
    private SQLiteDatabase getWritableDatabase() {
        if (openHelper == null) {
            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
        }
        SQLiteDatabase db = openHelper.getWritableDatabase();
        return db;
    }
3.)插入数据
    /**
     * 插入一条记录
     *
     * @param user
     */
    public void insertUser(User user) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        userDao.insert(user);
    }

    /**
     * 插入用户集合
     *
     * @param users
     */
    public void insertUserList(List<User> users) {
        if (users == null || users.isEmpty()) {
            return;
        }
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        userDao.insertInTx(users);
    }
4.)删除数据
    /**
     * 删除一条记录
     *
     * @param user
     */
    public void deleteUser(User user) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        userDao.delete(user);
    }
5.)更新数据
    /**
     * 更新一条记录
     *
     * @param user
     */
    public void updateUser(User user) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        userDao.update(user);
    }
6.)查询数据
    /**
     * 查询用户列表
     */
    public List<User> queryUserList() {
        DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        QueryBuilder<User> qb = userDao.queryBuilder();
        List<User> list = qb.list();
        return list;
    }

    /**
     * 查询用户列表
     */
    public List<User> queryUserList(int age) {
        DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        QueryBuilder<User> qb = userDao.queryBuilder();
        qb.where(UserDao.Properties.Age.gt(age)).orderAsc(UserDao.Properties.Age);
        List<User> list = qb.list();
        return list;
    }
7.)测试程序
 DBManager dbManager = DBManager.getInstance(this);
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setId(i);
            user.setAge(i * 3);
            user.setName("第" + i + "人");
            dbManager.insertUser(user);
        }
        List<User> userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("TAG", "queryUserList--before-->" + user.getId() + "--" + user.getName() +"--"+user.getAge());
            if (user.getId() == 0) {
                dbManager.deleteUser(user);
            }
            if (user.getId() == 3) {
                user.setAge(10);
                dbManager.updateUser(user);
            }
        }
        userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("TAG", "queryUserList--after--->" + user.getId() + "---" + user.getName()+"--"+user.getAge());
        }
运行结果


参考来源

http://www.apkbus.com/blog-705730-62575.html


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值