[url]https://github.com/greenrobot/greenDAO
apply plugin: 'com.android.application'
compile 'org.greenrobot:greendao:3.2.0'
buildscript {
repositories {
jcenter()
mavenCentral() //主要是加这个仓库
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' //主要加入的这行代码
}
}
GreenDaoManager.getmInstance(this);
public class GreenDaoManager {
private static GreenDaoManager mInstance;
private static DaoSession daoSession;
private static DaoMaster daoMaster;
private GreenDaoManager(Context context) {
//通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper
//注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context, "contacts-db",null);
//注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
SQLiteDatabase sqLiteDatabase = devOpenHelper.getWritableDatabase();
daoMaster = new DaoMaster(sqLiteDatabase);
daoSession = daoMaster.newSession();
}
public static GreenDaoManager getmInstance(Context context){
if (mInstance == null){
synchronized (GreenDaoManager.class){
if (mInstance == null){
mInstance = new GreenDaoManager(context);
}
}
}
return mInstance;
}
public DaoSession getDaoSession(){
return daoSession;
}
public DaoMaster getDaoMaster(){
return daoMaster;
}
}
@Entity
public class User {
@Id
private Long id;
private String name;
@Transient
private int tempData;
}
@Entity
public class User {
@Id
private Long id;
private String name;
@Transient
private int tempData;
@Generated(hash = 873297011)
public User(Long id, String name) {
this.id = id;
this.name = name;
}
@Generated(hash = 586692638)
public User() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
_注解的意思:
@Entity 定义实体
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
(二) @Id
(三) @NotNull 不为null
(四) @Unique 唯一约束
(五) @ToMany 一对多
(六) @OrderBy 排序
(七) @ToOne 一对一
(八) @Transient 不存储在数据库中
(九) @generated 由greendao产生的构造函数或方法_
**获取dao对象
UserDao userDao = GreenDaoManager.getmInstance(this).getDaoSession().getUserDao();**
//创建一个新的用户实体对象
User user = new User(id, name);
//插入操作
userDao.insert(user);
//根据传入的name先做查找,如果查到的用户不为空则调用删除方法
User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq(name)).build().unique();
if (findUser != null) {
//根据实体用户的id删除对应的条目
userDao.deleteByKey(findUser.getId());
}
//将旧名字改为新名字
private void updataUser(String oldName, String newName) {
//获取dao对象
UserDao userDao = GreenDaoManager.getmInstance(this).getDaoSession().getUserDao();
//去数据库中查找对应的数据
User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq(oldName)).build().unique();
if (findUser != null) {
//查找的数据返回不为空.设置新名字
findUser.setName(newName);
//更新数据库
GreenDaoManager.getmInstance(this).getDaoSession().getUserDao().update(findUser);
Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "用户不存在", Toast.LENGTH_SHORT).show();
}
//刷新列表
myAdapter.notifyDataSetChanged();
}
//调用返回一个集合
userList = GreenDaoManager.getmInstance(this).getDaoSession().getUserDao().queryBuilder().build().list();