Android數據庫操作--greenDAO的入門使用

目前android經常用的orm框架主要有greenDAO、OrmLite、AndrORM。其中greenDAO的運行效率最高,內存消耗最少,性能最佳。
這裏寫圖片描述

greenDAO是一個可以快速將Java對象映射到SQLite數據庫的表單中的ORM解決方案。設計的主要目標:一個精簡的庫;性能最大化;內存開銷最小化;易於使用的APIs;對Android進行高度優化。
GreenDAO3.0之前需要通過新建GreenDaoGenerator工程生成java數據對象(實體)和DAO對象,非常的繁瑣而且也加大了使用成本。GreenDAO3.0最大的變化就是採用註解的方式通過編譯生成java數據對象和DAO對象。
下面是使用步驟:

第一步,在build.gradle添加設置

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
    }
}

apply plugin: 'org.greenrobot.greendao'

greendao {
schemaVersion 1000
    targetGenDir 'src/main/java'
    daoPackage 'com.chinaso.greendaodemo'
}

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

第二步,新建實體類,例如user:

@Entity
public class User {
    @Id
    private Long id;
    private String name;
    private int age;

   //下面省去了 setter/getter
}

此時編譯自動生成DAOMaster\DaoSession\Dao,默認位置build->generated->source->greenDao.如果第一步設置了greendao{}則在定義的包下生成。

第三步,第三步:通過上面使用的方式獲取DAOMaster、DAOSession、DAO類,然後數據庫管理者類

package com.chinaso.dagger_demo.db;

import android.content.Context;

import com.chinaso.dagger_demo.App;
import com.chinaso.greendaodemo.DaoMaster;
import com.chinaso.greendaodemo.DaoSession;
import com.chinaso.greendaodemo.UserDao;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

public class DBManager {
    private static DBManager mInstance;
    private static DaoMaster.DevOpenHelper openHelper;
    private static Context mContext;
    private UserDao userDao;
    private DBManager() {
    }

    public static DBManager getInstance(Context context) {
        if (mInstance == null) {
            synchronized ((DBManager.class)) {
                mContext = context;
                mInstance = new DBManager();
                DaoSession daoSession = App.getDaoSession(mContext);
                mInstance.userDao = daoSession.getUserDao();
            }
        }
        return mInstance;
    }

    public void insertUser(User user) {
        userDao.insert(user);
    }

    public void insertUserList(List<User> users) {
        if (users == null || users.isEmpty()) {
            return;
        }
        userDao.insertInTx(users);
    }

    public void deleteUser(User user) {
        userDao.delete(user);
    }

    public void deleteAll() {
        userDao.deleteAll();
    }

    public void updateUser(User user) {
        userDao.update(user);
    }

    public List<User> queryUserList() {
        QueryBuilder<User> qb = userDao.queryBuilder();
        List<User> list = qb.list();
        return list;
    }

    public List<User> queryUserList(int age) {
        QueryBuilder<User> qb = userDao.queryBuilder();
        qb.where(UserDao.Properties.Age.gt(age)).orderAsc(UserDao.Properties.Age);
        List<User> list = qb.list();
        return list;
    }

}

其中App:

public class App extends Application {
    public final static String dbName = "test_db";
    private static DaoMaster daoMaster;
    private static DaoSession daoSession;

    public static DaoMaster getDaoMaster(Context context)
    {
        if (daoMaster == null)
        {
            DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(context, dbName, null);
            daoMaster = new DaoMaster(helper.getWritableDatabase());
        }
        return daoMaster;
    }

    public static DaoSession getDaoSession(Context context)
    {
        if (daoSession == null)
        {
            if (daoMaster == null)
            {
                daoMaster = getDaoMaster(context);
            }
            daoSession = daoMaster.newSession();
        }
        return daoSession;
    }
}

第四步,使用

 userList = dbManager.queryUserList();
        int len = userList.size();
        User user = new User();
        user.setId(new Long((long) len));
        user.setAge(len * 3);
        user.setName("第" + len + "人");
        dbManager.insertUser(user);
        userList = dbManager.queryUserList();
        int leng = userList.size();
        for (int i = 0; i userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("db", "insertDB:name=" + user.getName() + "; age=" + user.getAge());
            result.append("insertDB:name="+user.getName()+"; age="+user.getAge() + "\n");
        }
        dbResultTV.setText(result.toString());
    }

    @OnClick(R.id.deleteBtn)
    public void deleteBtn() {
        result.delete(0,result.length());
        DBManager dbManager = DBManager.getInstance(FullscreenActivity.this);
        List userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("db", "insertDB:name=" + user.getName() + "; age=" + user.getAge());
            if (user.getId() == 0) {
                dbManager.deleteUser(user);
            }
        }
        userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("db", "insertDB:name=" + user.getName() + "; age=" + user.getAge());
            result.append("insertDB:name="+user.getName()+"; age="+user.getAge() + "\n");
        }
        dbResultTV.setText(result.toString());
    }

    @OnClick(R.id.updateBtn)
    public void updateBtn() {
        result.delete(0,result.length());
        DBManager dbManager = DBManager.getInstance(FullscreenActivity.this);
        List userList = dbManager.queryUserList();
        for (User user:userList) {
            if (user.getId() == 3) {
                user.setAge(10);
                user.setName("張三");
                dbManager.updateUser(user);
            }
        }
        userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("db", "insertDB:name=" + user.getName() + "; age=" + user.getAge());
            result.append("insertDB:name="+user.getName()+"; age="+user.getAge() + "\n");
        }
        dbResultTV.setText(result.toString());
    }
}
" data-snippet-id="ext.4d23e3032f50bf4d49c22159ef1437ef" data-snippet-saved="false" data-codota-status="done">package com.chinaso.dagger_demo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;

