Kotlin中GreenDao的使用

1.依赖添加:apply plugin: 'org.greenrobot.greendao'
在android{***}中添加:
greendao { schemaVersion 1 daoPackage 'com.example.architectrue' //包名 targetGenDir 'src/main/java' //存放greendao库生成文件(DaoMaster和DaoSession)的目录 }
在添加classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'

 implementation 'org.greenrobot:greendao:3.2.0'
    // 需要加密数据库的话添加这个
   // implementation 'net.zetetic:android-database-sqlcipher:3.5.6'

在两个 repositories中都添加:maven{url 'http://maven.aliyun.com/nexus/content/groups/public/'}
2.建立一个bean类,其实就是在建表了,必须是java,不是kt,建好后make project(点击小锤子),生成上面的DaoMaster和DaoSession。

@Entity
public class Student {
    @Id(autoincrement = true)  //主键,自增
    private Long id;  //
    private String name;
    private String label;
    private String version;
    private int versionCode;
    private String sourceDir;
    private String dataDir;
    private boolean system;
    private boolean installed;
    @Keep
    public Student(String name, String label, String version, int versionCode, String sourceDir, String dataDir, boolean system, boolean installed) {
        this.name = name;
        this.label = label;
        this.version = version;
        this.versionCode = versionCode;
        this.sourceDir = sourceDir;
        this.dataDir = dataDir;
        this.system = system;
        this.installed = installed;
    }
    @Keep
    public Student() {
    }
    get/set方法就不贴了

3.建立单例类进行管理

class DbManagerSingle private constructor(mContext:Context){
    private val DB_NAME = "test.db"
    private var mDevOpenlper:DaoMaster.DevOpenHelper? = null
    private var mDaomaster:DaoMaster? = null
    private var mDaoSession:DaoSession? = null
    init {
        mDevOpenlper = DaoMaster.DevOpenHelper(mContext,DB_NAME)
    }
    companion object{
        @Volatile
        var instance:DbManagerSingle? = null
        fun getInstance(mContext: Context):DbManagerSingle?{
            if(instance==null){
                synchronized(DbManagerSingle::class){
                    if(instance==null){
                        instance = DbManagerSingle(mContext)
                    }
                }
            }
            return instance
        }
    }
    fun getReadableDataBase(context: Context):SQLiteDatabase?{
        if(null==mDevOpenlper){
            getInstance(context)
        }
        return mDevOpenlper?.readableDatabase
    }
    fun getwriteableDataBase(context: Context):SQLiteDatabase?{
        if(null==mDevOpenlper){
            getInstance(context)
        }
        return mDevOpenlper?.writableDatabase
    }
    fun getDaoMaster(context: Context):DaoMaster?{
        if(null == mDaomaster){
            synchronized(DbManagerSingle::class){
                if(null == mDaomaster){
                    mDaomaster = DaoMaster(getwriteableDataBase(context))
                }
            }
        }
        return mDaomaster
    }
    fun getDaoSession(context: Context):DaoSession{
        if(null == mDaoSession){
            synchronized(DbManagerSingle::class){
                if(null == mDaoSession){
                    mDaoSession = getDaoMaster(context)?.newSession()
                }
            }
        }
        return mDaoSession!!
    }
}

4,简单使用,自增插入两个数据,然后取出验证

       var student = Student("luo","label","version",1,"src/main","src/data",false,true)
               var student1 = Student("yang","label","version",1,"src/main","src/data",false,true)
               DbManagerSingle.getInstance(applicationContext)?.getDaoSession(applicationContext)?.studentDao?.insert(student)
               DbManagerSingle.getInstance(applicationContext)?.getDaoSession(applicationContext)?.studentDao?.insert(student1)
              var list = DbManagerSingle.getInstance(applicationContext)?.getDaoSession(applicationContext)?.studentDao?.queryBuilder()?.build()?.list()
               if(list!!.size>0){
                   for((index,item) in list.withIndex()){
                       Log.d("test","item"+index.toString()+item.id.toString()+item.name)
                   }
               }

5.可以在封装一下,方便使用,这里就不写了。总的流程
(1):DaoMaster.DevOpenHelper(mContext,DB_NAME)->DaoMaster.DevOpenHelper
(2):mDevOpenlper?.writableDatabase->SQLiteDatabase
(3):mDaomaster = DaoMaster(SQLiteDatabase)
(4) mDaoSession = mDaomaster .newSession()

你可能感兴趣的:(greendao,android)