GreenDAO的简单使用

[url]https://github.com/greenrobot/greenDAO

加入依赖

apply plugin: 'com.android.application'
compile 'org.greenrobot:greendao:3.2.0'

gradle根文件加入以下代码(注意,在项目的build.gradle中的根目录)

buildscript {
    repositories {
        jcenter()
        mavenCentral() //主要是加这个仓库
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' //主要加入的这行代码
    }
}

使用用法

在application中初始化

GreenDaoManager.getmInstance(this);

创建GreenDAOManager

public class GreenDaoManager {
    private static GreenDaoManager mInstance;
    private static DaoSession daoSession;
    private static DaoMaster daoMaster;

    private GreenDaoManager(Context context) {
        //通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper
        //注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context, "contacts-db",null);
        //注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
        SQLiteDatabase sqLiteDatabase = devOpenHelper.getWritableDatabase();

        daoMaster = new DaoMaster(sqLiteDatabase);
        daoSession = daoMaster.newSession();
    }

    public static GreenDaoManager getmInstance(Context context){
        if (mInstance == null){
            synchronized (GreenDaoManager.class){
                if (mInstance == null){
                    mInstance = new GreenDaoManager(context);
                }
            }
        }
        return mInstance;
    }
    public DaoSession getDaoSession(){
        return  daoSession;
    }
    public DaoMaster getDaoMaster(){
        return daoMaster;
    }
}

编写实体bean类

@Entity
public class User {
    @Id
    private Long id;
    private String name;
    @Transient
    private int tempData;
}

编写好后点击as中build中的make project,会帮助我们生成如下代码

@Entity
public class User {
    @Id
    private Long id;
    private String name;
    @Transient
    private int tempData;
    @Generated(hash = 873297011)
    public User(Long id, String name) {
        this.id = id;
        this.name = name;
    }
    @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;
    }
}

_注解的意思:
@Entity 定义实体
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
(二) @Id
(三) @NotNull 不为null
(四) @Unique 唯一约束
(五) @ToMany 一对多
(六) @OrderBy 排序
(七) @ToOne 一对一
(八) @Transient 不存储在数据库中
(九) @generated 由greendao产生的构造函数或方法_

greendao的增删改查

**获取dao对象
UserDao userDao = GreenDaoManager.getmInstance(this).getDaoSession().getUserDao();**

    //创建一个新的用户实体对象
    User user = new User(id, name);
    //插入操作
    userDao.insert(user);

    //根据传入的name先做查找,如果查到的用户不为空则调用删除方法
    User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq(name)).build().unique();
        if (findUser != null) {
            //根据实体用户的id删除对应的条目
            userDao.deleteByKey(findUser.getId());
        }

    //将旧名字改为新名字
    private void updataUser(String oldName, String newName) {
        //获取dao对象
        UserDao userDao = GreenDaoManager.getmInstance(this).getDaoSession().getUserDao();
        //去数据库中查找对应的数据
        User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq(oldName)).build().unique();
        if (findUser != null) {
            //查找的数据返回不为空.设置新名字
            findUser.setName(newName);
            //更新数据库
            GreenDaoManager.getmInstance(this).getDaoSession().getUserDao().update(findUser);
            Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "用户不存在", Toast.LENGTH_SHORT).show();
        }
        //刷新列表
        myAdapter.notifyDataSetChanged();
    }

//调用返回一个集合
userList = GreenDaoManager.getmInstance(this).getDaoSession().getUserDao().queryBuilder().build().list();

你可能感兴趣的:(android,数据库)