GreenDao的基本使用
GreenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,GreenDAO 针对 Android 进行了高度优化, 最小的内存开销 、依赖体积小 同时还是支持数据库加密。关于GreenDao的基本的介绍,很多的博客都有写,我这里就不做过多的讲解了。这里简要的介绍一下他的基本的用法,喜欢的朋友可以看看。
1.设置仓库与插件---首先在(Project:build.gradle)添加,红色的文字的部分
buildscript {
repositories {
google()
jcenter()
mavenCentral() // 添加这个仓库 }
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // 添加插件路径 // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir}
2.配置依赖 ( Module:app build.gradle )---同理添加,红色的文字的部分
apply plugin: 'com.android.application'apply plugin: 'org.greenrobot.greendao' //添加插件的调用android {
compileSdkVersion 26 defaultConfig {
applicationId "com.example.administrator.mygreendao" 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' }
}
greendao { schemaVersion 1 //数据库版本号 targetGenDir "src/main/java" //生成代码的根路径 daoPackage "com.example.administrator.mygreendao.db" //在根路径下生成类的包名 }}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'org.greenrobot:greendao:3.2.2' //添加库的依赖
3, 我们写一个简单的实体类(User),测试一下
@Entitypublic classUser{
@Id
private long id;
private String name;
private int age;
//此处省略了getter,setter 方法
}
4.点击小锤子的图标编译一下
这个时候可以看到左边和我们的代码区域都出现了变化
6.初始化 GreenDao ( 通常初始化代码写在我们的 Application 类中)
package com.example.administrator.mygreendao;import android.app.Application;import android.database.sqlite.SQLiteDatabase;import com.example.administrator.mygreendao.db.DaoMaster;import com.example.administrator.mygreendao.db.DaoSession;/** * Created by Administrator on 2018/5/22. * 初始化GreenDao */public class MyAppextends Application {private DaoSessiondaoSession; @Override public void onCreate() {super.onCreate(); initGreenDao(); }/** * 初始化 GreenDao */ private void initGreenDao() {//创建数据库 DaoMaster.DevOpenHelper helper =new DaoMaster.DevOpenHelper(this, "test.db");//表名 SQLiteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster =new DaoMaster(db); daoSession = daoMaster.newSession(); }/** * 获取DaoSession */ public DaoSessiongetDaoSession() {return daoSession; }}
7.使用
package com.example.administrator.mygreendao;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.example.administrator.mygreendao.db.DaoSession;import com.example.administrator.mygreendao.db.UserDao;import org.greenrobot.greendao.query.QueryBuilder;import java.util.List;/** * GreenDao的基本用法实践 */public class MainActivityextends AppCompatActivity {private UserDaouserDao; private Useruser; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); initDate(); initChaRu(); deleted(); update(); query(); query2(); query3(); query4(); }//查询年龄大于10的用户 private Listquery4() { QueryBuilder builder =userDao.queryBuilder(); return builder.where(UserDao.Properties.Age.gt(10)).build().list(); }//根据id查询 private Userquery2() {return userDao.loadByRowId(1); }private Listquery3() {return userDao.queryRaw("where AGE>?", "10");//查询年龄大于10的用户 }//查询所有记录 private Listquery() {return userDao.loadAll(); }//更新记录 private void update() {userDao.update(user); }//获取UserDao private void init() { MyApp myApp = (MyApp) getApplication(); DaoSession daoSession = myApp.getDaoSession(); userDao = daoSession.getUserDao(); }//增加 private void initDate() {user =new User(); user.setId(1); user.setName("小明"); user.setAge(16); userDao.insert(user); }//插入和替换 private void initChaRu() {userDao.insertOrReplace(user); }//删除记录 private void deleted() {userDao.delete(user); }}
好啦这样就基本完成啦
六、注解详解
@Entity
表明这个实体类会在数据库中生成一个与之相对应的表
@Id
对应数据表中的 Id 字段
@Index
使用@Index作为一个属性来创建一个索引,默认是使用字段名
@Property
设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = “userName”)
@NotNull
设置数据库表当前列不能为空
@Transient
添加此标记后不会生成数据库表的列
@Unique
表名该属性在数据库中只能有唯一值
@ToOne
表示一对一关系
关于更加详细的博客可以
参考SpeedyStone博客
地址:https://blog.csdn.net/speedystone/article/details/72769793