XOrmlite 一個方便實用的OrmLite資料庫框架,支持一鍵集成
來自專欄 我的Android開源之旅
XOrmlite
xuexiangjys/XOrmlite
一個方便實用的OrmLite資料庫框架,支持一鍵集成。
特徵
- 支持通過
@DataBase
進行資料庫配置。 -
支持自動生成資料庫管理倉庫
DataBaseRepository
。 - 支持內部存儲和外部存儲兩種資料庫。
- 支持自定義資料庫存儲位置。
- 支持自定義資料庫打開、升級以及降級的介面。
-
支持事務操作、回滾等。
- 提供了常用的資料庫操作API。
1、演示(請star支持)
Demo下載
https://github.com/xuexiangjys/XOrmlite/blob/master/apk/demo.apk?raw=true (二維碼自動識別)
2、如何使用
目前支持主流開發工具AndroidStudio的使用,直接配置build.gradle,增加依賴即可.
2.1、Android Studio導入方法,添加Gradle依賴
1.先在項目根目錄的 build.gradle 的 repositories 添加:
allprojects { repositories { ... maven { url "https://jitpack.io" } }}
2.然後在dependencies添加:
dependencies { ... implementation com.github.xuexiangjys.XOrmlite:xormlite-runtime:1.0.0 annotationProcessor com.github.xuexiangjys.XOrmlite:xormlite-compiler:1.0.0}
2.2、資料庫註冊配置
1.使用@DataBase
進行資料庫註冊配置。屬性如下:
- name :資料庫的名稱,必填。
- version :資料庫的版本, 默認版本為1
- type :資料庫的存放類型,默認是內部存儲
DataBaseType.INTERNAL
- path :資料庫存放的路徑,只對外部存儲的資料庫起作用,默認的地址為:/storage/emulated/0/Android/xormlite/databases/
【注意】@DataBase
必須註冊在Application
類上才起作用。
@DataBase(name = "external", type = DataBaseType.EXTERNAL, path = "/storage/emulated/0/xormlite/databases")public class ExternalApp extends Application { @Override public void onCreate() { super.onCreate(); }}
2.使用@DataBase
註冊完後,請編譯一下項目:build -> Rebuild Project,之後會自動生成資料庫管理倉庫: 資料庫名 + DataBaseRepository 的Java文件。文件的生成路徑如下:
例如上面我們註冊的資料庫名為:external,自動生成的資料庫管理倉庫為 ExternalDataBaseRepository。
3.初始化資料庫管理倉庫,設置資料庫實現介面。
-
內部存儲的資料庫需要需要實現
IDatabase
介面。 - 外部存儲的資料庫需要需要實現
IExternalDataBase
介面。
@DataBase(name = "internal", type = DataBaseType.INTERNAL)public class App extends Application { @Override public void onCreate() { super.onCreate(); InternalDataBaseRepository.getInstance() .setIDatabase(new InternalDataBase()) //設置內部存儲的資料庫實現介面 .init(this); ExternalDataBaseRepository.getInstance() .setIDatabase(new ExternalDataBase( //設置外部存儲的資料庫實現介面 ExternalDataBaseRepository.DATABASE_PATH, ExternalDataBaseRepository.DATABASE_NAME, ExternalDataBaseRepository.DATABASE_VERSION)) .init(this); }}
2.3、資料庫服務獲取
資料庫管理倉庫DataBaseRepository提供了獲取資料庫操作服務的API getDataBase
, 傳入標有@DatabaseTable
的資料庫實體類Class, 獲取對應的資料庫操作服務DBService
。
DBService<Student> mDBService = InternalDataBaseRepository.getInstance().getDataBase(Student.class);
2.4、資料庫操作
DBService
提供了豐富的資料庫操作API,詳細API請點擊參見。
以下簡要介紹一部分API:
插入
- insert: 插入單條數據。
- insertData: 插入單條數據(返回被插入的對象)。
- insertDatas: 批量添加,返回插入數據的數量。
查詢
- queryAll: 查詢所有的數據。
- queryAllOrderBy: 查詢所有的數據並根據列名進行排序,返回一個對象集合。
- queryAndOrderBy: 有條件的排序查詢,返回一個對象集合。
- queryById: 根據id查詢出一條數據。
- queryByField: 根據條件查詢,返回一個對象集合。
- queryByColumn: 根據條件查詢,返回一個對象集合。
- queryForColumnFirst: 根據條件查詢,返回第一個符合條件的對象。
- indistinctQueryForColumn: 根據條件模糊查詢,返回一個對象集合。
- queryDataBySql: 根據sql語句查詢,返回對象的集合。
更新
- updateData: 使用對象更新一條記錄(注意:對象必須帶唯一標識ID,且該方法不能更新ID欄位)。
- updateDataByColumn: 根據某一或多個條件更新對象。
- updateDataBySQL: 根據條件做update時直接使用sql語句進行更新,sql語句中必須包含關鍵字【INSERT,DELETE,UPDATE】。
刪除
- deleteData: 根據對象刪除一條記錄(注意:對象必須帶唯一標識ID,否則方法不起作用)。
- deleteDatas: 批量刪除(注意:對象必須帶唯一標識ID,否則方法不起作用)【大數據量的刪除不起左右,會報too many SQL variables錯誤】。
- deleteAll: 刪除所有數據。
- deleteById: 根據id刪除一條記錄。
其他
- executeSql: 執行sql語句。
- getQueryBuilder: 返回QueryBuilder。
- getUpdateBuilder: 返回UpdateBuilder。
- getDeleteBuilder: 返回DeleteBuilder。
事務操作
- doInTransaction: 執行事務操作。
- beginTransaction: 開啟資料庫事務操作。
- commit: 提交事務。
- rollBack: 事務回滾。
2.5、資料庫操作示例
1.插入單條數據
Student student = new Student();student.setUserName("xuexiang");student.setSex("男");student.setAge((int) (Math.random() * 100));try { mDBService.insert(student);} catch (SQLException e) { e.printStackTrace();}
2.更新資料庫某一欄位
try { mDBService.updateDataByColumn("username", "xxxx", "username", "xuexiang");} catch (SQLException e1) { e1.printStackTrace();}
3.執行事務插入
try { mDBService.doInTransaction(new Callable<Boolean>() { @Override public Boolean call() throws Exception { for (int i = 0; i < mTempList.size(); i++) { mDBService.insert(mTempList.get(i)); } return true; } });} catch (SQLException e) { e.printStackTrace(); ToastUtils.toast("事務執行失敗!");}
4.執行事務刪除
try { mDBService.doInTransaction(new Callable<Boolean>() { @Override public Boolean call() throws Exception { for (int i = 0; i < mTempList.size(); i++) { mDBService.deleteData(mTempList.get(i)); } return true; } }); mStudentAdapter.updateList(mDBService.queryAll());} catch (SQLException e) { e.printStackTrace(); ToastUtils.toast("事務執行失敗!");}
聯繫方式
http://qm.qq.com/cgi-bin/qm/qr?k=tiP-E6rDf0y77PRNfp2lNVcc9RsglPCM (二維碼自動識別)
推薦閱讀:
※微軟校園Hackathon南京站 無駭客 不青春
※Python數據分析及可視化實例之存儲方式簡介
※MySQL
※MongoDB與EDI系統集成
※MongoDB 存儲引擎 WiredTiger 原理解析