美文网首页Android
GreenDao简单用法

GreenDao简单用法

作者: 世道无情 | 来源:发表于2018-12-04 09:18 被阅读133次
    1. 概述

    这里记录下greendao的简单用法,常用的就是增删改查,这里是参照下边这位大神博客自己写的demo;
    https://blog.csdn.net/ht1063899049/article/details/78519723

    2. 使用

    第一步:在项目的 build.gradle中添加下边依赖:
    classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    
    图片.png
    第二步:在app的 build.gradle中添加下边依赖:
    //使用greendao
    apply plugin: 'org.greenrobot.greendao' // apply plugin
    
        greendao {
            schemaVersion 1 //数据库版本号
            daoPackage 'com.novate.greendao.db'// 设置DaoMaster、DaoSession、Dao 包名
            targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
        }
    
    compile 'org.greenrobot:greendao:3.2.2' // add library
    
    图片.png
    图片.png
    第三步:自定义一个实体类,User

    自己只需要写下边的即可


    图片.png

    然后 build --> Make Project


    图片.png
    此时会在db包下生成如下图的3个类:
    图片.png

    同时,User实体类也会生成一些代码,如下:

    package com.novate.greendao;
    
    import org.greenrobot.greendao.annotation.Entity;
    import org.greenrobot.greendao.annotation.Id;
    import org.greenrobot.greendao.annotation.Generated;
    
    /**
     * ================================================
     * Email: 2185134304@qq.com
     * Created by Novate 2018/11/28 7:42
     * Version 1.0
     * Params:
     * Description:    实体类
     *
     * 备注:Bean 对象注释的解释
     *           @Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
                 @Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
                 @Property:可以自定义字段名,注意外键不能使用该属性
                 @NotNull:属性不能为空
                 @Transient:使用该注释的属性不会被存入数据库的字段中
                 @Unique:该属性值必须在数据库中是唯一值
                 @Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
     * ================================================
    */
    
    @Entity
    public class User {
        @Id(autoincrement = true)
        private Long id;
        private String name;
        private int age;
        private String sex;
        @Generated(hash = 689493095)
        public User(Long id, String name, int age, String sex) {
            this.id = id;
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
        @Generated(hash = 586692638)
        public User() {
        }
        public Long getId() {
            return this.id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getName() {
            return this.name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return this.age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getSex() {
            return this.sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
    }
    
    
    第四步:AppApplication代码如下
    /**
     * ================================================
     * Email: 2185134304@qq.com
     * Created by Novate 2018/11/28 7:44
     * Version 1.0
     * Params:
     * Description:
     * ================================================
    */
    
    public class AppApplication extends Application {
    
        private DaoMaster.DevOpenHelper mHelper;
        private SQLiteDatabase db;
        private DaoMaster mDaoMaster;
        private DaoSession mDaoSession;
    
        public static AppApplication instances;
    
    
        /**
         * 单例模式
         */
        public static AppApplication getInstances() {
            return instances;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            instances = this;
            setDatabase();
        }
    
        private void setDatabase() {
            // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
            // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
            // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
            // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
            mHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
            db = mHelper.getWritableDatabase();
            // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
            mDaoMaster = new DaoMaster(db);
            mDaoSession = mDaoMaster.newSession();
        }
    
        public DaoSession getDaoSession() {
            return mDaoSession;
        }
    
        public SQLiteDatabase getDb() {
            return db;
        }
    }
    
    
    第五步:在MainActivity中定义4个按钮,分别为添加、删除、修改、查询,代码如下:
    /**
     * ================================================
     * Email: 2185134304@qq.com
     * Created by Novate 2018/11/28 8:51
     * Version 1.0
     * Params:
     * Description:    增删改查方法
     * ================================================
    */
    
    public class MainActivity extends AppCompatActivity {
    
        int i = 1;
        private DaoSession daoSession;
        private UserDao userDao;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initDaoSession() ;
        }
    
        private void initDaoSession() {
            daoSession = AppApplication.getInstances().getDaoSession();
            userDao = AppApplication.getInstances().getDaoSession().getUserDao();
        }
    
    
        /**
         * 添加数据
         */
        public void add(View view) {
            User user = new User(null , "zhangsan" , i , "男") ;
            i = i+1;
            daoSession.insert(user) ;
    
            List<User> list = userDao.queryBuilder().list();
            Log.e("TAG" , "插入成功,查询的结果个数为:"+list.size()+", 数据为:"+list) ;
        }
    
    
        /**
         * 删除
         */
        public void delete(View view) {
            List<User> list = userDao.queryBuilder().list();
    
            if (list == null || list.isEmpty()){
                return;
            }
    
            for (int j = 0; j < list.size(); j++) {
                User user = list.get(j);
                if ("zhangsan".equals(user.getName())){
                    userDao.delete(user);
                    Log.e("TAG" , "删除姓名为张三的人") ;
                }
            }
    
            Log.e("TAG" , "删除成功后,查询的结果个数为: "+userDao.queryBuilder().list().size()) ;
        }
    
    
        /**
         * 修改
         */
        public void update(View view) {
            QueryBuilder<User> builder = userDao.queryBuilder();
    
            // 获取年龄为1的 用户的集合
            List<User> list = builder.where(UserDao.Properties.Age.eq(1)).list();
            if (list == null || list.isEmpty()){
                return;
            }
            for (int j = 0; j < list.size(); j++) {
                User user = list.get(j);
                user.setName("lisi");
                user.setSex("女");
                daoSession.update(user);
                Log.e("TAG" , "修改成功") ;
            }
            Log.e("TAG" , "修改成功后,查询的结果个数为: "+userDao.queryBuilder().list().size()) ;
    
    
            // 查询数据库中所有数据的集合
            List<User> list1 = userDao.queryBuilder().list();
            if (list1 == null || list1.isEmpty()){
                Log.e("TAG" , "所有数据的集合list1 - 暂无数据") ;
                return;
            }
    
            for (int k = 0; k < list1.size(); k++) {
                User user = list1.get(k);
    
                Long id = user.getId();
                String name = user.getName();
                int age = user.getAge();
                String sex = user.getSex();
                Log.e("TAG" , "修改后 遍历所有集合的:姓名:"+name+", 年龄:"+age+", 性别:"+sex+", id: "+id) ;
            }
        }
    
    
        /**
         * 查询
         */
        public void query(View view) {
            QueryBuilder<User> builder = userDao.queryBuilder();
            // 获取 数据库中的list集合
            List<User> list = builder.list();
    
            if (list == null || list.isEmpty()){
                Log.e("TAG" , "集合中暂无数据") ;
                return;
            }
    
            for (int j = 0; j < list.size(); j++) {
                User user = list.get(j);
    
                Long id = user.getId();
                String name = user.getName();
                int age = user.getAge();
                String sex = user.getSex();
                Log.e("TAG" , "查询后 遍历所有集合的:姓名:"+name+", 年龄:"+age+", 性别:"+sex+", id: "+id) ;
            }
        }
    }
    
    以上就是greendao最基础的操作,增删改查,项目中有需要可以直接拿去用,如果有其他的需求,可以在此基础上修改即可
    代码已上传至github:https://github.com/shuai999/GreenDao2.git

    相关文章

      网友评论

        本文标题:GreenDao简单用法

        本文链接:https://www.haomeiwen.com/subject/yxgoqqtx.html