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()