欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GreenDao的简单使用

程序员文章站 2022-03-20 14:51:32
...

1.  添加依赖

      1.1在项目的gradle里面的repositories添加

 mavenCentral()

     1.2 在项目的gradle里面的dependencies添加

  classpath 'com.android.tools.build:gradle:3.1.1'
  classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin

  1.3 在medo的gradle里面的android添加

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

1.4在medo的gradle里面的最上添加

apply plugin: 'org.greenrobot.greendao' 

1.5在medo的gradle里面的dependencies添加

 implementation 'org.greenrobot:greendao:3.2.2'

2.在Application里面写入

package com.example.greendao;

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

import com.greendao.gen.DaoMaster;
import com.greendao.gen.DaoSession;

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;
    }
    private void setDatabase() {
        // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
        // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO已经帮你做了。
        // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
        // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。

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


3.写javaBean

@Entity //表示这个实体类一会会在数据库中生成对应的表
public class User {

    @Id // 表示该字段是id,注意该字段的数据类型为包装类型Long
    private Long id;
     @Property(nameInDb = "NAME") //则表示该属性将作为表的一个字段,其中nameInDb看名字就知道这个属性在数据库中对应的数据名称。
    private String name;

    @Transient //该注解表示这个属性将不会作为数据表中的一个字段。
    private int tempUsageCount; // not persisted
}

写完之后按Shift+F12进行自动编写greenDao

4进行增删改查
 

package com.example.greendao;

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

import com.greendao.gen.UserDao;

import org.greenrobot.greendao.query.QueryBuilder;
import org.greenrobot.greendao.query.WhereCondition;

import java.util.List;
import java.util.Random;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button zeng;
    private Button shan;
    private Button gai;
    private Button cha;
    private UserDao mUserDao;
    private TextView mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        mUserDao = MyApplication.getInstances().getDaoSession().getUserDao();

    }

    private void initView() {
        zeng = (Button) findViewById(R.id.zeng);
        shan = (Button) findViewById(R.id.shan);
        gai = (Button) findViewById(R.id.gai);
        cha = (Button) findViewById(R.id.cha);

        zeng.setOnClickListener(this);
        shan.setOnClickListener(this);
        gai.setOnClickListener(this);
        cha.setOnClickListener(this);
        mContext = (TextView) findViewById(R.id.mContext);
        mContext.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.zeng:
                for (int i = 0; i < 10; i++) {
                    Random mrandom = new Random();
                    int m = mrandom.nextInt();
                    User mUser = new User((long) i, "anye3"+m);
                    mUserDao.insert(mUser);//添加一个\
                    //mUserDao.insertOrReplace(mUser);
                }
                //mUserDao.insertOrReplace(mUser);//insertOrReplace()数据存在则替换,数据不存在则插入
                break;
            case R.id.shan:
                //mUserDao.deleteByKey((long)2);// 删除id
                //daoSession.delete(s);
                mUserDao.deleteAll();
               //删除有两种方式:删除()和deleteAll();分别表示删除单个和删除所有。
                break;
            case R.id.gai:
                User mUser = new User((long) 2, "anye0803");
                mUserDao.update(mUser);
                break;
            case R.id.cha:
                //LOADALL():查询所有数据。
                //queryRaw():根据条件查询。 List<User> user = daoSession.queryRaw(User.class, " where id = ?", s);
                List<User> users = mUserDao.loadAll();
                String userName = "";

                QueryBuilder<User> qb = mUserDao.queryBuilder();

                //List<User> list1 = qb.list();
                List<User> list = qb.orderDesc(UserDao.Properties.Id).list();
                //qb.where(new WhereCondition.StringCondition("")).list();
                StringBuffer stringBuffer = new StringBuffer();
                for (int i = 0; i < list.size(); i++) {
                    String name = list.get(i).getName();
                    stringBuffer.append(name);
                }
                mContext.setText("查询全部数据==>" + stringBuffer);


                /*for (int i = 0; i < users.size(); i++) {
                    userName += users.get(i).getName() + ",";
                }
                mContext.setText("查询全部数据==>" + userName);*/

                break;
        }
    }
}

相关博客:https://blog.csdn.net/CrazyMo_/article/details/54629916

                https://blog.csdn.net/qq_25412055/article/details/52795295\

https://www.jianshu.com/p/53083f782ea2