import com.chinaso.dagger_demo.db.DBManager;
import com.chinaso.dagger_demo.db.User;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class FullscreenActivity extends AppCompatActivity {
    @BindView(R.id.insertBtn)
    Button insertBtn;
    @BindView(R.id.queryListBtn)
    Button queryListBtn;
    @BindView(R.id.deleteBtn)
    Button deleteBtn;
    @BindView(R.id.updateBtn)
    Button updateBtn;
    @BindView(R.id.dbResultTV)
    TextView dbResultTV;

    StringBuilder result = new StringBuilder();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fullscreen);

        ButterKnife.bind(this);

        initDB();
    }

    private void initDB() {
        result.delete(0,result.length());
        DBManager dbManager = DBManager.getInstance(FullscreenActivity.this);
        dbManager.deleteAll();
        for (int i = 0; i < 5; i++){
            User user = new User();
            user.setId(new Long((long) i));
            user.setAge(i * 10);
            user.setName("第" + i + "人");
            dbManager.insertUser(user);
            result.append("insertDB:name="+user.getName()+"; age="+user.getAge() + "\n");
        }
        dbResultTV.setText(result.toString());
    }

    @OnClick(R.id.insertBtn)
    public void insertDB() {
        result.setLength(0);
        DBManager dbManager = DBManager.getInstance(FullscreenActivity.this);
        List<User> userList = dbManager.queryUserList();
        int len = userList.size();
        User user = new User();
        user.setId(new Long((long) len));
        user.setAge(len * 3);
        user.setName("第" + len + "人");
        dbManager.insertUser(user);
        userList = dbManager.queryUserList();
        int leng = userList.size();
        for (int i = 0; i<leng;i++){
            User u = userList.get(i);
            Log.e("db", "insertDB:name="+u.getName()+"; age="+u.getAge());
            result.append("insertDB:name="+u.getName()+"; age="+u.getAge() + "\n");
        }
        dbResultTV.setText(result.toString());
    }

    @OnClick(R.id.queryListBtn)
    public void queryListDB() {
        result.delete(0,result.length());
        DBManager dbManager = DBManager.getInstance(FullscreenActivity.this);
        List<User> userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("db", "insertDB:name=" + user.getName() + "; age=" + user.getAge());
            result.append("insertDB:name="+user.getName()+"; age="+user.getAge() + "\n");
        }
        dbResultTV.setText(result.toString());
    }

    @OnClick(R.id.deleteBtn)
    public void deleteBtn() {
        result.delete(0,result.length());
        DBManager dbManager = DBManager.getInstance(FullscreenActivity.this);
        List<User> userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("db", "insertDB:name=" + user.getName() + "; age=" + user.getAge());
            if (user.getId() == 0) {
                dbManager.deleteUser(user);
            }
        }
        userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("db", "insertDB:name=" + user.getName() + "; age=" + user.getAge());
            result.append("insertDB:name="+user.getName()+"; age="+user.getAge() + "\n");
        }
        dbResultTV.setText(result.toString());
    }

    @OnClick(R.id.updateBtn)
    public void updateBtn() {
        result.delete(0,result.length());
        DBManager dbManager = DBManager.getInstance(FullscreenActivity.this);
        List<User> userList = dbManager.queryUserList();
        for (User user:userList) {
            if (user.getId() == 3) {
                user.setAge(10);
                user.setName("張三");
                dbManager.updateUser(user);
            }
        }
        userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("db", "insertDB:name=" + user.getName() + "; age=" + user.getAge());
            result.append("insertDB:name="+user.getName()+"; age="+user.getAge() + "\n");
        }
        dbResultTV.setText(result.toString());
    }
}

參考:

1、官方地址:http://greenrobot.org/greendao/
2、官方demo:https://github.com/greenrobot/greenDAO
http://greenrobot.org/greendao/documentation/introduction/
3、Android數據存儲之GreenDao 3.0 詳解:http://www.cnblogs.com/whoislcj/p/5651396.html

發佈了82 篇原創文章 · 獲贊 33 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章