greenDAO是一款面向Android的轻便快捷的ORM,可将对象映射到SQLite数据库。 针对Android进行了高度优化,greenDAO提供了出色的性能并消耗了最少的内存。
GitHub地址:点击打开链接
GreenDao的优点如下:
应用广泛:greenDAO自2011年以来一直在使用,被无数着名的应用程序所使用
超简单:简洁直观的API,在V3中带有注释
小:小于150K,它只是纯Java jar(没有CPU依赖的本机部分)
快速:可能是由智能代码生成驱动的Android中最快的ORM
安全和表达性的查询API:QueryBuilder使用属性常量来避免打字错误
强大的连接:跨实体查询,甚至连接连接以进行复杂关系
灵活的属性类型:使用自定义类或枚举来表示实体中的数据
加密:支持SQLCipher加密数据库
一.使用准备
1.在build.gradle(Module:app)中加入
compile 'org.greenrobot:greendao:3.0.1'
compile 'org.greenrobot:greendao-generator:3.0.0'
2.在build.gradle(Module:app)中引入插件并自定义路径
apply plugin: 'org.greenrobot.greendao'
greendao {
schemaVersion 1
daoPackage 'com.example.leidong.greendaotest.gen'
targetGenDir 'src/main/java'
}
3.在build.gradle(Project:XXX)的dependencies中加入
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
4.创建一个User的Bean
package com.example.leidong.greendaotest.beans;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;
/**
* Created by leidong on 2017/5/30
*/
@Entity
public class User {
@Id(autoincrement = true)
private Long id;
private String name;
private int age;
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Generated(hash = 1309193360)
public User(Long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Generated(hash = 586692638)
public User() {
}
}
5.编译项目,生成新的文件,结构如下
二.GreenDao的简单使用
1.新建一个MyApplication类继承自MyApplication。
package com.example.leidong.greendaotest;
import android.app.Application;
import android.database.sqlite.SQLiteDatabase;
import com.example.leidong.greendaotest.gen.DaoMaster;
import com.example.leidong.greendaotest.gen.DaoSession;
/**
* Created by leidong on 2017/5/30
*/
public class MyApplication extends Application {
private DaoMaster.DevOpenHelper mHelper;
private SQLiteDatabase db;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
public static MyApplication instances;
@Override
public void onCreate() {
super.onCreate();
instances = this;
setDatabase();
}
public static MyApplication getInstances(){
return instances;
}
/**
* 设置greenDao
*/
private void setDatabase() {
mHelper = new DaoMaster.DevOpenHelper(this, "leidong.db", null);
db = mHelper.getWritableDatabase();
// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
mDaoMaster = new DaoMaster(db);
mDaoSession = mDaoMaster.newSession();
}
public DaoSession getDaoSession() {
return mDaoSession;
}
public SQLiteDatabase getDb() {
return db;
}
}
在AndroidManifest.xml的application中写入:
android:name=".MyApplication"
2.MainActivity,java
package com.example.leidong.greendaotest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.example.leidong.greendaotest.beans.User;
import com.example.leidong.greendaotest.gen.UserDao;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private UserDao userDao;
private EditText editText1, editText2, editText3;
private TextView textView;
private Button button1, button2, button3, button4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWidgets();
initActions();
}
/**
* 获取组件
*/
private void initWidgets() {
editText1 = (EditText) findViewById(R.id.editText1);
editText2 = (EditText) findViewById(R.id.editText2);
editText3 = (EditText) findViewById(R.id.editText3);
textView = (TextView) findViewById(R.id.textView);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button4 = (Button) findViewById(R.id.button4);
}
/**
* 初始化动作
*/
private void initActions() {
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
}
/**
* 按钮点击事件
* @param v 视图
*/
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button1:
addUser();
break;
case R.id.button2:
deleteUser();
break;
case R.id.button3:
modifyUser();
break;
case R.id.button4:
queryUser();
break;
default:
break;
}
}
/**
* 查
*/
private void queryUser() {
StringBuilder sb = new StringBuilder();
userDao = MyApplication.getInstances().getDaoSession().getUserDao();
List<User> userList = userDao.loadAll();
for(int i = 0; i < userList.size(); i++){
String temp = "";
temp += "ID = " + userList.get(i).getId() + " ";
temp += "Name = " + userList.get(i).getName() + " ";
temp += "Age = " + userList.get(i).getAge() + "\n";
sb.append(temp);
}
textView.setText(sb.toString());
}
/**
* 改
*/
private void modifyUser() {
long id = Long.parseLong(editText1.getText().toString().trim());
String name = editText2.getText().toString().trim();
int age = Integer.parseInt(editText3.getText().toString().trim());
userDao = MyApplication.getInstances().getDaoSession().getUserDao();
User user = new User();
user.setId(id);
user.setName(name);
user.setAge(age);
userDao.update(user);
}
/**
* 删
*/
private void deleteUser() {
long id = Long.parseLong(editText1.getText().toString().trim());
userDao = MyApplication.getInstances().getDaoSession().getUserDao();
userDao.deleteByKey(id);
}
/**
* 增
*/
private void addUser() {
String name = editText2.getText().toString().trim();
int age = Integer.parseInt(editText3.getText().toString().trim());
userDao = MyApplication.getInstances().getDaoSession().getUserDao();
User user = new User();
user.setName(name);
user.setAge(age);
userDao.insert(user);
}
}
3.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp"
tools:context="com.example.leidong.greendaotest.MainActivity">
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/textInputLayout">
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="ID" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textInputLayout"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:id="@+id/textInputLayout2">
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Name" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textInputLayout2"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:id="@+id/textInputLayout3">
<EditText
android:id="@+id/editText3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Age" />
</android.support.design.widget.TextInputLayout>
<TextView
android:id="@+id/textView"
android:background="@drawable/fillet"
android:textSize="16sp"
android:textColor="#ffffff"
android:padding="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/textInputLayout3"
android:layout_above="@+id/linearLayout" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:orientation="horizontal"
android:weightSum="4"
android:layout_marginTop="8dp"
android:id="@+id/linearLayout">
<Button
android:id="@+id/button1"
android:layout_margin="1dp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="36dp"
android:text="Add"
android:textAllCaps="false"
android:background="@drawable/fillet"/>
<Button
android:id="@+id/button2"
android:layout_margin="1dp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="36dp"
android:text="Delete"
android:textAllCaps="false"
android:background="@drawable/fillet"/>
<Button
android:id="@+id/button3"
android:layout_margin="1dp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="36dp"
android:text="Modify"
android:textAllCaps="false"
android:background="@drawable/fillet"/>
<Button
android:id="@+id/button4"
android:layout_margin="1dp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="36dp"
android:text="Query"
android:textAllCaps="false"
android:background="@drawable/fillet"/>
</LinearLayout>
</RelativeLayout>
其中需要在build.gradle中引入:
compile 'com.android.support:design:23.4.0'
三.运行结果
工程下载:https://github.com/leidongld/GreenDaoTest