什么是GreenDao?
- GreenDao是一款开源的数据库框架,使用它可以方便高效地操作SQLite Database
GreenDao有什么优势?
- 最高性能(可能是Android最快的ORM); 我们的基准也是开源的
- 易于使用的功能强大的API涵盖关系和联接
- 最小的内存消耗
- Library占用极小(<100KB),以保持您的建立时间较低,并避免65k方法限制
- 数据库加密:greenDAO支持SQLCipher,以保护用户的数据安全
- 更多详情请察看GreenDao的官网 —— [ greenDAO ]
在Android Stuidio上快速配置GreenDao
- 首先导入GreenDao 依赖包,在project视图的app下的gradle里添加如下:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support.constraint:constraint-layout:1.0.2'
//wesker add GreenDao start
compile 'org.greenrobot:greendao:3.0.1'
compile 'org.greenrobot:greendao-generator:3.0.0'
//wesker add GreenDao end
testCompile 'junit:junit:4.12'
}
- 生成GreenDao所依赖的插件,需要去maven仓库下载这个插件。在project视图的app下的gradle里添加
//wesker add GreenDao start
apply plugin: 'org.greenrobot.greendao'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
}
}
greendao {
schemaVersion 1
daoPackage 'com.greendaodemo.gen'//1
targetGenDir 'src/main/java'
}
//wekser add GreenDao end
名称 | 含义 |
---|---|
schemaVersion | 数据库schema版本号,迁移等操作会用到 |
daoPackage | 通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名 |
targetGenDir | 自定义生成数据库文件的目录 |
- 最后还要配置最后一步,在project下的gradle里配置
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
这一步不配置的话可能会报Error:Execution failed for task ‘:app:greendao’.这个错误
- 到此GreenDao配置完成,接下来我们来看看怎么使用它吧。
使用GreenDao
- 编写一个User实体类
- 执行 Build->Make Project。GreenDao会自动帮你生成get和set方法。并且生成如下文件
@Entity
public class User {
@Id(autoincrement = true)
private Long id;
private String username;
@Transient
private int temp;
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public void setId(Long id) {
this.id = id;
}
@Generated(hash = 79420138)
public User(Long id, String username) {
this.id = id;
this.username = username;
}
@Generated(hash = 586692638)
public User() {
}
}
开始增删改查操作
- 首先开始初始化数据库
//创建一个数据库,名字为"wesker"
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(ApplicationContextHodler.getContext(), "wesker", null);
//一个DaoMaster就代表着一个数据库的连接;
DaoMaster mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
// DaoSession可以让我们使用一些Entity的基本操作和获取Dao操作类,
// DaoSession可以创建多个,每一个都是属于同一个数据库连接的
DaoSession mDaoSession = mDaoMaster.newSession();
UserDao mUserDao = daoSession.getUserDao();
- Insert
private void insert(){
User mUser = new User(null,username);//如果id为null,那么数据库会为其分配自增长id
mUserDao.insert(mUser);
Toast.makeText(this, "成功插入", Toast.LENGTH_SHORT).show();
}
- Delete
private void delete(){
User findUser = mUserDao.queryBuilder().where(UserDao.Properties.Username.eq("update_wesker")).build().unique();
if(findUser != null){
mUserDao.deleteByKey(findUser.getId());
}
}
-Update
private void update(){
User findUser = mUserDao.queryBuilder().where(UserDao.Properties.Username.eq("insert_wesker")).build().unique();
if(findUser != null) {
findUser.setUsername("update_wesker");
mUserDao.update(findUser);
Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "用户不存在", Toast.LENGTH_SHORT).show();
}
}
-Query
private void query(){
List<User> userList = mUserDao.queryBuilder()
.where(UserDao.Properties.Id.notEq(1))
.limit(10)
.build().list();
StringBuilder s = new StringBuilder();
for(User user:userList){
s.append("userId:"+user.getId()+"username:"+user.getUsername());
s.append('\n');
}
display.setText(s);
}
-自定义查询
private void customSql(){
Cursor cursor = mUserDao.getDatabase().rawQuery("select * from wesker", null);
while (cursor.moveToNext()) {
int chatCount = cursor.getInt(0);
String username= cursor.getString(1);
}
}