GreenDao的配置及数据库基本的增删改查

官方Api: http://greenrobot.org/greendao/

介绍:
greenDAO是一个开源的Android ORM,使SQLite数据库的开发再次变得有趣。它减轻了开发人员处理低级数据库需求的同时节省了开发时间。SQLite是一个很棒的嵌入式关系数据库。尽管如此,编写SQL和解析查询结果仍然是一项非常繁琐且耗时的任务。greenDAO通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”)将您从这些中解放出来。这样,您可以使用简单的面向对象的API来存储,更新,删除和查询Java对象。
在这里插入图片描述

为什么使用GreenDao:
最高性能(可能是Android上最快的ORM); 我们的基准也是开源的
易于使用的强大API,涵盖关系和连接
最小的内存消耗
小库大小(<100KB)以保持较低的构建时间并避免65k方法限制
数据库加密:greenDAO支持SQLCipher,以确保用户的数据安全
强大的社区:超过5000个GitHub明星表明有一个强大而活跃的社区

开始配置:
1.在根build.gradle中进行配置

repositories {
         ...
        mavenCentral()//添加存储库
    }
dependencies {
        ...
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
        ...
    }

2.在module的build.gradle中进行配置

//2.1放到最外层
apply plugin: 'org.greenrobot.greendao'
//2.2
greendao {
    schemaVersion 1//数据库版本号
    daoPackage 'com.wjh.greendao.gd'//设置DaoMaster、DaoSession、Dao包名
    targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
    //targetGenDirTest:设置生成单元测试目录
    //generateTests:设置自动生成单元测试用例
}
//2.3添加依赖
dependencies {
   ...
    //2.1添加依赖
    implementation 'org.greenrobot:greendao:3.2.2'
}

创建bean

@Entity
public class Student {
    @Id(autoincrement = true)//id自增
    private Long id;//学院id

    @Index(unique = true)//唯一性
    private String no; //学生编号

    private String name;//学生姓名

    private String sex ;//学生性别

    private String score; //学生成绩

写到这一步需要点击
在这里插入图片描述
会自动生成下面的数据

@Entity
public class Student {
    @Id(autoincrement = true)//id自增
    private Long id;//学院id

    @Index(unique = true)//唯一性
    private String no; //学生编号

    private String name;//学生姓名

    private String sex ;//学生性别

    private String score; //学生成绩

    @Generated(hash = 1292949398)
    public Student(Long id, String no, String name, String sex, String score) {
        this.id = id;
        this.no = no;
        this.name = name;
        this.sex = sex;
        this.score = score;
    }
    @Generated(hash = 1556870573)
    public Student() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getNo() {
        return this.no;
    }
    public void setNo(String no) {
        this.no = no;
    }
    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 String getScore() {
        return this.score;
    }
    public void setScore(String score) {
        this.score = score;
    }
}

这个目录是刚才配置的时候写的目录要是不写路径的话会默认到gradle中
在这里插入图片描述

相关的注解说明:


实体@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:定义与多个实体对象的关系

ok在我们配置好环境以及Bean类的话,下面就开始进入主代码:增、删、改、查

首先就是初始化,最好在Application中配置,一次配置全局调用

/**
 * date:2018/11/29
 * author:辉(家辉辉辉)
 * function:初始化数据库
 */
public class MyApplication extends Application {

    //数据库名
    private static final String DATA_NAME = "stu.db";
    private static DaoSession mDaoSession;

    @Override
    public void onCreate() {
        super.onCreate();
        setupDataBase(this);
    }

    //初始化GreenDao
    private void setupDataBase(Context context){
        //创建数据表
        DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(context, DATA_NAME, null);
        Database db = openHelper.getWritableDb();
        DaoMaster daoMaster = new DaoMaster(db);
        //获取数据库dao
        mDaoSession = daoMaster.newSession();
    }

    //返回操作数据库的对象
    public static DaoSession getDataSession(){
        return mDaoSession;
    }

}

重要的一步就是去清单文件上面注册

MainActivity代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView title;
    private Button add;
    private Button remove;
    private Button update;
    private Button query;
    private DaoSession mDaoSession;
    private Student mStudent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        initView();

        //获取数据库操作对象
        mDaoSession = MyApplication.getDataSession();

    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.add://添加
                //通过有参向student赋值
                mStudent = new Student(null, "灰灰", "男", "87.5");
                try {
                    //添加
                    mDaoSession.getStudentDao().insert(mStudent);
                } catch (Exception e) {
                    title.setText("插入失败");
                }
                Toast.makeText(this, "增加成功", Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove://删除

                /*deleteBykey(Long key) :根据主键删除一条记录。
                  delete(User entity) :根据实体类删除一条记录,一般结合查询方法,查询出一条记录之后删除。
                  deleteAll(): 删除所有记录。*/
                try {
                    mDaoSession.getStudentDao().deleteAll();
                } catch (Exception e) {
                    title.setText("删除失败");
                }
                Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();

                break;
            case R.id.update://修改

                try {
                    //重新设置name的值
                    mStudent.setName("小辉辉");
                    mDaoSession.getStudentDao().update(mStudent);
                } catch (Exception e) {
                    title.setText("更新数据失败");
                }
                Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
                break;
            case R.id.query://查询
                /*loadAll():查询所有记录
                  load(Long key):根据主键查询一条记录
                  queryBuilder().list():返回:List
                  queryBuilder().where(UserDao.Properties.Name.eq("")).list():返回:List
                  queryRaw(String where,String selectionArg):返回:List*/

                //查询全部
                List<Student> students = mDaoSession.getStudentDao().loadAll();
                //获取name可以加for循环
                String name = students.get(0).getName();
                Toast.makeText(this, ""+name, Toast.LENGTH_SHORT).show();

                break;
        }
    }

    //初始化控件
    private void initView() {
        title = findViewById(R.id.title);
        add = findViewById(R.id.add);
        remove = findViewById(R.id.remove);
        update = findViewById(R.id.update);
        query = findViewById(R.id.query);

        add.setOnClickListener(this);
        remove.setOnClickListener(this);
        update.setOnClickListener(this);
        query.setOnClickListener(this);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值