打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于greenDAO,看这篇文章就够了
userphoto

2022.08.02 广东

关注

一、greenDAO简介

greenDAO是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到SQLite数据库中,我们操作数据库的时候,不需要编写复杂的 SQL语句, 在性能方面,greenDAO针对 Android 进行了高度优化,   最小的内存开销 、依赖体积小 同时还是支持数据库加密。

greenDAO项目地址https://github.com/greenrobot/greenDAO

二、greenDAO特征

1、对象映射( ORM)

greenDAO是ORM 框架,可以非常便捷的将Java 对象映射到 SQLite  数据库中保存。

2、高性能

ORM 框架有很多,比较著名的有 OrmLite , ActiveAndroid 等

greenDAO官方给出了这三者的性能对比。

greenDAO、OrmLite、ActiveAndroid的对比图

3、支持加密

三、greenDAO集成

1、设置仓库与插件(Project: build.gradle)

 1 buildscript {
2 repositories {
3    jcenter()
4    mavenCentral() // add repository
5  }
6   dependencies {
7      classpath 'com.android.tools.build:gradle:3.0.1'
8      classpath 'org.greenrobot:greenDAO-gradle-plugin:3.2.2' // add plugin
9  }
10 }

2、配置依赖 ( Module:app  build.gradle  )

1 apply plugin: 'com.android.application'
2 apply plugin: 'org.greenrobot.greenDAO' // apply plugin
3
4  dependencies {
5   compile 'org.greenrobot:greenDAO:3.2.2' // add library
6}

3、配置数据库相关信息 ( Module:app  build.gradle  )

1 greenDAO{
2  schemaVersion 1 //数据库版本号
3  daoPackage 'com.book.aikaifa.tallybook.gen''
4  targetGenDir '
src/main/java'
5 }
6

4、Sync Project with Gradle Files 同步工程 即可

四、greenDAO案例

1、新建实体类(User)

1 @Entity
2  public class User {
3  @Id
4  private long id;
5  private String name;
6 private int age;
7}

注解详解

@Entity  

表明这个实体类会在数据库中生成一个与之相对应的表

属性:

schema:告知greenDAO当前实体属于哪个 schema

schema active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法

nameInDb:在数据库中使用的别名,默认使用的是实体的类名,

indexes:定义索引,可以跨越多个列

createInDb:标记创建数据库表(默认:true)

generateConstructors  自动创建全参构造方法(同时会生成一个无参构造方法)(默认:true)

generateGettersSetters  自动生成 getters and setters 方法(默认:true)

 1    @Entity(
2    schema = "myschema",
3    active = true,
4    nameInDb = "AWESOME_USERS"
5    indexes = {
6            @Index(value = "name DESC", unique = true)
7    },
8    createInDb = true,
9    generateConstructors = false,
10    generateGettersSetters = true
11 )
12  public class User {
13  ...
14}

@Id

对应数据表中的 Id 字段

@Index

使用@Index作为一个属性来创建一个索引,默认是使用字段名

1 @Entity
2 public class User {
3@Id
4private Long id;
5
6@Index(unique = true)
7private String name;
8}

@Property

设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "userName")

@NotNull  

设置数据库表当前列不能为空

@Transient

添加此标记后不会生成数据库表的列

@Unique

表名该属性在数据库中只能有唯一值

1 @Entity
2 public class User {
3@Id
4private Long id;
5@Unique
6private String name;
7}

@ToOne

表示一对一关系

@Entity

public class Order {

    @Id private Long id;

    private long customerId;

    @ToOne(joinProperty = "customerId")

    private Customer customer;

}

@Entity

public class Customer {

    @Id

    private Long id;

}

@OrderBy

更加某一字段排序 ,例如:@OrderBy("date ASC")

@ToMany

定义一对多个实体对象的关系

 1  @Entity
2   public class Customer {
3    @Id private Long id;
4    @ToMany(referencedJoinProperty = "customerId")
5    @OrderBy("date ASC")
6    private List orders;
7 }
8
9 @Entity
10  public class Order {
11  @Id private Long id;
12  private Date date;
13  private long customerId;
14 }

