Greendao(android的数据库)的使用

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
支持数据库加密

你可能感兴趣的:(Greendao(android的数据库)的使用)