集成GreenDao
- 在Project目录下build.gradle下添加插件
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.3'
// 添加插件 更好支持GreenDao
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
- 在app目录下的build.gradle下添加插件依赖
apply plugin: 'org.greenrobot.greendao'
- 在app目录下的build.gradle配置数据库
greendao {
schemaVersion 1 //当前数据库版本
}
- 在app目录下的build.gradle添加依赖库
dependencies {
implementation 'org.greenrobot:greendao:3.2.2' // 添加库
}
到这儿集成已经完成,接下来就是如何使用greendao进行操作数据了
使用GreenDao
- 创建实体
@Entity
public class UserBean {
/*设置自增的id*/
@Id(autoincrement = true)
private long id;
private String Name;
private int age ;
private String info ;
}
@Entity:表明这个实体类会在数据库中生成一个与之相对应的表
属性:
- schema:告知greenDAO当前实体属于哪个 schema
- schema active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
- nameInDb:在数据库中使用的别名,默认使用的是实体的类名,
- indexes:定义索引,可以跨越多个列
- createInDb:标记创建数据库表(默认:true)
- generateConstructors 自动创建全参构造方法(同时会生成一个无参构造方法)(默认:true)
- generateGettersSetters 自动生成 getters and setters 方法(默认:true)
@Id(autoincrement = true)对应数据表中的 Id 字段
@Index 作为一个属性来创建一个索引,可以作为唯一标识
GreenDao对外提供的核心类
1.DaoMaster
DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的Dao类。它具有静态方法来创建表或将他们删除。其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的SQLiteOpenHelper实现。
2.DaoSession
管理特定模式的所有可用Dao对象,您可以使用其中一个getter方法获取。DaoSession还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。最后,DaoSession对象也跟踪一个身份范围。
3.Dao层
数据访问对象(Dao)持续存在并查询实体。对于每个实体,GreenDao生成一个Dao,它比DaoSession有更多的持久化方法,
4.模糊查询 区间查询
gt 大于
ge 大于等于
lt 小于
le 小于等于
Between 介于中间
升降序
orderAsc 升序
orderDesc 降序
and /or
初始化GreenDao ,建议在Application中初始化
import android.app.Application;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.yxjme.flycoroundview.sqllite.DaoMaster;
import com.yxjme.flycoroundview.sqllite.DaoSession;
public class MyApp extends Application {
static Context context ;
public static Context getContext() {
return context;
}
//获取Helper对象
private DaoMaster.DevOpenHelper mHelper;
private DaoMaster mDaoMaster;
private static DaoSession mDaoSession;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
initDatabase();
}
/**
* 初始化數據庫
*/
private void initDatabase() {
mHelper = new DaoMaster.DevOpenHelper(this, "app.db");
SQLiteDatabase db = mHelper.getWritableDatabase();
mDaoMaster = new DaoMaster(db);
mDaoSession = mDaoMaster.newSession();
}
/**
* dao
*
* @return
*/
public static DaoSession getDaoSession() {
return mDaoSession;
}
/**
* 可寫
* @return
*/
public SQLiteDatabase getWDb() {
return mHelper.getWritableDatabase();
}
/**
* 可讀
* @return
*/
public SQLiteDatabase getRDb() {
return mHelper.getReadableDatabase();
}
增删改查管理类UserManager
public class UserManager {
private static UserManager manager;
private UserBeanDao dao;
private UserManager(){
dao = MyApp.getDaoSession().getUserBeanDao();
}
public static UserManager newInstance(){
if (null == manager){
synchronized (UserManager.class){
if (null == manager){
manager=new UserManager();
}
}
}
return manager ;
}
/**
* 插入一条记录,表里面要没有与之相同的记录
*
*/
public long insert(UserBean userBean){
return dao.insert(userBean);
}
/**
* 更新数据
* @param userBean
*/
public void update(UserBean userBean){
UserBean mOldPersonInfor = dao.queryBuilder()
.where(UserBeanDao.Properties.Id.eq(userBean.getId()))
.build()
.unique();//拿到之前的记录
if(mOldPersonInfor != null){
mOldPersonInfor.setName("张三");
dao.update(mOldPersonInfor);
}
}
/**
* 按条件查询数据
*/
public List<UserBean> searchByWhere(String wherecluse){
List<UserBean>personInfors = (List<UserBean>) dao.queryBuilder().where(UserBeanDao.Properties.Name.eq(wherecluse)).build().unique();
return personInfors;
}
/**
* 查询所有数据
*/
public List<UserBean> searchAll(){
List<UserBean>personInfors=dao.queryBuilder().list();
return personInfors;
}
/**
* 删除数据
*/
public void delete(String wherecluse){
dao.queryBuilder().where(UserBeanDao.Properties.Name.eq(wherecluse)).buildDelete().executeDeleteWithoutDetachingEntities();
}
/**
* 刪除所以
*/
public void delete(){
dao.deleteAll();
}