GreenDao的配置和初步使用

2019-01-21  本文已影响0人  红茶炒饭

GreenDao

数据库存储操作会耗时,大量的byte数据的存储会造成OOM 所以最好写在子线程中

第一步

首先我们需要在项目build.gradle中导入包

classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
build.gradle

第二步

依赖

implementation 'org.greenrobot:greendao:3.2.0'
implementation 'org.greenrobot:greendao-generator:3.2.0'

顶部声明

apply plugin: 'org.greenrobot.greendao'
注意标注

这里注意一下!

注意标注

加入这些 代码
这些 代码 如果没有 特殊的 需求 不用 加 不会影响这个程序! 这里注意

 greendao {
        schemaVersion 1
        daoPackage 'ash.com.greendao_20181212.greendao'//这个是生成代码保存的包名
        targetGenDir 'src/main/java'//保存到java代码路径
    }
生成位置

第三步

随意建立,或者是按照你的需求 建立一个 bean类 用来存放数据库中的数据

注解 作用
@Entity 用于标识这是一个需要Greendao帮我们生成代码的bean
@Id 标明主键,括号里可以指定是否自增
@Property 用于设置属性在数据库中的列名(默认不写就是保持一致)
@NotNull 非空
@Transient 标识这个字段是自定义的不会创建到数据库表里
@Unique 添加唯一约束
----
----
@ToOne 将自己的一个属性与另一个表建立关联(外键)
@ToMany referencedJoinProperty,类似于外键约束
@JoinProperty 对于更复杂的关系,可以使用这个注解标明目标属性的源属性
----
           //数据表         名
@Entity(nameInDb = "user")

//规范命名  什么表 就是什么类 
public class User {
        //上面介绍了
    @Id(autoincrement = true)
    private Long id;     //Long 大写! 注意!

    private String name;
    private String sex;
    private int age;
    private int salary;
}

然后接着点击 Build -> Make Project(快捷键ctrl+F9) , 将会自动为我们生成需要的类和代码
你自动生成的 文件夹 下 会生成 一个 跟你 bean类 有关的 Dao 文件

第四步

在新建一个App类 继承 Application

public class App extends Application {

          private DaoSession daoSession;

          @Override
          public void onCreate() {
              super.onCreate();

              DaoMaster.DevOpenHelper helper =
                                                                                        
                             new  DaoMaster.DevOpenHelper(this, "数据库名字-db");
                                                    //参数1:上下文
                                                    //参数2:String 数据库名字! 
              Database db =  helper.getWritableDb();
              daoSession = new DaoMaster(db).newSession();

          }

          public DaoSession getDaoSession() {
              return daoSession;
          }
}
生成位置

有App 就一定 要 在清单文件中声明 !

生成位置

第五步

public class MainActivity extends AppCompatActivity {

    private Query<User> userQuery;
    UserDao userDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DaoSession daoSession =((App) getApplication()).getDaoSession();
        userDao = daoSession.getUserDao();
        userQuery = userDao.queryBuilder().orderAsc(UserDao.Properties.Id).build();

    
        insertUser();
        List<User> users = queryList();
        Toast.makeText(this, users.get(0).getName(), Toast.LENGTH_SHORT).show();
    }

插入数据
!!!--- ID(主键)必须是Long类型 而不是 long 类型 否则不会自增 l (L)

    private void insertUser(){                          
        User user = new User(1l,"ash", "男",26,50000);
        userDao.insert(user);
    }

删除特定位置的数据 注意 ID 位置

    private void deleteUser(){
        userDao.deleteByKey(1l);
    }

对位置 为position的的数据进行修改

    private void updateUser(){
        //查询id是1位置的数据
        User user = userDao.load(1l);
        //对其进行修改
        user.setName("~~");
        userDao.update(user);

    }

查询全部的数据

 private List<User> queryList(){
     List<User> users = userQuery.list();
     return users;
 }

按照属性name和sex来查询user

    private List<User> queryByName(String name,String sex){
        QueryBuilder<User> builder = userDao.queryBuilder();
        Query<User> query = builder
                .where(UserDao.Properties.Name.eq(name),UserDao.Properties.Sex.eq(sex))
                .build();
        List<User> list = query.list();
        return  list;
    }
上一篇下一篇

猜你喜欢

热点阅读