Android GreenDao数据库的使用

话不多说,如下:

APP  gradle 中添加 

apply plugin: 'org.greenrobot.greendao'
greendao{
    schemaVersion 1
    daoPackage 'com.xxx.xxx.xxx.db'
    targetGenDir 'src/main/java'
}
compile 'org.greenrobot:greendao:3.2.2'

PROJECT gradle中,dependencies{ ...目录中} 添加:

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

写自己的实体类,比如:

@Entity
public class Test{
	@Id(autoincrement = true)
	private Long id;
	@NotNull
	public String name;
	@NotNull
	public String number;
}

在写下面之前我先把 实体类中的一些注释解释一下,

@Entity 用于标识这是一个需要Greendao帮我们生成代码的bean
@Id 标明主键,括号里可以指定是否自增 相当于2.2版本的
@Property 用于设置属性在数据库中的列名(默认不写就是保持一致)
@NotNull 非空
@Transient 标识这个字段是自定义的不会创建到数据库表里 相当于2.2版本的
@ToMany(referencedJoinProperty = “xxx”):表示一对多的关系,referencedJoinProperty = “bookId”,
  表示引用关联实体的属性“bookId”,此属性名对应引用实体类的变量名。

@ToOne(joinProperty = “xxx”):表示一对一,或者多对一的关系,joinProperty = “bookId”,表示分享属    性“bookId”,此属性名对应本类的变量名。

搞完上面的那些之后,编译项目,项目会自动生成几个文件,在你写的 

daoPackage 'com.xxx.xxx.xxx.db'

这个文件的目录下,其中

DaoMaster:可以认为是Dao中的执行官。它保存了sqlitedatebase对象以及操作DAO classes(注意:不是对象)。
其提供了一些创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架。
DaoSession:会话层。操作具体的DAO对象(注意:是对象),比如各种getter方法。
XXXDao:生成的某某Dao类,通常对应具体的java类,比如NewsDao等。其有更多的权限和方法来操作数据库元素(比方说插入、更新、删除、查询等等)。

搞清楚上面这些之后,我们可以写个数据库工具类或者管理者封装下常用的操作,然后对数据直接进行操作处理。

类似于如下:

public class GreenDaoManager {
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    private static GreenDaoManager mInstance;

    private GreenDaoManager(){
        if (mInstance == null) {
            DaoMaster.DevOpenHelper devOpenHelper = new
                    DaoMaster.DevOpenHelper(MyApp.getContext(), "user1-db", null);
            mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
            mDaoSession = mDaoMaster.newSession();
        }
    }

    public static GreenDaoManager getInstance() {
        if (mInstance == null) {
            synchronized (GreenDaoManager.class) {
                if (mInstance == null) {
                    mInstance = new GreenDaoManager();
                }
            }
        }
        return mInstance;
    }

    public DaoMaster getMaster() {
        return mDaoMaster;
    }
    public DaoSession getSession() {
        return mDaoSession;
    }
    public DaoSession getNewSession() {
        mDaoSession = mDaoMaster.newSession();
        return mDaoSession;
    }

    /**
     * insert 
     */
    public void insertData(eg:Entity){
        if (null== Entity)
            return;
        getSession().getUserDao().insert(Entity);
    }
}

目前还在对复杂数据的处理进行摸索研究中,后续有体会,会慢慢的加上更新


猜你喜欢

转载自blog.csdn.net/mapeifan/article/details/80393430
今日推荐