【5年Android从零复盘系列之三十二】Android存储(7):LitePal使用详解
【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
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í)體類
其中,注解意義簡要了解下
| @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 |
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于不同用户进入系统报错的请求
- 下一篇: 【Android -- 数据存储】Lit