GreenDao基礎(chǔ)使用

Android常用的數(shù)據(jù)庫框架OrmLite,GreenDao,Realm等等,當(dāng)然數(shù)據(jù)庫語句熟悉的完全可以使用原生的SQLite,但是個人還是喜歡使用GreenDao,方便輕量,支持緩存,支持?jǐn)?shù)據(jù)庫加密,稍微記錄一下,畢竟不是所有的項目都使用數(shù)據(jù)庫,很多項目SP就能完全夠用,

環(huán)境配置:
在project的build.gradle文件里

dependencies {
         .....
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

在App的build.gradle文件下進(jìn)行如下配置 (注釋的地方就是要添加的東西)

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
android {
       ........
   defaultConfig {
             ........
    }

    greendao {
     schemaVersion 1 //數(shù)據(jù)庫版本
     targetGenDir 'src/main/java' //指定生成代碼的目錄
     daoPackage //生成代碼到具體包下
     }
}
dependencies {
 ...............
 implementation 'org.greenrobot:greendao:3.2.2' // add library
}

環(huán)境配置完畢,然后同步一下,ok了
在Application里面配置創(chuàng)建數(shù)據(jù)庫

public class MyApplication extends Application {

    private static DaoSession daoSession;
    @Override
    public void onCreate() {
        super.onCreate();
        ......
        initDatebase();
    }

    private void initDatebase(){
        //創(chuàng)建數(shù)據(jù)庫user.db
        DaoMaster.DevOpenHelper helper=new DaoMaster.DevOpenHelper(this,"user.db",null);
        //獲取可寫數(shù)據(jù)庫
        SQLiteDatabase db=helper.getWritableDatabase();
        //獲取數(shù)據(jù)庫對象
        DaoMaster daoMaster=new DaoMaster(db);
        //獲取Dao對象管理者
        daoSession=daoMaster.newSession();
    }
    public static DaoSession getDaoInstant(){
        return daoSession;
    }
}

數(shù)據(jù)庫創(chuàng)建好了,然后就是建表,GreenDao3.0之前還是有點麻煩,3.0之后就直接寫實體類,用注解就好了

@Entity //@Entity:告訴GreenDao該對象為實體矾瑰,只有被@Entity注釋的Bean類才能被dao類操作
public class User {
   //@Id:對象的Id,使用Long類型作為EntityId隘擎,否則會報錯殴穴。(autoincrement = true)表示主鍵會自增,如果false就會使用舊值
    @Id(autoincrement = true)
    private Long id;
//@Unique:該屬性值必須在數(shù)據(jù)庫中是唯一值
//@NotNull:屬性不能為空
    @Unique @NotNull
    private int UserId;

    private String userName;

    private String userHead;

    private int age;

    private String Token;

    //@Property:可以自定義字段名嵌屎,注意外鍵不能使用該屬性
    //@Transient:使用該注釋的屬性不會被存入數(shù)據(jù)庫的字段中
    //@Generated:編譯后自動生成的構(gòu)造函數(shù)、方法等的注釋恍涂,提示構(gòu)造函數(shù)宝惰、方法等不能被修改
}

寫好注解build一下實體類會生成get,set方法和DaoMaster,DaoSession,HistoryDataDao類

----增刪改查

增
MyApplication.getDaoInstant().getUserDao().insert(user);

刪
MyApplication.getDaoInstant().getUserDao().deleteByKey(id);

改
 MyApplication.getDaoInstant().getUserDao().update(user);

查
MyApplication.getDaoInstant().getUserDao().loadAll();


對了數(shù)據(jù)庫創(chuàng)建新表什么的,在配置數(shù)據(jù)庫版本的時候要+1

一對一建表,通過外鍵與另外一個表建立關(guān)系,在上面User表中添加

@Entity //@Entity:告訴GreenDao該對象為實體,只有被@Entity注釋的Bean類才能被dao類操作
public class User {
   //@Id:對象的Id再沧,使用Long類型作為EntityId尼夺,否則會報錯。(autoincrement = true)表示主鍵會自增炒瘸,如果false就會使用舊值
    @Id(autoincrement = true)
    private Long id;
//@Unique:該屬性值必須在數(shù)據(jù)庫中是唯一值
//@NotNull:屬性不能為空
    @Unique @NotNull
    private int UserId;

    private String userName;

    private String userHead;

    private int age;

    private String Token;

    private long BI_ID ;

    @ToOne(joinProperty = "BI_ID") //1對1,當(dāng)然也有 一對多的 @ToMany
    private BankInfo bankinfo;

    //@Property:可以自定義字段名淤堵,注意外鍵不能使用該屬性
    //@Transient:使用該注釋的屬性不會被存入數(shù)據(jù)庫的字段中
    //@Generated:編譯后自動生成的構(gòu)造函數(shù)、方法等的注釋顷扩,提示構(gòu)造函數(shù)拐邪、方法等不能被修改
}

bankInfo實體類

@Entity
public class BankInfo {
    @Id
    private Long id;

    private int bankId;

    private String bankName;
  
}


查詢語句通過
MyApplication.getDaoInstant().getBankInfoDao().queryBuilder()
                .where(BankInfoDao.Properties.Id.eq(BI_ID)).list();

能查詢到對應(yīng)BI_ID 的銀行卡信息數(shù)據(jù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市隘截,隨后出現(xiàn)的幾起案子扎阶,更是在濱河造成了極大的恐慌汹胃,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件东臀,死亡現(xiàn)場離奇詭異着饥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)惰赋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門宰掉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赁濒,你說我怎么就攤上這事轨奄。” “怎么了流部?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵戚绕,是天一觀的道長。 經(jīng)常有香客問我枝冀,道長舞丛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任果漾,我火速辦了婚禮球切,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绒障。我一直安慰自己吨凑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布户辱。 她就那樣靜靜地躺著鸵钝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庐镐。 梳的紋絲不亂的頭發(fā)上恩商,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音必逆,去河邊找鬼怠堪。 笑死,一個胖子當(dāng)著我的面吹牛名眉,可吹牛的內(nèi)容都是我干的粟矿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼损拢,長吁一口氣:“原來是場噩夢啊……” “哼陌粹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起福压,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤申屹,失蹤者是張志新(化名)和其女友劉穎绘证,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哗讥,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嚷那,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了杆煞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魏宽。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖决乎,靈堂內(nèi)的尸體忽然破棺而出队询,到底是詐尸還是另有隱情,我是刑警寧澤构诚,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布蚌斩,位于F島的核電站,受9級特大地震影響范嘱,放射性物質(zhì)發(fā)生泄漏送膳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一丑蛤、第九天 我趴在偏房一處隱蔽的房頂上張望叠聋。 院中可真熱鬧,春花似錦受裹、人聲如沸碌补。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厦章。三九已至,卻和暖如春照藻,著一層夾襖步出監(jiān)牢的瞬間袜啃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工岩梳, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留囊骤,地道東北人晃择。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓冀值,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宫屠。 傳聞我的和親對象是個殘疾皇子列疗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容