关于greenDAO,看这篇文章就够了


一、greenDAO简介


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

 

640?wx_fmt=png

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

 

二、greenDAO特征


1、对象映射( ORM)

 

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


2、高性能

 

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

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

640?wx_fmt=png

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 同步工程 即可

 

 

640?wx_fmt=png

四、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】


近期精选推荐


要嫁就嫁会做饭的,哪怕他月薪3000


这座城市很炎热,孤单的人总是晚回家


面试时,如何和面试官谈期望薪资


640?wx_fmt=jpeg

分享职场攻略、技术心得和创业资源

更多精彩内容,请长按识别关注



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值