greendao 使用和说明(附带个人写的utils)

引用最新版greendao
 implementation "org.greenrobot:greendao:3.2.2"
配置生成路径和版本号
greendao {
    schemaVersion 1
    daoPackage 'com.xk.greendao.db'
    targetGenDir 'src/main/java'
}

说明:版本号为1,生成文件放在com.xk.greendao.db下的这个路径里src/main/java.

点击Mark Project键,就会生成相关文件
image.png

image.png
greendao 表的注解说明(我为了方便就按照我的项目里建的表来说了)

表:

import com.xk.gvido.app.model.net.bean.video.VideoSimpleInfoBean;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Index;
import org.greenrobot.greendao.annotation.NotNull;
import org.greenrobot.greendao.annotation.Property;

import java.util.Date;

/**
 * @author Xiong Ke
 * @date 2017/10/19
 */
@Entity(nameInDb = "browsing_history")
public class BrowsingHistory {

    @Property(nameInDb = "_title")
    private String title;

    @Property(nameInDb = "_pic")
    private String pic;

    @Id
    @NotNull
    @Index(unique = true)
    @Property(nameInDb = "_dataId")
    private String dataId;

    @Property(nameInDb = "_score")
    private String score;

    @Property(nameInDb = "_airTime")
    private String airTime;

    @Property(nameInDb = "_moreURL")
    private String moreURL;

    @Property(nameInDb = "_loadURL")
    private String loadURL;

    @Property(nameInDb = "_duration")
    private String duration;

    @Property(nameInDb = "_description")
    private String description;

    @Property(nameInDb = "_angleIcon")
    private String angleIcon;

    @Property(nameInDb = "_roomId")
    private String roomId;

    @Property(nameInDb = "_shareURL")
    private String shareURL;

    @Property(nameInDb = "_loadType")
    private String loadType;

    @Property(nameInDb = "_browsingDate")
    private Date browsingDate;

    public static BrowsingHistory newInstance(VideoSimpleInfoBean videoSimpleInfoBean) {
        return new BrowsingHistory(videoSimpleInfoBean.title
                , videoSimpleInfoBean.pic
                , videoSimpleInfoBean.dataId
                , videoSimpleInfoBean.score
                , videoSimpleInfoBean.airTime
                , videoSimpleInfoBean.moreURL
                , videoSimpleInfoBean.loadURL
                , videoSimpleInfoBean.duration
                , videoSimpleInfoBean.description
                , videoSimpleInfoBean.angleIcon
                , videoSimpleInfoBean.roomId
                , videoSimpleInfoBean.shareURL
                , videoSimpleInfoBean.loadType
                , new Date());
    }

    @Generated(hash = 1357393467)
    public BrowsingHistory(String title, String pic, @NotNull String dataId,
                           String score, String airTime, String moreURL, String loadURL,
                           String duration, String description, String angleIcon, String roomId,
                           String shareURL, String loadType, Date browsingDate) {
        this.title = title;
        this.pic = pic;
        this.dataId = dataId;
        this.score = score;
        this.airTime = airTime;
        this.moreURL = moreURL;
        this.loadURL = loadURL;
        this.duration = duration;
        this.description = description;
        this.angleIcon = angleIcon;
        this.roomId = roomId;
        this.shareURL = shareURL;
        this.loadType = loadType;
        this.browsingDate = browsingDate;
    }

    @Generated(hash = 1959202334)
    public BrowsingHistory() {
    }

