我们在项目中经常使用到本地数据库,来作为储存方式,今天我们来分享下GreenDao的使用心得
一,配置信息
1.在工程目录下build.gradle下添加插件
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // 添加插件 更好支持GreenDao
}
2.添加依赖库
apply plugin: 'org.greenrobot.greendao'
//db
implementation 'org.greenrobot:greendao:3.3.0'
3.配置数据库路径
greendao {
schemaVersion 2 //数据库版本,我们添加字段,表这里需要+1
daoPackage '"包名".model.db.greendao'//这里是dao包生成路径,大家可以定义自己的
targetGenDir 'src/main/java'
}
好得,配置信息就是这么简单 我们可以Sync Now即可 也可以Rebuild
配置搞好了,我们怎么来使用呢,现在我们在使用之前 我们来了解下GreenDao的结构
1.DaoMaster
DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的Dao类。它具有静态方法来创建表或将他们删除。其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的SQLiteOpenHelper实现。
2.DaoSession
管理特定模式的所有可用Dao对象,您可以使用其中一个getter方法获取。DaoSession还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。最后,DaoSession对象也跟踪一个身份范围。
3.Dao层
数据访问对象(Dao)持续存在并查询实体。对于每个实体,GreenDao生成一个Dao,它比DaoSession有更多的持久化方法,例如:count,loadAll和insertInTx。
4.实体类
持久对象,通常实体是使用标准Java属性(如POJO或JavaBean)来表示数据库的对象。目前不支持Kotlin
二,创建公共方法
1.我们创建一个实体类
@Entity
public class User implements Serializable {
static final long serialVersionUID = 42L;
@Id(autoincrement = true)//设置自增长
private Long id;
private String name;
@Generated(hash = 1697332542)
public DeviceEntity(Long id, String name) {
this.id = id;
this.mac = name;
}
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 和 @Id(autoincrement = true)之后构造方法和get,set方法会自己生成 rebuild即可
2.封装数据库工具类
object GreenDaoHelper {
private const val DB_NAME = "user" //数据库名称
private lateinit var daoSession: DaoSession
fun initDB(mContext: Context) {
val db = DaoMaster.DevOpenHelper(mContext, DB_NAME).writableDb
daoSession = DaoMaster(db).newSession()
}
}
3.添加数据
//单个添加
fun insert(user: User) {
daoSession.userDao.insert(user)
}
//批量添加
fun insert(user: List<User>) {
daoSession.userDao.insertInTx(user)
}
4.删除数据
//删除单个对象
fun delete(user: User) {
daoSession.userDao.delete(user)
}
//删除当前表
fun delete() {
daoSession.userDao.deleteAll()
}
5.修改数据
//修改单个对象
fun delete(user: User) {
daoSession.userDao.update(user)
}
6.查询数据
//查询当前列表所有信息
fun select() {
daoSession.userDao.loadAll().list
}
//根据id查询对象
fun select(id:Long) {
daoSession.userDao.queryBuilder().where(
UserDao.Properties.Id.eq(id)
}
三,初始化使用
//这个初始化可以写在App类下面,也可以写在MainActivity下,APP启动时候保证调用一次即可
GreenDaoHelper.initDB(this)
//需要的时候直接调用方法即可
var user=User()
GreenDaoHelper.insert(user)