关于第三方开源库GreenDao的使用心得

简介:GreenDao是一个用于操作Sqlite数据库的开源ORM框架,可以很方便的对数据库进行对象映射,增删改查等操作。优点是效率方面在类似框架中是最高的
使用步骤:
1、从github上将项目下载下来,导入开发工具。下载地址:https://github.com/greenrobot/greenDAO
2、其中有两个java项目,这两个java项目是用于生成bean文件和DaoMaster、DaoSession文件的,在示例文件中添加指定的bean,设置属性后运行java项目。此处注意,该项目运行java项目时,需要导入freemarker-xxx.jar,下载地址:http://freemarker.org/freemarkerdownload.html; 指定生成的目录时要填写src-gen,该目录必须在android项目中创建好,否则会报错;要写android项目的包名及项目路径
3、生成完后,在android项目中刷新src-gen目录后找到生成的文件,在自定义application中,添加两个方法

    /**
     * 取得DaoMaster
     * 
     * @param context
     * @return
     */
    public static DaoMaster getDaoMaster(Context context) {
        if (daoMaster == null) {
            OpenHelper helper = new DaoMaster.DevOpenHelper(context,
                    Constants.DB_NAME, null);
            daoMaster = new DaoMaster(helper.getWritableDatabase());
        }
        return daoMaster;
    }

    /**
     * 取得DaoSession
     * 
     * @param context
     * @return
     */
    public static DaoSession getDaoSession(Context context) {
        if (daoSession == null) {
            if (daoMaster == null) {
                daoMaster = getDaoMaster(context);
            }
            daoSession = daoMaster.newSession();
        }
        return daoSession;
    }

4、然后创建数据库操作类

package com.example.android.dao;

import java.util.List;

import org.apache.http.client.methods.HttpUriRequest;

import com.example.android.Cookie;
import com.example.android.CookieDao;
import com.example.android.DaoSession;
import com.example.android.Note;
import com.example.android.NoteDao;
import com.example.android.app.MyApplication;
import com.example.android.utils.CommonUtils;
import com.example.android.utils.LogUtils;

import android.content.Context;

/**
 * 测试数据库操作类,用于操作sqlite
 * 
 * @author Ht
 * 
 */
public class MyCookieDao {
    private static MyCookieDao mInstance;
    private DaoSession mDaoSession;

    private CookieDao cookieDao;

    private MyCookieDao() {
    }

    public static MyCookieDao getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new MyCookieDao();
            mInstance.mDaoSession = MyApplication.getDaoSession(context);
            mInstance.cookieDao = mInstance.mDaoSession.getCookieDao();
        }

        return mInstance;
    }

    /**
     * 增加或修改某条数据
     * 
     * @param note
     */
    public void saveCookie(Cookie cookie) {
        cookieDao.insertOrReplace(cookie);
    }

    /**
     * 批量添加数据(开启线程)
     * 
     * @param list
     */
    public void saveCookieLists(final List<Cookie> list) {
        if (list == null || list.isEmpty()) {
            return;
        }
        cookieDao.getSession().runInTx(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < list.size(); i++) {
                    Cookie cookie = list.get(i);
                    // 查询要插入的数据是否已存在
                    Cookie cacheCookie = queryCookie("where KEY=?",
                            cookie.getKey());
                    // 没有有效期的Cookie无需存储
                    if (cookie.getExpires() != null) {
                        // 已存在的Cookie直接更新
                        if (cacheCookie != null) {
                            cookie.setId(cacheCookie.getId());
                        }

                        cookieDao.insertOrReplace(cookie);
                    }
                }
            }
        });
    }

    /**
     * 删除指定id的数据
     * 
     * @param id
     */
    public void deleteCookie(long id) {
        cookieDao.deleteByKey(id);
    }

    /**
     * 删除指定的数据
     * 
     * @param note
     */
    public void deleteCookie(Cookie cookie) {
        cookieDao.delete(cookie);
    }

    /**
     * 删除全部数据
     */
    public void deleteAllCookie() {
        cookieDao.getSession().runInTx(new Runnable() {

            @Override
            public void run() {
                cookieDao.deleteAll();
            }
        });
    }

    /**
     * 查找指定数据
     * 
     * @param id
     * @return
     */
    public Cookie loadCookie(long id) {
        return cookieDao.load(id);
    }

    /**
     * 查找全部数据
     * 
     * @return
     */
    public List<Cookie> loadAllCookie() {
        return cookieDao.loadAll();
    }

    /**
     * 获取当前Cookie
     * 
     * @return
     */
    public String getCookiesHeader(String url) {
        List<Cookie> cookies = loadAllCookie();
        StringBuilder cookieStr = new StringBuilder();
        for (int i = 0; i < cookies.size(); i++) {
            // 验证Cookie的有效性
            if (CommonUtils.checkCookie(url, cookies.get(i))) {
                // 验证通过,拼接Cookie
                if (i == cookies.size() - 1) {
                    cookieStr.append(cookies.get(i).getKey() + "="
                            + cookies.get(i).getValue());
                } else {
                    cookieStr.append(cookies.get(i).getKey() + "="
                            + cookies.get(i).getValue() + ";");
                }
            } else {
                // 验证不通过,删除无效Cookie
                deleteCookie(cookies.get(i));
            }
        }
        return cookieStr.toString();
    }

    /**
     * 根据条件查找多条数据
     * 
     * @param where
     * @param params
     * @return
     */
    public List<Cookie> queryCookies(String where, String... params) {
        return cookieDao.queryRaw(where, params);
    }

    /**
     * 根据条件查找单条数据
     * 
     * @param where
     * @param params
     * @return
     */
    public Cookie queryCookie(String where, String... params) {
        List<Cookie> queryRaw = cookieDao.queryRaw(where, params);
        if (queryRaw != null && queryRaw.size() > 0)
            return queryRaw.get(0);
        return null;
    }

}

总结:在使用时直接调用对应的方法即可,可根据需求自定义数据库操作类,非常方便和高效的使用方式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值