1、ORM
2、ORM开源库对比
3、GreenDAO
地址:https://github.com/greenrobot/greenDAO
特点:轻量,API易于使用,性能较优,对象关系配置简单
4、表结构
5、对象生成
6、示例代码
(1)加入依赖,插件,最好3.0以上的版本
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.+'
compile 'org.greenrobot:greendao:3.0.1'
}
apply plugin: 'org.greenrobot.greendao'
(2)生成表,确保表的版本
@Entity
public class Contact {
@Id(autoincrement = true)//c此为greendao数据库表的id
private Long id;
@NotNull
private String uid;
private String yid;
private int gender;
private String mobile;
private String photourl;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Property(nameInDb = "nickname")//数据库表名是什么
greendao{
schemaVersion 1
daoPackage 'com.netease.study.io.orm'
targetGenDir 'src/main/java'
}
(3)、生成类
Openhelper
/**
* openHelper只建议在开发情况使用,因为Greendao的openhelper在升级时删除全部的表
*
*/
public class MySqlOpenHelper extends DaoMaster.OpenHelper {
public MySqlOpenHelper(Context context, String name) {
super(context, name);
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
}
}
生成OrmHelper
public class OrmHelper {
private static OrmHelper instance;
private DaoMaster daoMaster = null;
private DaoSession daoSession = null;
public static OrmHelper getInstance(Context context) {
if(instance==null){
instance = new OrmHelper(context);
}
return instance;
}
public OrmHelper(Context context){
MySqlOpenHelper openHelper = new MySqlOpenHelper(context,"ORMDB");
daoMaster = new DaoMaster(openHelper.getWritableDatabase());
daoSession = daoMaster.newSession();
}
//插入联系人
public void insertContacts(List<Contact> lists){
ContactDao contactDao = daoSession.getContactDao();
contactDao.insertInTx(lists);
}
//查询联系人
public List<Contact> queryContacts(int offset,int limit){
ContactDao contactDao = daoSession.getContactDao();
Query<Contact> query = contactDao.queryBuilder().orderDesc(ContactDao.Properties.Id).offset(offset).limit(limit).build();
return query.list();
}
}
(4)异步查询
List<Contact> results;
//异步查询
public List<Contact> queryAsync(int offset,int limit){
ContactDao contactDao = daoSession.getContactDao();
Query<Contact> query = contactDao.queryBuilder().orderDesc(ContactDao.Properties.Id).offset(offset).limit(limit).build();
AsyncSession asyncSession= daoSession.startAsyncSession();
asyncSession.setListener(new AsyncOperationListener() {
@Override
public void onAsyncOperationCompleted(AsyncOperation operation) {
//查询结果
results=(List<Contact>)operation.getResult();
}
});
return results;
}