2、Make Project编译工程

会在配置的包目录下自动会生成 DaoMaster,DaoSession 和 UserDao 类 。

3、初始化greenDAO

( 通常在 Application中初始化)

 1public class MyApplication extends Application {
2 public static MyApplication application;
3 private static Context context;
4 private MyOpenHelper mHelper;
5 private SQLiteDatabase db;
6 private DaoMaster mDaoMaster;
7 private DaoSession mDaoSession;
8
9@Override
10public void onCreate() {
11    super.onCreate();
12    application = this;
13    context = getApplicationContext();
14    setDatabase();
15}
16
17public static MyApplication getApplication() {
18    return application;
19}
20
21private void setDatabase() {
22    mHelper = new MyOpenHelper(this"book-db"null);
23    db = mHelper.getWritableDatabase();
24    mDaoMaster = new DaoMaster(db);
25    mDaoSession = mDaoMaster.newSession();
26}
27
28public DaoSession getDaoSession() {
29    return mDaoSession;
30}
31
32public SQLiteDatabase getDb() {
33    return db;
34}
35   }

4、获取UserDao

      userDao =  MyApplication.getApplication().getDaoSession().getUserDao();

5、添加记录

添加单条记录

User user;

userDao.insert(user);

插入一组数据

List<User> listUser;

userDao.insert(listUser);

插入或替换数据

根据主键来判断

User user;

userDao.insertOrReplace(user)

List<User> listUser;

userDao.insertOrReplace(listUser);

6、删除记录

删除单条记录

User user;

userDao.delete(user);

删除一组数据

List<User> listUser;

userDao.deleteInTx(listUser);

删除所有数据

userDao.deleteAll();

7、修改记录

修改单条记录

User user;

userDao.update(user);

修改一组数据

List<User> listUser;

userDao.updateInTx(listUser);

8、查找记录

查询全部记录

userDao.loadAll()

查询数量

int count = userDao.count();

条件查询

精确查询(where)

//查询电影名为“肖申克的救赎”的电影

User user=

userDao.queryBuilder().where(UserDao.Properties.Name.eq("aikaifa")).unique();

//查询年纪在30岁的人群

List<User > userList=

userDao.queryBuilder().where(UserDao.Properties.Age.eq(30)).list();

模糊查询(like)

//查询以“洪”开头的用户

userDao.queryBuilder().where(UserDao.Properties.Name.like("洪%")).list();

区间查询

gt 大于

ge 大于等于

 lt 小于

le 小于等于

Between 介于中间

升降序

orderAsc 升序

orderDesc 降序

and /or

五、greenDAO案例

细心的你,我们在Application初始化时,有这样一句        mHelper = new MyOpenHelper(this, "book-db", null);

其中MyOpenHelper是用来辅助升级的

 1public class MyOpenHelper extends DaoMaster.OpenHelper {
2public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
3    super(context, name, factory);
4}
5
6@Override
7public void onUpgrade(Database db, int oldVersion, int newVersion) {
8    MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() {
9        @Override
10        public void onCreateAllTables(Database db, boolean ifNotExists) {
11            DaoMaster.createAllTables(db, ifNotExists);
12        }
13
14        @Override
15        public void onDropAllTables(Database db, boolean ifExists) {
16            DaoMaster.dropAllTables(db, ifExists);
17        }
18    }, UserDao.class);
19}
20 }

其中MigrationHelper 来进行数据库升级以及数据迁移。它主要是通过创建一个临时表,将旧表的数据迁移到新表中。关于MigrationHelper 源码可以参考https://github.com/yuweiguocn/GreenDaoUpgradeHelper

另外还有DAOMaster、DAOSession。DAOMaster主要是负责数据库创建和升级,DAOSession负责获得实体类的UserDAO,来进行增删改查。

 【END】

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
玩转Android之数据库框架greenDAO3.0使用指南
greenDao使用指南-1
android – 为单次运行应用程序只创建一次greenDAO数据库连接的最佳方法是什么?
14 Tips for Writing Spring MVC Controller
Mybatis查询oracle分页
一份 Spring Boot 项目搭建模板
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服