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 plugin34 dependencies {5 compile 'org.greenrobot:greenDAO:3.2.2' // add library6}

 

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张图片

四、greenDAO案例

 

1、新建实体类(User)

 

 

1 @Entity2 public class User {3 @Id4 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 = true11 )12 public class User {13 ...14}

@Id

 

对应数据表中的 Id 字段

 

@Index

 

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

 

 

 

1 @Entity2 public class User {3@Id4private Long id;56@Index(unique = true)7private String name;8}

@Property

 

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

 

@NotNull

 

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

 

@Transient

 

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

 

@Unique

 

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

 

 

 

1 @Entity2 public class User {3@Id4private Long id;5@Unique6private 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 @Entity2 public class Customer { 3 @Id private Long id; 4 @ToMany(referencedJoinProperty = "customerId") 5 @OrderBy("date ASC") 6 private List orders; 7 } 8 9 @Entity10 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@Override10public void onCreate() {11 super.onCreate();12 application = this;13 context = getApplicationContext();14 setDatabase();15}1617public static MyApplication getApplication() {18 return application;19}2021private void setDatabase() {22 mHelper = new MyOpenHelper(this, "book-db", null);23 db = mHelper.getWritableDatabase();24 mDaoMaster = new DaoMaster(db);25 mDaoSession = mDaoMaster.newSession();26}2728public DaoSession getDaoSession() {29 return mDaoSession;30}3132public SQLiteDatabase getDb() {33 return db;34}35 }

4、获取UserDao

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

5、添加记录

添加单条记录

User user;

userDao.insert(user);

 

插入一组数据

List listUser;

userDao.insert(listUser);

插入或替换数据

 

根据主键来判断

User user;

userDao.insertOrReplace(user)

 

List listUser;

userDao.insertOrReplace(listUser);

6、删除记录

删除单条记录

User user;

userDao.delete(user);

删除一组数据

List listUser;

userDao.deleteInTx(listUser);

删除所有数据

userDao.deleteAll();

7、修改记录

修改单条记录

User user;

userDao.update(user);

修改一组数据

List 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 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 @Override10 public void onCreateAllTables(Database db, boolean ifNotExists) {11 DaoMaster.createAllTables(db, ifNotExists);12 }1314 @Override15 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,来进行增删改查。

你可能感兴趣的:(greenDAO 查询)