GreenDao数据库的优势
1.存取速度快;
2.支持数据库加密;
3.轻量级;
4.激活实体;
5.支持缓存;
6.代码自动生成;
GreenDao集成
第一步:在项目的.gradle文件里面添加
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
}
}
第二步:在moddle的.gradle文件里面添加
添加:apply plugin: 'org.greenrobot.greendao'
greendao {
schemaVersion 1
daoPackage 'com.xxxx.xxxx.greendao'
targetGenDir 'src/main/java'
}
添加依赖库
compile 'org.greenrobot:greendao:3.2.2'
第三步:添加Bean类,用TestBean举例子 , 一定要记得注解@Entity
@Entity
public class TestBean {
@Id(autoincrement = true)
private long id;
private String name;
private int sex;
private int age;
private String phone;
}
配置完成,在Android Studio中使用Build -> Make Project(快捷键Ctrl+F9),自动生成,GreenDao集成完成!
第四步:新建数据库初始化类DbManager.java
public class DbManager {
private static final String DB_NAME = "test.db";
private DaoMaster.DevOpenHelper mHelper;
private SQLiteDatabase db;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
private static DbManager mDbManager;
public static DbManager getInstance() {
if (null == mDbManager) {
synchronized (DbManager.class) {
if (null == mDbManager) {
mDbManager = new DbManager();
}
}
}
return mDbManager;
}
public void init(Context context){
// 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
// 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
// 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
// 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
mHelper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
db = mHelper.getWritableDatabase();
// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
mDaoMaster = new DaoMaster(db);
mDaoSession = mDaoMaster.newSession();
}
public DaoSession getDaoSession() {
return mDaoSession;
}
public SQLiteDatabase getDB() {
return db;
}
}
第五步:增,删,查,改
TestBean testBean=new TestBean();
testBean.setName("大毛");
testBean.setPhone("13600000001");
TestBeanDao testBeanDao=DbManager.getInstance().getDaoSession().getTestBeanDao();
//插入数据
testBeanDao.insert(testBean);
//数据存在则替换,数据不存在则插入
testBeanDao.insertOrReplace(testBean);
//条件查询10条数据
List<TestBean> list=testBeanDao.queryBuilder().where(TestBeanDao.Properties.Name.eq("大毛")).limit(10).build().list();
//查询全部
List<TestBean> list2=testBeanDao.queryBuilder().build().list();
//删除
testBeanDao.delete(testBean);
testBeanDao.deleteByKey(testBeanDao.getKey(testBean));
//删除全部
testBeanDao.deleteAll();
DbManager.getInstance().getDaoSession().deleteAll(TestBean.class);
//修改
DbManager.getInstance().getDaoSession().update(testBean);
GreenDao常用注解:摘自:https://www.jianshu.com/p/fc37ea64add0
- @Entity -- 实体注解
- @NotNull-- 设置表中当前列的值不可为空
- @Convert-- 指定自定义类型(@link PropertyConverter)
- @Generated-- GreenDao运行所产生的构造函数或者方法,被此标注的代码可以变更或者下次运行时清除
- @Id-- 主键 Long型,可以通过@Id(autoincrement = true)设置自增长。通过这个注解标记的字段必须是Long,数据库中表示它就是主键,并且默认是自增的。
- @Index-- 使用@Index作为一个属性来创建一个索引;定义多列索引(@link Entity#indexes())
- @JoinEntity-- 定义表连接关系
- @JoinProperty-- 定义名称和引用名称属性关系
- @Keep-- 注解的代码段在GreenDao下次运行时保持不变 1.注解实体类:默认禁止修改此类 2.注解其他代码段,默认禁止修改注解的代码段
- @OrderBy-- 指定排序
- @Property-- 设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb="name")
- @ToMany-- 定义与多个实体对象的关系
- @ToOne-- 定义与另一个实体(一个实体对象)的关系
- @Transient-- 添加次标记之后不会生成数据库表的列
- @Unique-- 向数据库列添加了一个唯一的约束