介绍:
greenDAO 是一款轻量级的 Android ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化, 最小的内存开销 、依赖体积小。适合存储大量的数据。
轻量级数据库是指,一种用于存储和管理小型数据集的数据库系统。它们可以在普通的个人电脑上运行,而不需要强大的服务器设备。它们通常只需要很少的内存和存储空间,因此最适合小型应用。轻量级数据库的例子包括SQLite、MongoDB和Appache Cassandra。
集成的步骤:
在APP下的gradle中,
implementation 'org.greenrobot:greendao:3.3.0' // greendao
greendao{
schemaVersion 1 //版本号
targetGenDir 'src/main/java' //greenDao实体类包文件夹
daoPackage 'com.example.teleprompter.greenDao' //输出dao的数据库操作实体类文件夹(相对路径 包名+自定义路径名称,包将创建于包名的直接路径下)
}
在集成的时候,我的项目级gradle是这样的:
在项目级别的gradle中,
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
发现在项目级的gradle和之前的格式不同。
plugins {
id 'com.android.application' version '7.2.1' apply false
id 'com.android.library' version '7.2.1' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
看官网后知道,是2022年1月的Gradle7.1.0版本做的更新导致的,buildscript闭包可以放在plugins闭包前面,最后我的项目级gradle是这样的:
创建实体类
然后通过在实体类上加注解来达到生成对应的数据模型。
例如:
@Entity
public class TelePromterBean {
@Id(autoincrement = true)
private Long id;
@Property
private int number;//页面数量
@Property
private String name;//页面名字
@Property
private int fontSize;//字号
// get()/set()
}
1. @Entity:标记一个实体类,声明一个表,一个实体类只能定义一张表,可以添加如下参数:(1)nameInDb:表名(2)indexes:定义索引,可以跨越多个列(3)createInDb:是否创建表(4)schema:定义架构名称(5)active:定义实体类有效性,默认为true
2. @Id:定义一列主键,可以添加如下参数:(1)nameInDb:定义列名(2)autoincrement:定义是否自增(3)generatedId:如果主键没有显示的赋值,则自动生成的
3. @Property:定义属性列,可以添加如下参数:(1)nameInDb:定义列名(2)not null:定义是否非空(3)unique:定义是否唯一(4)index:定义是否索引
4. @ToOne:定义一对一关系,可以添加如下参数:(1)nameInDb:定义列名(2)unique:定义是否唯一(3)not null:定义是否非空(4)index:定义是否索引
5. @ToMany:定义一对多关系,可以添加如下参数:(1)nameInDb:定义列名(2)unique:定义是否唯一(3)not null:定义是否非空(4)index:定义是否索引(5)orderBy:定义排序规则
实体类创建完成后,同步一下项目 然后就会生成如下:
增删改查
public class DBManger {
private static final String TAG = "DBManger";
private static final String dbName = "tele.db";
private static DBManger mInstance;
private final Context context;
private DaoMaster.DevOpenHelper openHelper;
public static DaoSession daoSession;
public DBManger(Context context) {
this.context = context;
openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
Database db = openHelper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
}
//单例
public static DBManger getInstance(Context context) {
if (mInstance == null) {
synchronized (DBManger.class) {
if (mInstance == null) {
mInstance = new DBManger(context);
}
}
}
return mInstance;
}
//可读数据库
private SQLiteDatabase getReadableDatabase() {
if (openHelper == null) {
openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
}
SQLiteDatabase db = openHelper.getReadableDatabase();
return db;
}
//可写数据库
private SQLiteDatabase getWritableDatabase() {
if (openHelper == null) {
openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
}
SQLiteDatabase db = openHelper.getWritableDatabase();
return db;
}
//插入
public void insert(TelePromterBean promterBean) {
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
TelePromterBeanDao dao = daoSession.getTelePromterBeanDao();
dao.insert(promterBean);
}
//插入数据集合
public void insertUserList(List<TelePromterBean> promterBeanList) {
if (promterBeanList == null || promterBeanList.isEmpty()) {
return;
}
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
TelePromterBeanDao dao = daoSession.getTelePromterBeanDao();
dao.insertInTx(promterBeanList);
}
//删除数据
public void delete(TelePromterBean promterBean) {
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
TelePromterBeanDao dao = daoSession.getTelePromterBeanDao();
dao.delete(promterBean);
}
//更改
public void update(TelePromterBean promterBean) {
Log.d(TAG, "update: " + promterBean);
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
TelePromterBeanDao dao = daoSession.getTelePromterBeanDao();
dao.update(promterBean);
}
//查询
public ArrayList<TelePromterBean> query() {
DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
DaoSession daoSession = daoMaster.newSession();
TelePromterBeanDao dao = daoSession.getTelePromterBeanDao();
QueryBuilder<TelePromterBean> qb = dao.queryBuilder();
ArrayList<TelePromterBean> list = (ArrayList<TelePromterBean>) qb.list();
// for (int i = 0; i < list.size(); i++) {
// list.get(i).setIsFlush(false);
// }
return list;
}
}
在项目中使用:
TelePromterBean promterBean = new TelePromterBean(null, i, "", 20, "", false);
DBManger.getInstance(MainActivity.this).insert(promterBean);
DBManger.getInstance(MainActivity.this).delete(promterBean);
DBManger.getInstance(MainActivity.this).update(promterBean);
DBManger.getInstance(MainActivity.this).query();