greenDao数据库的介绍
greenDao是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发时最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表、増删改查的操作。 |
1、添加远程依赖
// In your root build.gradle file:
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
}
2、创建实体类
注:entiy中是自己创建的实体类,gen是自动生成的
以下是OrganiztionInfo实体类示例:
@Entity
public class OrganizationInfo {
@Id
private Long id;
@NotNull
private String mobileNum;
private String organization;
private String organizationPhone;
private String organizationProvince;
private String organizationCity;
private String OrganizationArea;
private String detailOrganizationAddress;
private String worktime;
private String monthlyIncome;
public class OrganizationInfo {
@Id
private Long id;
@NotNull
private String mobileNum;
private String organization;
private String organizationPhone;
private String organizationProvince;
private String organizationCity;
private String OrganizationArea;
private String detailOrganizationAddress;
private String worktime;
private String monthlyIncome;
greenDAO中的实体类通过注解来标识,常见的注解如下:
@Entity表示实体类
@Id表示主键
@NotNull表示不为空
3、编译自动生成相关文件DaoMater、DaoSession、OrganizationInfoDao
创建实体类后,点击编译,会自动生成DaoMater、DaoSession、OrganizationInfoDao这几个文件
4、初始化数据库
在Application的onCreate中初始化数据库,代码如下:
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(mContext, "baidaibao-db");
Database db = helper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
Database db = helper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
提供一个共有方法,得到DaoSession
public DaoSession getDaoSession() {
return daoSession;
}
return daoSession;
}
5、从数据库中查询数据,①得到daoSession,②通过daoSession得到OrganizationInfoDao,③
OrganizationInfoDao
.queryBuilder().build().list()方法查询数据,代码如下:
/**
* 查询保存的工作信息
*/
private void queryOrganizationInfo() {
DaoSession daoSession = ((MyApplication) getApplication()).getDaoSession();
mOrganizationInfoDao = daoSession.getOrganizationInfoDao();
// List<OrganizationInfo> organizationInfoList = mOrganizationInfoDao.queryBuilder().build().list();
List<OrganizationInfo> organizationInfoList = mOrganizationInfoDao.queryBuilder().where(OrganizationInfoDao.Properties.MobileNum.eq(DataWareHouse.getMobileNum())).orderAsc(OrganizationInfoDao.Properties.Id).build().list();
if (organizationInfoList.size() > 0) {
int i = organizationInfoList.size() - 1;
mEtOrganization.setText(organizationInfoList.get(i).getOrganization());//单位名称
mEtOrganizationPhone.setText(organizationInfoList.get(i).getOrganizationPhone());//单位号码
organizationProvince = organizationInfoList.get(i).getOrganizationProvince();//省
organizationCity = organizationInfoList.get(i).getOrganizationCity();//市
organizationArea = organizationInfoList.get(i).getOrganizationArea();//区
mSelectJobAddress.setText(organizationProvince + organizationCity + organizationArea);
mEtDetailOrganizationAddress.setText(organizationInfoList.get(i).getDetailOrganizationAddress());//详细地址
mSelectWorktime.setText(organizationInfoList.get(i).getWorktime());
mEtMonthlyIncome.setText(organizationInfoList.get(i).getMonthlyIncome());
}
}
* 查询保存的工作信息
*/
private void queryOrganizationInfo() {
DaoSession daoSession = ((MyApplication) getApplication()).getDaoSession();
mOrganizationInfoDao = daoSession.getOrganizationInfoDao();
// List<OrganizationInfo> organizationInfoList = mOrganizationInfoDao.queryBuilder().build().list();
List<OrganizationInfo> organizationInfoList = mOrganizationInfoDao.queryBuilder().where(OrganizationInfoDao.Properties.MobileNum.eq(DataWareHouse.getMobileNum())).orderAsc(OrganizationInfoDao.Properties.Id).build().list();
if (organizationInfoList.size() > 0) {
int i = organizationInfoList.size() - 1;
mEtOrganization.setText(organizationInfoList.get(i).getOrganization());//单位名称
mEtOrganizationPhone.setText(organizationInfoList.get(i).getOrganizationPhone());//单位号码
organizationProvince = organizationInfoList.get(i).getOrganizationProvince();//省
organizationCity = organizationInfoList.get(i).getOrganizationCity();//市
organizationArea = organizationInfoList.get(i).getOrganizationArea();//区
mSelectJobAddress.setText(organizationProvince + organizationCity + organizationArea);
mEtDetailOrganizationAddress.setText(organizationInfoList.get(i).getDetailOrganizationAddress());//详细地址
mSelectWorktime.setText(organizationInfoList.get(i).getWorktime());
mEtMonthlyIncome.setText(organizationInfoList.get(i).getMonthlyIncome());
}
}
注:where条件选择 ,OrganizationInfoDao.Properties.MobileNum.eq("10086")表示将10086的手机号查询出来
orderAsc升序排序,orderAsc(OrganiztionInfoDao.Properties.Id)表示按照Id升序排序
6、保存数据库 同上面一样,首先要得到daoSession,通过daoSession得到OrganizationInfoDao,调用OrganizationInfoDao.insert()保存数据,代码如下:
/**
* 将数据保存到数据库中
*/
private void save2Database() {
OrganizationInfo organizationInfo = new OrganizationInfo(null, DataWareHouse.getMobileNum(), organization, organizationPhone, organizationProvince, organizationCity, organizationArea, detailOrganizationAddress, selectWorkTime, monthlyIncome);
mOrganizationInfoDao.insert(organizationInfo);
}
* 将数据保存到数据库中
*/
private void save2Database() {
OrganizationInfo organizationInfo = new OrganizationInfo(null, DataWareHouse.getMobileNum(), organization, organizationPhone, organizationProvince, organizationCity, organizationArea, detailOrganizationAddress, selectWorkTime, monthlyIncome);
mOrganizationInfoDao.insert(organizationInfo);
}