关于greendao数据库的使用
Greendao是目前比较热门数据库框架,将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。具备精简、性能最大化、内存开销最小化、易于使用的 APIs、等诸多有点,下面记录一下greendao的初步学习使用。使用只需要按照以下几步来做:
一、 通过项目app的moudle下的gradle引入依赖:
compile 'org.greenrobot:greendao:3.0.1'
compile 'org.greenrobot:greendao-generator:3.0.0'
二、 在App的moudle下的build.gradle中进行配置:
代码:
apply plugin: 'com.android.application' apply plugin: 'org.greenrobot.greendao' buildscript { repositories { mavenCentral() } dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0' } } greendao { schemaVersion 1 daoPackage 'com.kevin.greendao3.greendao' targetGenDir 'src/main/java' }
在gradle的根模块中加入上述代码后,sync project的时候,gradle会自动去maven仓库下载一个gradle的插件,当然了,这个插件就是为greenDAO服务的,用来生成数据库相关的代码。
其中的第三处配置greendao下面的是我们自定义的路径配置,(如果没有自定义生成的文件默认目录为:build/generated/source/greendao)
schemaVersion---->指定数据库schema版本号,迁移等操作会用到
daoPackage-------->通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名
targetGenDir-------->这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的Java目录中,而不是build中,这样就不用额外的设置资源目录了
一、编写实体类
@Entity
publicclass User
{
@Id
private Long id;
private String name;
@Transient
privateint
tempUsageCount;
// not persisted
}
编写完成之后点击as中Build菜单栏中的Make Project,make完成之后会发现我们的User类中突然多了好多代码,这就是greenDAO自动为你生成的了,代码如下:
@Entity
publicclass User
{
@Id
private Long id;
private String name;
@Transient
privateint
tempUsageCount;
// not persisted
public String getName() {
returnthis
.name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
returnthis
.id;
}
public void setId(Long id) {
this.id = id;
}
@Generated(hash =
873297011)
public User(Long id, String name) {
this.id = id;
this.name = name;
}
@Generated(hash =
586692638)
public User() { }
}
同时在我们自定义的目录下面生成了三个类:
一、 增删改查操作
1、先需要获取操作数据库的对象(如:mUserDao)
获取devOpenHelper
//上下文,一般传MyApplication.getContext()
//数据库名
//CursorFactory一般传null
DevOpenHelper devOpenHelper = new DevOpenHelper(this , "test-db" , null);
获取DaoMaster
//一个daoMaster代表一个数据库的连接
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
获取DaoSession
//DaoSessio可以得到操作各个entity的Dao对象操作对应数据库
// DaoSession可以创建多个,每一个都是属于同一个数据库连接的。
DaoSession daoSession = daoMaster.newSession();
获取Dao对象
//user表的数据库的操作的对象
mUserDao = daoSession.getUserDao();
// mPersonDao=daoSession.getPersonrDao()
2、获取了Dao对象我们就可以操作对应的数据库表了
※ 新增
直接加入一个entity对象
//插入一条数据
mUserDao.insert(new User(Long.valueOf(i + ""), "小强"));
Log.i("test", "添加了一个学生:小强" + i);
※ 删除
User user = new User();
user.setId(Long.valueOf("1"));
mUserDao.delete(user);
Log.i("test", "删除了一名学生:" + user.getName() + "id:" + user.getId());
※ 修改
//修改一名学生(当id是唯一字段且表中存在id为2的数据那么那个数据的名字将被修改为设置的名字)
User user1 = new User();
user1.setId(Long.valueOf("2"));
user1.setName("滕德兵");
mUserDao.update(user1);
※ 查询(最简单的查询,根据字段name来查询)
获得数据的集合
List<User>mlist=mUserDao.queryBuilder().where(Properties.Name.eq("滕德兵")).list();
//
(一) @Entity 定义实体
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
(二) @Id
(三)@NotNull 不为null
(四) @Unique唯一约束
(五) @ToMany一对多
(六)@OrderBy 排序
(七) @ToOne 一对一
(八)@Transient 不存储在数据库中
(九)@generated 由greendao产生的构造函数或方法