1.配置依赖
implementation 'org.greenrobot:greendao:3.2.0'
implementation 'org.greenrobot:greendao-generator:3.2.0'
~project的build.gradle 的buildscript-->dependencies添加
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
2.编译一下,会自动生成三个文件
BannerItemDao、DaoMaster、DaoSession
这三个存放目录配置在module的build.gradle文件里的android下。eg:
apply plugin: 'org.greenrobot.greendao' // apply plugin
android {
...忽略
greendao {
schemaVersion 1 // 数据库的版本号
daoPackage 'com.test.dao' // 包名
targetGenDir 'src/main/java' // 存放的目录地址
}
}
2.配置完成后使用方法
1.在自己建的实体类中 @Entity 类名上面
2.实体类中必须要有id是Long类型
@Entity
public class Student {
@Id(autoincrement = true)
private Long id;
3.然后锤一下会自动生成三个文件
BannerItemDao、DaoMaster、DaoSession
4.实现对数据库的操控(开始制作工具类)
1.创建一个类App继承Application
public class App extends Application {
public static App app;
public static App getApp() {
return app;
}
@Override
public void onCreate() {
super.onCreate();
app=this;
}
}
2.在清单文件中申请
android:name="com.test.dao.App"
3.创建一个类MyDataBaseHelper工具类的生成
public class MyDataBaseHelper {
private static MyDataBaseHelper myDataBaseHelper;
private final StudentDao studentDao;
private MyDataBaseHelper(){
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(App.getApp(), "sdas");
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
DaoSession daoSession = daoMaster.newSession();
studentDao = daoSession.getStudentDao();
}
public static MyDataBaseHelper getInstance(){
if(myDataBaseHelper == null){
synchronized (MyDataBaseHelper.class){
if(myDataBaseHelper == null){
myDataBaseHelper = new MyDataBaseHelper();
}
}
}
return myDataBaseHelper;
}
public void insertList(List list){ //插入多个数据(集合)
studentDao.insertInTx(list);
}
public void insert(Student student){//插入1个对象
studentDao.insert(student);
}
public void deleteAll(){ //删除全部
studentDao.deleteAll();
}
public void delete(Student student) { //删除一个
studentDao.delete(student);
}
public void updateAll(List list){ //更改全部
studentDao.updateInTx(list);
}
public void update(Student student){ //更改一个
studentDao.update(student);
}
public List queryAll(){ //查询所有
return studentDao.queryBuilder().list();
}
public List queryWhere(String name , int age){ //按条件查询 可多个条件查询 gt
return studentDao.queryBuilder().where(StudentDao.Properties.Name.eq(name),StudentDao.Properties.Age.gt(age)).list();
// 查询名字相等
}
public Student query(String name, int age){ //查询一个对象
return studentDao.queryBuilder().where(StudentDao.Properties.Name.eq(name),StudentDao.Properties.Age.gt(age)).unique();
}
public boolean isExist(int id){
Student unique = studentDao.queryBuilder().where(StudentDao.Properties.Id.eq(id)).unique();
if(unique == null){
return true;
}
return false;
}
}
4.使用时只需要调用myDataBaseHelper.getInstance. inset ... 就可以实现对数据库的增删改查
相关注解说明:
实体@Entity注解
schema:告知GreenDao当前实体属于哪个schema
active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
nameInDb:在数据库中使用的别名,默认使用的是实体的类名
indexes:定义索引,可以跨越多个列
createInDb:标记创建数据库表
基础属性注解
@Id:主键 Long 型,可以通过@Id(autoincrement = true)设置自增长
@Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "name")
@NotNull:设置数据库表当前列不能为空
@Transient:添加此标记后不会生成数据库表的列
索引注解
@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
@Unique:向数据库添加了一个唯一的约束
关系注解
@ToOne:定义与另一个实体(一个实体对象)的关系
@ToMany:定义与多个实体对象的关系
二. 为什么使用greenDAO
体积小(100k不到)
性能最大化
内存开销最小化
易于使用的 API
支持数据库加密