greenDAO 是适用于 Android 的轻量级快速 ORM 框架,可将对象映射到 SQLite 数据库中。 并且针对 Android 进行了高度的优化,greenDAO 提供了出色的性能,并占用了最少的内存,
1、DaoMaster::DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。它有静态方法来创建表或删除它们。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper实现,它们在SQLite数据库中创建模式。
2、DaoSession:管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取该对象。DaoSession还提供了一些通用的持久性方法,如实体的插入,加载,更新,刷新和删除。
3、XXXDao:数据访问对象(DAO)持久存在并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession更多的持久性方法,例如:count,loadAll和insertInTx。
4、Entities :可持久化对象。通常, 实体对象代表一个数据库行使用标准 Java 属性(如一个POJO 或 JavaBean )。
1、导入插件
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
id 'org.greenrobot.greendao'
implementation 'org.greenrobot:greendao:3.2.2'
@Entity
public class DemoModel implements Parcelable {
@Id(autoincrement = true)
private Long id;
@Index(unique = true)
private Integer usersId;
private String name;
private String age;
}
@Id 是主键 id
Long 类型,可以通过 @Id(autoincrement = true) 设置自动增长(自动增长主键不能用基本类型 long,只能用包装类型 Long)。
@Index(unique = true)
是向数据库添加了唯一约束。
public class MyApplication extends Application {
public static DaoSession mSession;
@Override
public void onCreate() {
super.onCreate();
initDb();
}
/**
* 连接数据库并创建会话
*/
public void initDb() {
// 1、获取需要连接的数据库
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "test.db");
SQLiteDatabase db = devOpenHelper.getWritableDatabase();
// 2、创建数据库连接
DaoMaster daoMaster = new DaoMaster(db);
// 3、创建数据库会话
mSession = daoMaster.newSession();
}
// 供外接使用
public DaoSession getDaoSession() {
return mSession;
}
}
注意:
别忘了在清单文件中注册GreenDaoManager greenDaoManager=new GreenDaoManager(this);
DemoModel demoModel=new DemoModel();
demoModel.setAge("5");
demoModel.setName("huahua");
//注册调用
greenDaoManager.insert(demoModel);
import android.content.Context;
public class GreenDaoManager {
private Context mContext;
private DemoModelDao mdemoModelDao;
public GreenDaoManager (Context context) {
this.mContext = context;
// 获取DAO实例
mdemoModelDao = MyApplication.getDaoSession().getDemoModelDao();
}
// 获取全部的数据
public List<DemoModel> getAll() {
return mdemoModelDao.loadAll();
}
// 通过id获取数据
public DemoModel getDemoId(Long id) {
return mdemoModelDao.load(id);
}
// 删除 通过id
public void deleteId(Long id) {
mdemoModelDao.deleteByKey(id);
}
// 修改
public void upDate(DemoModel demoModel) {
mdemoModelDao.update(demoModel);
}
// 通过条件 获取数据 and 查询
public List<DemoModel> getRequi(String name, String age) {
return mdemoModelDao.queryBuilder().where(DemoModelDao.Properties.Name.eq(name),DemoModelDao.Properties.Age.eq(age)).list();
}
// 通过条件 获取数据 or 查询
public List<DemoModel> getRequi2(String name, String age) {
return mdemoModelDao.queryBuilder().whereOr(DemoModelDao.Properties.Name.eq(name),DemoModelDao.Properties.Age.eq(age)).list();
}
// 模糊查询
public List<DemoModel> geVague(String name) {
return mdemoModelDao.queryBuilder().where(DemoModelDao.Properties.Name.like("%"+name+"%")).list();
}
// 排序根据id 排序 orderAsc升序 orderDesc倒序 654321
public List<DemoModel> gesort() {
return mdemoModelDao.queryBuilder().orderDesc(DemoModelDao.Properties.Id).list();
}
//等于
eq()
//不等于
notEq()
//值等于
like()
//取中间范围
between()
//in命令
in()
//not in 命令
notIn()
//大于
gt()
//小于
lt()
//大于等于
ge()
//小于等于
le()
//为空
isNull()
//不为空
isNotNull()
// 条件,AND 连接
public QueryBuilder<T> where(WhereCondition cond, WhereCondition... condMore)
// 条件,OR 连接
public QueryBuilder<T> whereOr(WhereCondition cond1, WhereCondition cond2, WhereCondition... condMore)
//去重
public QueryBuilder<T> distinct()
//分页
public QueryBuilder<T> limit(int limit)
//偏移结果起始位,配合limit(int)使用
public QueryBuilder<T> offset(int offset)
//排序,升序
public QueryBuilder<T> orderAsc(Property... properties)
//排序,降序
public QueryBuilder<T> orderDesc(Property... properties)
// 排序,自定义
public QueryBuilder<T> orderCustom(Property property, String customOrderForProperty)
// 排序,SQL 语句
public QueryBuilder<T> orderRaw(String rawOrder)
//本地化字符串排序,用于加密数据库无效
public QueryBuilder<T> preferLocalizedStringOrder()
//自定义字符串排序,默认不区分大小写
public QueryBuilder<T> stringOrderCollation(String stringOrderCollation)