Android greenDao

一、greenDao简介

greenDAO是一个开源的Android ORM(对象-关系映射),它让SQLite数据库的开发再次变得有趣。它使开发人员免于处理低级数据库要求,同时节省了开发时间。SQLite是一个很棒的嵌入式关系数据库。尽管如此,编写SQL和解析查询结果仍然是非常繁琐且耗时的任务。通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”),greenDAO使您摆脱了这些麻烦。这样,您可以使用简单的面向对象的API来存储,更新,删除和查询Java对象。

二、greenDAO优点


最佳性能 (可能是 Android 中最快的 ORM) ,基准测试也是开源的;
易于使用的功能强大的 api,涵盖关系和连接;
最小的内存消耗;
小型库大小(< 100KB) ,以保持较低的构建时间,并避免65k 方法限制;
数据库加密:greenDAO 支持 SQLCipher 来保证用户数据的安全;
强大而活跃的社区交流支持,相关资料比较完善;
许多顶级的Android应用程序都依赖greenDAO,其中一些应用程序的安装量超过1000万,更证明了其可靠性

三、greenDao 的简单使用

1.project的build.gradle 下配置

  dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
       
    }

2.app的build.gradle 下配置


plugins {
    id 'com.android.application'
    id 'org.greenrobot.greendao' //新加入
}

android {
    compileSdk 31

    defaultConfig {
        applicationId "com.example.greendao"
        minSdk 29
        targetSdk 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    
    //新加入
    greendao {
        schemaVersion 1 //数据库版本号 每次升级数据库都需要改变版本,只能增加
        daoPackage 'com.example.greendao'  //设置DaoMaster、DaoSession、Dao包名
        targetGenDir 'src/main/java' //设置DaoMaster、DaoSession、Dao目录
    }
}

dependencies {
    //新加入
    implementation 'org.greenrobot:greendao:3.2.2'

    implementation 'androidx.appcompat:appcompat:1.4.2'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

3、创建实体类

@Entity
public class Student {
    @Id
    private Long Id;
    private String name;
    private String major;
    private int age;
}

点击 make project按键生成代码

 

4.初始化数据库

public class MyApplication extends Application {

    //实例化DaoMaster对象
    private DaoMaster mDaoMaster;
    //实例化DaoSession对象
    private static DaoSession sDaoSession;
    private DaoMaster.DevOpenHelper mDevOpenHelper = null;

    @Override
    public void onCreate() {
        super.onCreate();
        // 1、获取需要连接的数据库
        mDevOpenHelper = new DaoMaster.DevOpenHelper(getApplicationContext(),"student.db");
        // 2、创建数据库连接
        mDaoMaster = new DaoMaster(mDevOpenHelper.getWritableDb());
        // 3、创建数据库会话
        sDaoSession = mDaoMaster.newSession();
    }
    //通过此方法,操作数据库,进行增删改查
    public static DaoSession getDaoSession() {
        return sDaoSession;
    }
}

5.实现增删改查

mMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        StudentDao userDao = MyApplication.getDaoSession().getStudentDao();
        // insert
        mMainBinding.insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                userDao.insert(new Student(null,mMainBinding.name.getText().toString(),
                        mMainBinding.major.getText().toString()
                        ,Integer.parseInt(mMainBinding.age.getText().toString())));
            }
        });

        mMainBinding.delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                userDao.deleteAll();
            }
        });

        mMainBinding.query.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<Student> students = userDao.loadAll();
                StringBuilder sb = new StringBuilder();
                for (Student s : students) {
                    sb.append(s.toString()).append("\n");
                }
                mMainBinding.content.setText(sb.toString());
            }
        });


        mMainBinding.update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<Student> list = userDao.queryBuilder().where(
                        StudentDao.Properties.Id.eq(1L)).list();
                if (list.size()>0){
                    list.get(0).setAge(35);
                    userDao.update(list.get(0));
                }
            }
        });

6.贴下 layout 布局

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">


        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/name"
            android:hint="请输入姓名"

            app:layout_constraintTop_toTopOf="parent" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/major"
            android:hint="请输入专业"
            app:layout_constraintTop_toBottomOf="@id/name" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入年龄"
            app:layout_constraintTop_toBottomOf="@id/major"
            android:id="@+id/age" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/insert"
            android:text="插入数据"
            app:layout_constraintTop_toBottomOf="@id/age"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            tools:ignore="MissingConstraints" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/delete"
            android:text="删除数据"
            tools:ignore="MissingConstraints"
            android:layout_marginTop="30dp"
            app:layout_constraintTop_toBottomOf="@id/insert" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/update"
            android:text="修改数据"
            tools:ignore="MissingConstraints"
            app:layout_constraintTop_toBottomOf="@+id/delete" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/query"
            android:text="查询数据"
            app:layout_constraintTop_toBottomOf="@+id/update"
            tools:ignore="MissingConstraints" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/content"
            app:layout_constraintTop_toBottomOf="@id/query" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaowang_lj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值