GreenDao的配置使用

来源:互联网 发布:5c5c5c最新域名地址 编辑:程序博客网 时间:2024/06/05 02:40

    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 */@Entitypublic 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





原创粉丝点击