我相信,在平时的开发过程中,大家一定会或多或少地接触到数据库。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。所以,适用于 Android 的greedao数据库也就孕育而生,简单的讲,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的解决方案。
GREENDAO 设计的好处
-
一个精简的库
-
性能最大化
-
内存开销最小化
-
易于使用的 APIs
-
对 Android 进行高度优化
如何开始
现在我们就来讲一下greedao的简单使用吧!!!
首先,和往常一样导入依赖包,进行配置greedao数据库
compile 'org.greenrobot:greendao:3.0.1'
compile 'org.greenrobot:greendao-generator:3.0.0'
build.gradle配置
apply plugin: 'org.greenrobot.greendao'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
}
}
greendao {
schemaVersion 1
daoPackage 'com.wyk.greendaodemo.greendao.gen'
targetGenDir 'src/main/java'
}
需要实现一个Bean对象进行保存数据
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Transient;
import org.greenrobot.greendao.annotation.Generated;
@Entity //指定为数据库类的对象
public class User {
@Id //此ID必须有且为long类型
private Long id;
private String name;
@Transient //这个注解意思为这个属性不会保存到数据库为属性 在数据库中不对这个属性进行操作
private int tempUsageCount; // not persisted
public String getName() {
return this.name; //下面的方法自己无需定义 点击studio上方Build->Make Project会自动生成文件
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return this.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() {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", tempUsageCount=" + tempUsageCount +
'}';
}
}
自己生成的三个核心类
基本上这样的配置就算完成了,简单的写一下增删改查的
创建一个类继承Application初始化数据库:
import android.app.Application;
import com.wyk.greendaodemo.greendao.gen.DaoMaster;
import com.wyk.greendaodemo.greendao.gen.UserDao;
/**
* Created by 15218 on 2017/11/7.
*/
public class App extends Application {
private UserDao userDao;
//暴露给外部使用此数据库
public UserDao getUserDao() {
return userDao;
}
@Override
public void onCreate() {
super.onCreate();
//对数据库进行初始化 liu.db 数据库的名字
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this,"liu.db");
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
userDao = daoMaster.newSession().getUserDao();
}
}
这样我们的逻辑就好写了吧,在我们的Mantivity里边得到数据库,进行对数据库的操作
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
import com.wyk.greendaodemo.greendao.gen.UserDao;
import org.greenrobot.greendao.query.QueryBuilder;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private UserDao userDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
App app = (App) getApplication();//得到数据库使用
userDao = app.getUserDao();
}
public void add(View v){//添加单条数据
User u = new User(null,"刘备");
userDao.insert(u);
}
public void addAll(View v){//批量添加
userDao.insertInTx(new User[]{new User(null,"达摩"),
new User(null,"赵云"),
new User(null,"亚瑟")
,new User(null,"吕布")});
}
public void delete(View v){//删除单条
userDao.deleteByKey((long) 1);
}
public void deleteAll(View v){ //批量删除
userDao.deleteAll();
}
public void updata(View v){ //修改单条
User u = new User(Long.valueOf(1),"孙尚香");
userDao.update(u);
}
public void updataAll(View v){ //批量修改
userDao.updateInTx(new User[]{
new User(Long.valueOf(2),"孙尚香1"),
new User(Long.valueOf(3),"孙尚香2")
,new User(Long.valueOf(4),"孙尚香3")
});
}
public void select(View v){ //条件查询
QueryBuilder<User> userQueryBuilder = userDao.queryBuilder();
List<User> list = userQueryBuilder.build().list();
List<String> l = new ArrayList<>();
for (int i=0;i<list.size();i++){
l.add(list.get(i).getName());
}
Toast.makeText(MainActivity.this,l.toString(),Toast.LENGTH_SHORT).show();
}
public void selectAll(View v){ //查询所有
List<User> users = userDao.loadAll();
//吐司事件
Toast.makeText(MainActivity.this,users.toString(),Toast.LENGTH_SHORT).show();
}
}
Mantivity.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context="liuhao.baway.com.liuhao_greedao.MainActivity">
<Button
android:text="单个添加"
android:onClick="add"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="批量添加"
android:onClick="addAll"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="单个删除"
android:onClick="delete"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="批量删除"
android:onClick="deleteAll"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="单个修改"
android:onClick="updata"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="多条修改"
android:onClick="updataAll"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="条件查询"
android:onClick="select"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="查询全部"
android:onClick="selectAll"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
效果:
Sqlite中显示的
推荐文章:Greedao的注解 http://blog.csdn.net/bugproof/article/details/52074959
Greedao的关联 http://blog.csdn.net/u010687392/article/details/48496299
Greedao的操作 http://blog.csdn.net/njweiyukun/article/details/51893092