日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

【5年Android从零复盘系列之三十二】Android存储(7):LitePal使用详解

發(fā)布時(shí)間:2023/12/10 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【5年Android从零复盘系列之三十二】Android存储(7):LitePal使用详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【5年Android從零復(fù)盤系列之三十二】Android存儲(7):LitePal數(shù)據(jù)庫框架


【代碼是最好的老師】

1.概述

LitePal是郭霖大神開源的一款數(shù)據(jù)庫框架。

LitePal同greendao一樣,有共同的優(yōu)點(diǎn)。

區(qū)別在,不同數(shù)據(jù)量、不同操作情形下,性能和資源占用各有些許差別。不過在2020+年代了,這些細(xì)微差別已經(jīng)幾乎是無感。

具體商用中,追求穩(wěn)定,會更多地選擇greendao。其緣由并不是LitePal性能不佳,而是greendao的有較大的使用基數(shù),使其趨于完美。而LitePal后起之秀,及版本迭代,使用基數(shù)、開源考驗(yàn)度較小。

在組件化中,greendao會比litepal有優(yōu)勢。究其原因,是因?yàn)閘itepal的實(shí)體類直接繼承LitepalSupport,組件化項(xiàng)目中 跨模塊使用(數(shù)據(jù)表對應(yīng)的)實(shí)體類不友好。

GitHub直達(dá)LitePal

Demo代碼.zip

3.配置

step1.首先在app module的gradle依賴

//litepal step1 導(dǎo)包 implementation 'org.litepal.guolindev:core:3.2.3'

step2.在module下 新建文件 main/assets/litepal.xml

  • 配置數(shù)據(jù)庫名稱
  • 數(shù)據(jù)庫版本號
  • 表對應(yīng)的實(shí)體類包名+路徑
  • <?xml version="1.0" encoding="utf-8"?> <litepal> <!-- litepal step2--><dbname value="app" /><version value="1" /> <!-- litepal step6 --><list><mapping class="com.cupster.func_db_litepal.entity.User"/><mapping class="com.cupster.func_db_litepal.entity.Article"/></list><!--Define where the .db file should be. "internal" means the .db filewill be stored in the database folder of internal storage which noone can access. "external" means the .db file will be stored in thepath to the directory on the primary external storage device wherethe application can place persistent files it owns which everyonecan access. "internal" will act as default.For example:<storage value="external" />--> </litepal>

    step3.混淆配置

    -keep class org.litepal.** {*; } -keep class * extends org.litepal.crud.DataSupport {*; } -keep class * extends org.litepal.crud.LitePalSupport {*; }

    step4.在app的application中初始化litepal

    public class DemoApplication extends Application {@Overridepublic void onCreate() {super.onCreate();//litepal step4LitePalManager.init(this);} }

    4.使用

    step5.編寫對應(yīng)數(shù)據(jù)庫表的實(shí)體類

    其中,注解意義簡要了解下

    nameaction
    @Column用于向列添加約束。注意,這個(gè)注釋不會影響id列
    unique@Column(unique = true) 約束列是唯一不可重復(fù)
    ignore@Column(ignore = true) 不再數(shù)據(jù)庫表中創(chuàng)建該字段
    nullable@Column(nullable = false) 約束列值不為空
    index@Column(index = true) 給列添加索引
    defaultValue@Column(defaultValue = “unset”) 不考慮該列值類型,設(shè)置列的默認(rèn)類型值為字符串unset
    //litepal step5 public class User extends LitePalSupport {@Column(index = true)//這個(gè)注釋不會影響id列,測試驗(yàn)證private long id ;@Column(unique = true ,defaultValue = "-")private String name;private int age;private String account;private String password;//...//setter & getter

    step6.編寫管理類,管理數(shù)據(jù)庫創(chuàng)建、升級、刪除、事務(wù)、多數(shù)據(jù)庫切換等

    package com.cupster.func_db_litepal;import android.app.Application; import org.litepal.LitePal; import org.litepal.LitePalDB;public class LitePalManager {public static void init(Application application){LitePal.initialize(application);}public static void newDataBase(String dbName ,int version ,Class... tables){LitePalDB litePalDB = new LitePalDB(dbName ,version);for (Class table: tables){litePalDB.addClassName(table.getName());}LitePal.use(litePalDB);}public static void switchDbDefault(){LitePal.useDefault();}public static void switchDB(String dbName){LitePalDB litePalDB = LitePalDB.fromDefault(dbName);LitePal.use(litePalDB);}public static void deleteDB(String dbName){LitePal.deleteDatabase(dbName);}public static void beginTransaction(){LitePal.beginTransaction();}public static boolean excuteTransaction(boolean... flags){boolean success = true;for (boolean f : flags){if (!f){success = false;break;}}if (success){LitePal.setTransactionSuccessful();}endTransaction();return success;}public static void endTransaction(){LitePal.endTransaction();} }

    然后就是具體場景中的使用了,這里因?yàn)椴庞媒M件化的架構(gòu),多封裝了一層。

    調(diào)用:

    @Overridepublic void onClick(View view) {switch (view.getId()){case R.id.btn_add:UserHelper.insert("Cupster" ,"18960222222");break;case R.id.btn_delete:UserHelper.delete(1);break;case R.id.btn_update:UserHelper.update(1,"Cupster改");break;case R.id.btn_query:mTv.setText(UserHelper.queryAll());break;}}

    封裝的增刪改查:

    package com.cupster.func_db_litepal.crud;import com.cupster.func_db_litepal.entity.User; import org.litepal.LitePal; import java.util.List;public class UserHelper {public static boolean insert(String name ,String account){User user1 = new User();user1.setAccount(account);user1.setName(name);return user1.save();}public static boolean update(String name){User user = LitePal.find(User.class , 1 );if (user == null ){return false;}else {user.setName(name);return user.save();}}public static boolean update(long id ,String name){User user = new User();user.setName(name);return user.update(id)>0;}public static boolean delete(long id){return LitePal.delete(User.class ,id)>0;}public static boolean deleteAll(){return LitePal.deleteAll(User.class)>0;}public static User queryById(long id){return LitePal.find(User.class ,id);}public static String queryAll(){List<User> users = LitePal.findAll(User.class);StringBuilder stringBuilder = new StringBuilder();for (User u : users){stringBuilder.append("\n");stringBuilder.append("id:");stringBuilder.append(u.getId());stringBuilder.append("\n");stringBuilder.append("name:");stringBuilder.append(u.getName());stringBuilder.append("\n");stringBuilder.append("account:");stringBuilder.append(u.getAccount());}return stringBuilder.toString();}public static List<User> queryWhere(String condition ){return LitePal.where(condition).order("id").find(User.class);} }

    5.其他

    代碼.zip
    gitee

    總結(jié)

    以上是生活随笔為你收集整理的【5年Android从零复盘系列之三十二】Android存储(7):LitePal使用详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。