android數(shù)據(jù)庫(kù)框架主流開源的有:OrmLite篡诽、greenDAO 崖飘、Realm、DBFlow杈女、LitePal朱浴,優(yōu)缺點(diǎn)自行百度吊圾。
沒有最好,只有最合適翰蠢,我這選擇社區(qū)活躍项乒、star高的greenDAO,個(gè)人比較喜歡使用最新版來搞
2020年4月5日20:18:05最新版版GreenDao 3.2.2梁沧,可以算是最新的了吧檀何?
,
部分參考官網(wǎng)文檔https://greenrobot.org/greendao/
官方git:https://github.com/greenrobot/greenDAO
開發(fā)環(huán)境工具
jdk8 + android studio 3.6(新) + GreenDao 3.2.2
一廷支、集成插件
集成greendao-gradle-plugin
插件用于自動(dòng)生成dao映射等等
在build.gradle中:classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
buildscript {
repositories {
// 添加阿里云 maven 地址
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
// 添加以下插件
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中:
//頂部添加
apply plugin: 'org.greenrobot.greendao' // apply plugin
//加入依賴
//sql
implementation 'org.greenrobot:greendao:3.2.2' // add library
//最下面加入配置
greendao{
schemaVersion 1
// 注意配置你的dao生成包
daoPackage 'com.lingkang.flychat.mapper.gen'
targetGenDir 'src/main/java'
}
//schemaVersion: 數(shù)據(jù)庫(kù)schema版本频鉴,也可以理解為數(shù)據(jù)庫(kù)版本號(hào)
//daoPackage:設(shè)置DaoMaster、DaoSession恋拍、Dao包名
//targetGenDir:設(shè)置DaoMaster垛孔、DaoSession、Dao目錄
//targetGenDirTest:設(shè)置生成單元測(cè)試目錄
//generateTests:設(shè)置自動(dòng)生成單元測(cè)試用例
此處注意下dao生成的包路徑即可施敢,我的是com.lingkang.flychat.mapper.gen
二周荐、創(chuàng)建entity
@Entity
public class User {
@Id
private Long id;
private int memberSex;//性別
private String memberLastX;//X幣
@Property(nameInDb = "sex")
private String memberNickname;//昵稱
private String memberIcon;//頭像地址鏈接
private String memberMobile;//手機(jī)號(hào)
private int memberId;//用戶ID
@Transient
private String memberDetailAddr;//用戶的詳細(xì)地址
private String memberLastExperience;//用戶經(jīng)驗(yàn)值
private String memberLevelName;//用戶等級(jí)昵稱
private long memberBirthday;//用戶生日
private String memberProvince;//用戶所在地
}
@Id-- 主鍵 Long型,可以通過@Id(autoincrement = true)設(shè)置自增長(zhǎng)悯姊。通過這個(gè)注解標(biāo)記的字段必須是Long羡藐,數(shù)據(jù)庫(kù)中表示它就是主鍵,并且默認(rèn)是自增的悯许。
@Property-- 設(shè)置一個(gè)非默認(rèn)關(guān)系映射所對(duì)應(yīng)的列名仆嗦,默認(rèn)是的使用字段名 舉例:@Property (nameInDb="name")
@Index-- 使用@Index作為一個(gè)屬性來創(chuàng)建一個(gè)索引;定義多列索引(@link Entity#indexes())
@Transient-- 添加次標(biāo)記之后不會(huì)生成數(shù)據(jù)庫(kù)表的列
更多注解說明先壕,自行查找資料瘩扼。
構(gòu)建dao
使用快捷鍵Ctrl + F9 或者Build → Make Project
即可生成了dao,如下
三垃僚、初始化
在application入口:
import android.app.Application;
import com.lingkang.flychat.mapper.gen.DaoMaster;
import com.lingkang.flychat.mapper.gen.DaoSession;
import org.greenrobot.greendao.database.Database;
public class FlyChatApplication extends Application {
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
initSQLite();
}
private void initSQLite() {
// regular SQLite database 其中 fcdb為數(shù)據(jù)庫(kù)名稱
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "fcdb");
Database db = helper.getWritableDb();
// 如果想要加密就使用以下:encryption-key是你想要的key
//Database db = helper.getEncryptedWritableDb("encryption-key");
daoSession = new DaoMaster(db).newSession();
}
//用于全局?jǐn)?shù)據(jù)庫(kù)會(huì)話操作
public DaoSession getDaoSession() {
return daoSession;
}
}
注意下用于全局?jǐn)?shù)據(jù)庫(kù)會(huì)話操作和Application名字:getDaoSession()
集绰、FlyChatApplication
后面用到
四、調(diào)用
準(zhǔn)備了這么多谆棺,開始調(diào)用:
1栽燕、首先獲取數(shù)據(jù)庫(kù)會(huì)話
2、使用會(huì)話進(jìn)行操作
// 獲取對(duì)象改淑,從全局里拿
DaoSession daoSession = ((FlyChatApplication) getApplication()).getDaoSession();
UserDao userDao=daoSession.getUserDao();
//增
User user=new User();
user.setId(1L);
user.setMemberSex(1);
user.setMemberNickname("凌康");
user.setMemberMobile("15977707555");
userDao.insert(user);
//查 ---使用toString需要在entity中@Override toString
List<User> users=userDao.loadAll();
LogUtils.e(users.get(0).toString());
//改碍岔,全量覆蓋
User user=new User();
user.setId(1L);
user.setMemberNickname("66666666");
userDao.update(user);
//刪
userDao.deleteByKey(1L);
效果如下:
更多操作可參考官方文檔