已经有好长一段时间没有发博客了,时隔这么长时间时候发一篇简单的博客了,这里讲解的是一个框架的使用,GreenDao 的使用,
-
GreenDao:使用code generation,效率很高;库文件较小(约87KB),占用更少内存, 缺点是学习成本较高,需要弄清楚其原理才能方便使用
-
工作原理
-
GreenDao向SQLite数据库提供了一个对象导向的接口,它为用户省下了很多重复的工作,而且提供了简便的操作接口。
为了使用GreenDao,需要在新建一个Java工程(工程中需要导入greendao-generator-x.x.x.jar,freemarker-x.x.xx.jar),根据GreenDao的规则在其中描述数据库的表结构,运行之后它会构建你的实体模型和DAO工具类。
DaoMaster:
- 持有数据库对象(SQLiteDatabase) ,并管理一些DAO类(不是对象)
能够创建和删除数据库表 - 它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper的实现类,用于创建SQLite数据库的模式
DaoSession:
- 管理制定模式下所有可用的DAO对象
- 能对实体进行插入、加载、更新、刷新、删除操作。
DAO:
- 每个实体都有一个DAO,相对于DaoSession,它有更多的方法,比如:加载全部、InsertTx
Entity
- 可持久化的对象,由Make Project(小锤子)生成。相当于数据库中的一张表,所有字段都是使用标准的Java对象的属性
- 通过Make Project(小锤子)生成的这些工具类,你就可以在自己的Android工程中对进行数据库操作,完全不需要写任何SQL语句。
具体操作
1.导依赖
在项目中的build.gradle导入
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
在module 中的build.gradle导入
apply plugin: 'org.greenrobot.greendao'
greendao {
schemaVersion 1//数据库版本号
daoPackage 'XXX(自己的包名)XXX'//设置DaoMaster、DaoSession、Dao包名
targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
}
implementation 'org.greenrobot:greendao:3.2.2'
2.在清单文件中添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
3.创建一个Bean类
@Entity
public class Student {
//这是主键自增
@Id(autoincrement = true)
private Long id;
private String name;
private String sex;
}
通过Make Project 创建出三个类
在MyBean对象中创建出一个构造方法
- 新建一个application 用来配置数据库
private static DaoSession session;
@Override
public void onCreate() {
super.onCreate();
// 第一步创建openhelper
DaoMaster.DevOpenHelper openHelper =new DaoMaster.DevOpenHelper(this,"adai.db");
// 开启一个可写的数据库
SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
// 通过DaoMaster 封装
DaoMaster master =new DaoMaster(writableDatabase);
session = master.newSession();
}
public static DaoSession daoSession(){
return session;
}
- 在使用的activity中得到创建好的GreenDao
MyBeanDao dao = MyApp.daoSession().getMyBeanDao();
6.开始操作
增
long insert = dao.insert(new MyBean("阿呆", "哈哈", "男"));
if (insert>0){
Toast.makeText(this, "插入成功", Toast.LENGTH_SHORT).show();
}
删
// 这里用的是通过id 删除
dao.deleteByKey(1l);
改
// 这里用的是先查然后再改
MyBean load = dao.load(1l);
load.setName("haha");
load.setSex("男");
load.setTitle("尖子生");
dao.update(load);
查
List<MyBean> list = dao.loadAll();
for (MyBean myBean : list) {
Log.e("GreenDao中的数据",myBean.toString());
}