最详细GreenDao3.2的基本使用

来源:互联网 发布:addlistener js 编辑:程序博客网 时间:2024/05/21 08:44

转载请标明地址http://blog.csdn.net/qq_30034925/article/details/54729734
GreenDao官网说它是最好的数据库框架,我们也当真吧,反真它的更新进度给力,最近都有在更新。也使得我们android程序员使用起来越来越方便。至于为什么使用它这里不做多解析。进入正题。

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

    dependencies {             classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'    }

这里写图片描述

接着在model中的build.gradle中导入包

dependencies {    compile 'org.greenrobot:greendao:3.2.0'    compile 'org.greenrobot:greendao-generator:3.2.0'}

接着在模块build.gradle的顶部添加
apply plugin: ‘org.greenrobot.greendao’
以及

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

这里写图片描述

同步后就可以使用greenDao。

先来看看greenDao强大的自动生成代码功能
创建实体类

@Entitypublic class User {    @Id(autoincrement = true)    private Long id;    private String name;    private String sex;    private int age;    private int salary; }

我们字需要编写这些,大家应该看到,在最顶部有一个@Entity,这个标志告诉greenDao,这个是我需要生成的表。接着点击 Build -> Make Project(快捷键ctrl+F9),将会自动为我们生成需要的类和代码
生成的User类

@Entitypublic class User {    @Id(autoincrement = true)    private Long id;    private String name;    private String sex;    private int age;    private int salary;    @Generated(hash = 257789183)    public User(Long id, String name, String sex, int age, int salary) {        this.id = id;        this.name = name;        this.sex = sex;        this.age = age;        this.salary = salary;    }    @Generated(hash = 586692638)    public User() {    }    public Long getId() {        return this.id;    }    public void setId(Long id) {        this.id = id;    }    public String getName() {        return this.name;    }    public void setName(String name) {        this.name = name;    }    public String getSex() {        return this.sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public int getAge() {        return this.age;    }    public void setAge(int age) {        this.age = age;    }    public int getSalary() {        return this.salary;    }    public void setSalary(int salary) {        this.salary = salary;    }}

生成的类
这里写图片描述

创建App类,继承Application

public class App extends Application {    public static final boolean ENCRYPTED = true;    private DaoSession daoSession;    @Override    public void onCreate() {        super.onCreate();        DaoMaster.DevOpenHelper helper = new  DaoMaster.DevOpenHelper(this, ENCRYPTED ? "users-db-encrypted" : "users-db");        Database db =  helper.getWritableDb();        daoSession = new DaoMaster(db).newSession();    }    public DaoSession getDaoSession() {        return daoSession;    }}

tip:别忘记在manifeste把它添加进去
这里写图片描述

这个类起到防止重复创建数据库的操作。当然也可以使用单例模式来实现。

使用GreenDao进行增删改查

package com.example.jian.asked;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.RecyclerView;import com.example.greendao.gen.DaoSession;import com.example.greendao.gen.UserDao;import org.greenrobot.greendao.query.Query;import org.greenrobot.greendao.query.QueryBuilder;import java.util.List;public class MainActivity extends AppCompatActivity {    private Query<User> userQuery;    private RecyclerView recyclerView;    private MyAdapter myAdapter ;    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();    }    //插入数据    private void insertUser(){        User user = new User(null,"jianguotang", "男",18,2000);        userDao.insert(user);    }    //删除特定位置的数据    private void deleteUser(){        userDao.deleteByKey(5l);    }    /**     * 对位置 为position的的数据进行修改     * @param position     */    private void updateUser(Long position){        //查询id是1位置的数据       User user = userDao.load(5l);        //对其进行修改        user.setName("简国堂");        userDao.update(user);    }    //查询全部的数据    private List<User> queryList(){        List<User> users = userQuery.list();        return users;    }    /**     *  按照属性name和sex来查询user     * @param name     */    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;    }}

GreenDao注解

@Entity 用于标识这是一个需要Greendao帮我们生成代码的bean@Id 标明主键,括号里可以指定是否自增@Property 用于设置属性在数据库中的列名(默认不写就是保持一致)@NotNull 非空@Transient 标识这个字段是自定义的不会创建到数据库表里@Unique 添加唯一约束

@ToOne 是将自己的一个属性与另一个表建立关联(外键)
@ToMany的属性referencedJoinProperty,类似于外键约束。

@JoinProperty 对于更复杂的关系,可以使用这个注解标明目标属性的源属性。

4 0