GreenDao的配置使用

本文介绍GreenDAO的安装配置及基本操作,包括实体类定义、数据库创建、数据增删改查等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    greenDAO是一款面向Android的轻便快捷的ORM,可将对象映射到SQLite数据库。 针对Android进行了高度优化,greenDAO提供了出色的性能并消耗了最少的内存。

    GitHub地址:点击打开链接

    GreenDao的优点如下:

    应用广泛:greenDAO自2011年以来一直在使用,被无数着名的应用程序所使用
    超简单:简洁直观的API,在V3中带有注释
    小:小于150K,它只是纯Java jar(没有CPU依赖的本机部分)
    快速:可能是由智能代码生成驱动的Android中最快的ORM
    安全和表达性的查询API:QueryBuilder使用属性常量来避免打字错误
    强大的连接:跨实体查询,甚至连接连接以进行复杂关系
    灵活的属性类型:使用自定义类或枚举来表示实体中的数据
    加密:支持SQLCipher加密数据库


一.使用准备

    1.在build.gradle(Module:app)中加入

    

compile 'org.greenrobot:greendao:3.0.1'
compile 'org.greenrobot:greendao-generator:3.0.0'


    2.在build.gradle(Module:app)中引入插件并自定义路径

apply plugin: 'org.greenrobot.greendao'

greendao {
    schemaVersion 1
    daoPackage 'com.example.leidong.greendaotest.gen'
    targetGenDir 'src/main/java'
}

    3.在build.gradle(Project:XXX)的dependencies中加入
   

classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
       

    4.创建一个User的Bean

    

package com.example.leidong.greendaotest.beans;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;

/**
 * Created by leidong on 2017/5/30
 */
@Entity
public class User {
    @Id(autoincrement = true)
    private Long id;
    private String name;
    private int age;
    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    @Generated(hash = 1309193360)
    public User(Long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    @Generated(hash = 586692638)
    public User() {
    }

}

    5.编译项目,生成新的文件,结构如下

   
    

二.GreenDao的简单使用

    1.新建一个MyApplication类继承自MyApplication。

    

package com.example.leidong.greendaotest;

import android.app.Application;
import android.database.sqlite.SQLiteDatabase;

import com.example.leidong.greendaotest.gen.DaoMaster;
import com.example.leidong.greendaotest.gen.DaoSession;

/**
 * Created by leidong on 2017/5/30
 */

public class MyApplication extends Application {
    private DaoMaster.DevOpenHelper mHelper;
    private SQLiteDatabase db;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    public static MyApplication instances;

    @Override
    public void onCreate() {
        super.onCreate();
        instances = this;
        setDatabase();
    }

    public static MyApplication getInstances(){
        return instances;
    }

    /**
     * 设置greenDao
     */
    private void setDatabase() {
        mHelper = new DaoMaster.DevOpenHelper(this, "leidong.db", null);
        db = mHelper.getWritableDatabase();
        // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
    }
    public DaoSession getDaoSession() {
        return mDaoSession;
    }
    public SQLiteDatabase getDb() {
        return db;
    }
}

在AndroidManifest.xml的application中写入:

android:name=".MyApplication"


2.MainActivity,java

package com.example.leidong.greendaotest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.example.leidong.greendaotest.beans.User;
import com.example.leidong.greendaotest.gen.UserDao;

import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private UserDao userDao;

    private EditText editText1, editText2, editText3;
    private TextView textView;
    private Button button1, button2, button3, button4;

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

        initWidgets();
        initActions();
    }

    /**
     * 获取组件
     */
    private void initWidgets() {
        editText1 = (EditText) findViewById(R.id.editText1);
        editText2 = (EditText) findViewById(R.id.editText2);
        editText3 = (EditText) findViewById(R.id.editText3);

        textView = (TextView) findViewById(R.id.textView);

        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);
        button4 = (Button) findViewById(R.id.button4);
    }

    /**
     * 初始化动作
     */
    private void initActions() {
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
        button4.setOnClickListener(this);
    }

    /**
     * 按钮点击事件
     * @param v 视图
     */
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button1:
                addUser();
                break;
            case R.id.button2:
                deleteUser();
                break;
            case R.id.button3:
                modifyUser();
                break;
            case R.id.button4:
                queryUser();
                break;
            default:
                break;
        }
    }

    /**
     * 查
     */
    private void queryUser() {
        StringBuilder sb = new StringBuilder();
        userDao = MyApplication.getInstances().getDaoSession().getUserDao();
        List<User> userList = userDao.loadAll();
        for(int i = 0; i < userList.size(); i++){
            String temp = "";
            temp += "ID = " + userList.get(i).getId() + " ";
            temp += "Name = " + userList.get(i).getName() + " ";
            temp += "Age = " + userList.get(i).getAge() + "\n";
            sb.append(temp);
        }
        textView.setText(sb.toString());
    }

    /**
     * 改
     */
    private void modifyUser() {
        long id = Long.parseLong(editText1.getText().toString().trim());
        String name = editText2.getText().toString().trim();
        int age = Integer.parseInt(editText3.getText().toString().trim());
        userDao = MyApplication.getInstances().getDaoSession().getUserDao();
        User user = new User();
        user.setId(id);
        user.setName(name);
        user.setAge(age);
        userDao.update(user);
    }

    /**
     * 删
     */
    private void deleteUser() {
        long id = Long.parseLong(editText1.getText().toString().trim());
        userDao = MyApplication.getInstances().getDaoSession().getUserDao();
        userDao.deleteByKey(id);
    }

    /**
     * 增
     */
    private void addUser() {
        String name = editText2.getText().toString().trim();
        int age = Integer.parseInt(editText3.getText().toString().trim());

        userDao = MyApplication.getInstances().getDaoSession().getUserDao();
        User user = new User();
        user.setName(name);
        user.setAge(age);
        userDao.insert(user);
    }
}

3.activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    tools:context="com.example.leidong.greendaotest.MainActivity">

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/textInputLayout">

        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="ID" />
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textInputLayout"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="16dp"
        android:id="@+id/textInputLayout2">

        <EditText
            android:id="@+id/editText2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Name" />
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textInputLayout2"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="16dp"
        android:id="@+id/textInputLayout3">

        <EditText
            android:id="@+id/editText3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Age" />
    </android.support.design.widget.TextInputLayout>

    <TextView
        android:id="@+id/textView"
        android:background="@drawable/fillet"
        android:textSize="16sp"
        android:textColor="#ffffff"
        android:padding="16dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/textInputLayout3"
        android:layout_above="@+id/linearLayout" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:orientation="horizontal"
        android:weightSum="4"
        android:layout_marginTop="8dp"
        android:id="@+id/linearLayout">
        <Button
            android:id="@+id/button1"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="36dp"
            android:text="Add"
            android:textAllCaps="false"
            android:background="@drawable/fillet"/>

        <Button
            android:id="@+id/button2"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="36dp"
            android:text="Delete"
            android:textAllCaps="false"
            android:background="@drawable/fillet"/>

        <Button
            android:id="@+id/button3"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="36dp"
            android:text="Modify"
            android:textAllCaps="false"
            android:background="@drawable/fillet"/>

        <Button
            android:id="@+id/button4"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="36dp"
            android:text="Query"
            android:textAllCaps="false"
            android:background="@drawable/fillet"/>
    </LinearLayout>
</RelativeLayout>

其中需要在build.gradle中引入:

compile 'com.android.support:design:23.4.0'

三.运行结果





工程下载:https://github.com/leidongld/GreenDaoTest





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值