GreenDAO的本质是为存储在关系数据库SQLite中的数据提供一个面向对象的接口。只需定义数据模型,Green DAO将创建Java数据对象(实体)和DAO(数据访问对象)这将为您节省大量无聊的代码,只需来回移动数据。除此之外,Green DAO还提供一些高级ORM(对象关系映射)特性类似于会话缓存、急切加载和活动实体。
ORM:为了解决面向对象与关系数据库存在的互不匹配的现象的技术,举个例子,就是为了解决原jdbc操作数据库的方式(结构复杂,访问渠道乱),orm提供了单独访问数据的渠道
总的来说,greendao封装了原生的数据库,使用非常简单.不耗用内存
配置:
在项目工程的biuld.gradel中配置需要用的插件
dependencies {
......
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
在module项目中配置
1.
implementation 'org.greenrobot:greendao:3.2.2' //导入依赖
apply plugin: 'org.greenrobot.greendao' //配置插件需要的依赖,注意放的位置(全局)
android {
.......
defaultConfig {
3.自定义greendao的生成(marster,session,dao)路径,可以不自定义路径使用
com.greendaoDemo_20190218:项目包路径
gen为生成的包名(marster,session,dao生成在gen下)
greendao {
schemaVersion 1
daoPackage 'com.greendaoDemo_20190218.gen'
targetGenDir 'src/main/java'
}
创建bean类(数据库表,CRUD(增删改查)操作,都是通过这个bean类来更改数据)
@Entity:只有被@Entity的实体类才能被dao类操作
@Id:表示该字段是id,该字段类型必须为Long类型,(autoincrement = true)表示主键会自增
@Property:普通字段比如下方的str字段,他不需要声明,默认
需要表中有几个字段,就定义几个变量,id是必须定义的
@Entity
public class NewsTable {
@Id
public Long id;
public String str;
}
上方的定义字段完成后,build一下(重新刷新)
刷新后我们会发现:
greendao将构造方法,getset方法生成
@Entity
public class NewsTable {
@Id
public Long id;
public String str;
@Generated(hash = 738712425)
public NewsTable(Long id, String str) {
this.id = id;
this.str = str;
}
@Generated(hash = 1081144428)
public NewsTable() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getStr() {
return this.str;
}
public void setStr(String str) {
this.str = str;
}
}
同时,在项目文件中会生成gen包(自定义生成路径)
在程序入口处,自定义application中初始化
getSession:提供了session对象,在自定义application中得到了session对象,方法的目的是:向外部提供该对象,想要进行crud(增删改查)操作,需要通过dao对象调用,但是dao对象通过session对象获得
其实marster,session,dao这三个就是上下级关系(封装关系)
marster-----session------dao
public class MyApplication extends Application {
private static DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
//1-1.创建数据库辅助方法,来创建数据库
DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(this, "news", null);
//1-2.通过数据库辅助对象来获取数据库可操作对象
SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
//1.创建Master实例,需要数据库可操作对象
DaoMaster daoMaster = new DaoMaster(writableDatabase);
//2.通过master对象创建session对象(session对象才可以调用dao)
daoSession = daoMaster.newSession();
}
//创建公共静态方法,向外部提供session对象
public static DaoSession getSession(){
return daoSession;
}
}
在清单文件中,使用自定义的application
<application
android:name=".ui.app.MyApplication"
. . . .
</application>
使用:
添加:
//获取session对象,调用自定义application中的静态方法
DaoSession session = MyApplication.getSession();
//获取dao对象,开始增删改查
NewsTableDao newsTableDao = session.getNewsTableDao();
//创建表(bean)对象
NewsTable newsTable = new NewsTable();
//给表中字段赋值
newsTable.setStr("张三");
//添加到数据库
newsTableDao.insert(newsTable);
查询:load根据id查询 loadAll全查
NewsTable load = newsTableDao.load((long) 1);
if (null != load) {
Toast.makeText(this,load.getStr(),+0).show();
} else {
Toast.makeText(this,"数据不存在",+0).show();
}
剩下内容明天完善!!!