    public String getTitle() {
        return this.title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getPic() {
        return this.pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }

    public String getDataId() {
        return this.dataId;
    }

    public void setDataId(String dataId) {
        this.dataId = dataId;
    }

    public String getScore() {
        return this.score;
    }

    public void setScore(String score) {
        this.score = score;
    }

    public String getAirTime() {
        return this.airTime;
    }

    public void setAirTime(String airTime) {
        this.airTime = airTime;
    }

    public String getMoreURL() {
        return this.moreURL;
    }

    public void setMoreURL(String moreURL) {
        this.moreURL = moreURL;
    }

    public String getLoadURL() {
        return this.loadURL;
    }

    public void setLoadURL(String loadURL) {
        this.loadURL = loadURL;
    }

    public String getDuration() {
        return this.duration;
    }

    public void setDuration(String duration) {
        this.duration = duration;
    }

    public String getDescription() {
        return this.description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getAngleIcon() {
        return this.angleIcon;
    }

    public void setAngleIcon(String angleIcon) {
        this.angleIcon = angleIcon;
    }

    public String getRoomId() {
        return this.roomId;
    }

    public void setRoomId(String roomId) {
        this.roomId = roomId;
    }

    public String getShareURL() {
        return this.shareURL;
    }

    public void setShareURL(String shareURL) {
        this.shareURL = shareURL;
    }

    public String getLoadType() {
        return this.loadType;
    }

    public void setLoadType(String loadType) {
        this.loadType = loadType;
    }

    public Date getBrowsingDate() {
        return this.browsingDate;
    }

    public void setBrowsingDate(Date browsingDate) {
        this.browsingDate = browsingDate;
    }
}

说明:
a. @Entity(nameInDb = "browsing_history") 生成的表的名字
b.
@Id 表的主键
@Index(unique = true) 主键索引唯一
@Property(nameInDb = "_dataId") 键值得名字
c. 每次创建新表时,都要提高表的版本号,然后重新编辑


3.使用方法

public class AppDbHelper implements DbHelper {
    private static AppDbHelper appDbHelper;
    private static DaoSession mDaoSession;

    private AppDbHelper() {
    }

    public static AppDbHelper getInstance() {
        if (appDbHelper == null) {
            synchronized (AppDbHelper.class) {
                if (appDbHelper == null) {
                    appDbHelper = new AppDbHelper();
                }
            }
        }
        return appDbHelper;
    }

  //application中初始化
    public static void init(Application application){
        DaoMaster.DevOpenHelper dbOpenHelper = new DaoMaster.DevOpenHelper(application, DbConfig.DATABASE_NAME);
        Database db = dbOpenHelper.getWritableDb();
        mDaoSession = new DaoMaster(db).newSession();
        if (BuildConfig.DEBUG) {
            QueryBuilder.LOG_SQL = true;
            QueryBuilder.LOG_VALUES = true;
        }
    }

    @Override
    public Observable<Long> insertOrReplaceHotSearch(final List<SearchHotRecommend> searchHotRecommends) {
        return Observable.fromCallable(() -> {
            mDaoSession.getSearchHotRecommendDao().deleteAll();
            mDaoSession.getSearchHotRecommendDao().insertOrReplaceInTx(
                    searchHotRecommends.toArray(new SearchHotRecommend[searchHotRecommends.size()]));
            return 1L;
        });
    }

    @Override
    public Observable<List<SearchHotRecommend>> getHotSearch() {
        return Observable.just(mDaoSession.getSearchHotRecommendDao().loadAll());
    }

    @Override
    public Observable<Long> insertOrReplacePictures(final List<Picture> pictures) {
        return Observable.fromCallable(() -> {
            PictureDao pictureDao = mDaoSession.getPictureDao();
            pictureDao.insertOrReplaceInTx(pictures.toArray(new Picture[pictures.size()]));
            List<Picture> pictureList = pictureDao.loadAll();
            if (pictureList.size() > 200) {
                List<Picture> _pictureList = pictureList.subList(200, pictureList.size());
                pictureDao.deleteInTx(_pictureList.toArray(new Picture[_pictureList.size()]));
            }
            return 1L;
        });
    }

}

public class DbConfig {
    public static final String DATABASE_NAME = "gVideo";
}

说明:
DbHelper是我写的一个接口类,这个类来实现的.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,900评论 25 707
  • 安卓基础开发库,让开发简单点。DevRing & Demo地址:https://github.com/LJYcod...
    JYcoder阅读 7,826评论 6 20
  • (一)GreenDao简介 GreenDao是一个对象关系映射(ORM)的开源框架,目前最主流的安卓数据库操作框架...
    miss2008阅读 5,238评论 4 18
  • 总监今天让写预售总结,说实话这来的有点突然,我仿佛还没准备好但着实有太多的话想要表达。那就记录一下吧。现在是8.6...
    念美美阅读 833评论 5 7