greenDAO__最受欢迎的数据库框架
程序员文章站
2022-05-26 17:53:45
...
导包
project的gradle:
buildscript {
repositories {
jcenter()
//1.greenDAO的远程仓库
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
//2.greenDAO的添加的插件
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
module的gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "com.junx.greendao"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
//3.应用自动生成的插件
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
//4.应用插件
greendao {
schemaVersion 1 //数据库的版本
daoPackage 'com.koma.greendao.gen' //由GreenDao自动生成代码所在的包名,默认的是在项目包下面新建一个gen
targetGenDir 'src/main/java' //设置自动生成代码的目录
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
//5.引入库
compile 'org.greenrobot:greendao:3.1.0'
}
初始化实体类
@Entity//会在数据库中生成对应的表
public class User {
@Id(autoincrement = true)//自增id,注意用Long包装
private Long id;
@Property(nameInDb = "USERNAME")//作为表的一个字段
private String username;
@Property(nameInDb = "NICKNAME")
private String nickname;
@Transient//忽略,不会作为表的字段
private String useless;
}
然后点击Build>>make project/module:自动生成代码
@Entity//会在数据库中生成对应的表
public class User {
@Id(autoincrement = true)//自增id,注意用Long包装
private Long id;
@Property(nameInDb = "USERNAME")//作为表的一个字段
private String username;
@Property(nameInDb = "NICKNAME")
private String nickname;
@Transient//不会作为表的字段
private String useless;
@Generated(hash = 523935516)
public User(Long id, String username, String nickname) {
this.id = id;
this.username = username;
this.nickname = nickname;
}
@Generated(hash = 586692638)
public User() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getNickname() {
return this.nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
在代码中初始化
public class MyApplcation extends Application {
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
//创建数据库test.db,DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
DevOpenHelper helper = new DevOpenHelper(this, "test.db", null);
//通过helper来获取可读写的数据库
Database db = helper.getWritableDb();
//实例化数据库对象,,作为数据库对象、用于创建表和删除表
DaoMaster master = new DaoMaster(db);
//数据库的管理员,DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API
daoSession = master.newSession();
}
static MyApplcation mInstance;
public static MyApplcation getInstance() {
return mInstance;
}
private DaoSession daoSession;
public DaoSession getDaoSession() {
return daoSession;
}
}
增删改查
获取Dao对象
//通过DaoSession.getXXXDao()获取对应的数据库Dao对象
userDao = MyApplcation.getInstance().getDaoSession().getUserDao();
增加数据
userDao.insert(new User());//增加单个数据
userDao.insertInTx(Iterator<Usr>);//可以添加整个list
userDao.insertOrReplace();//与普通的增加数据相比,如果id相同则改为升级数据
userDao.insertOrReplaceInTx();//同样支持迭代器和数组
查询数据
//查询全部user
List<User> users = userDao.loadAll();
//查询特定id的user
User user = userDao.load(Id);
//查询特定条件的数据
//多个条件相与
Query<User> query = userDao.queryBuilder()
.where(UserDao.Properties.Nickname.eq("小花"),UserDao.Properties.Username.eq("小胖"))
.build();
List<User> users2 = query.list();
//多个条件相或
List<User> users3 = userDao.queryBuilder()
.whereOr(UserDao.Properties.Nickname.eq("小花")
, UserDao.Properties.Username.eq("小胖"))
.build().list();
//查询结果进行升序或降序排序
List<User> users5 = userDao.queryBuilder()
.orderAsc(UserDao.Properties.Id)
.build().list();
userDao.queryBuilder().orderAsc(UserDao.Properties.Id)
.build().list();
//限制查询数量
List<User> user4 = userDao.queryBuilder().limit(5).build().list();
//查询数据库数据的总数
long count = userDao.count();
删除数据
//通过key,也就是id来删除
userDao.deleteByKey(user.getId());
//支持key的数组和集合
userDao.deleteByKeyInTx();
//本质上还是通过key来删除的,如果key中没有id,那么报错
userDao.delete(new User());
//同样支持数组和集合
userDao.updateInTx();
//删除全部
userDao.deleteAll();
//当然也可以配合查询来删除特定的集合
升级数据库
当数据的结构变化时,就不得不升级数据库了
module的gradle中:
greendao {
schemaVersion 2 //数据库的版本,比以前大的话便会删除所有数据重新创建
daoPackage 'com.koma.greendao.gen' //由GreenDao自动生成代码所在的包名,默认的是在项目包下面新建一个gen
targetGenDir 'src/main/java' //设置自动生成代码的目录
}
上一篇: spark求最受欢迎的老师的问题