转载请标明地址http://blog.csdn.net/qq_30034925/article/details/54729734
GreenDao官网说它是最好的数据库框架,我们也当真吧,反真它的更新进度给力,最近都有在更新。也使得我们Android程序员使用起来越来越方便。至于为什么使用它这里不做多解析。进入正题。
首先我们需要在项目build.gradle中导入包`
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
这里写图片描述
接着在model中的build.gradle中导入包
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
compile 'org.greenrobot:greendao-generator:3.2.0'
}
接着在模块build.gradle的顶部添加
apply plugin: ‘org.greenrobot.greendao’
以及
greendao {
schemaVersion 1
daoPackage 'com.jian.greendao.gen'//这个是生成代码保存的包名
targetGenDir 'src/main/java'//保存到java代码路径
}
这里写图片描述
同步后就可以使用greenDao。
先来看看greenDao强大的自动生成代码功能
创建实体类
@Entity
public class User {
@Id(autoincrement = true)
private Long id;
private String name;
private String sex;
private int age;
private int salary;
}
我们字需要编写这些,大家应该看到,在最顶部有一个@Entity,这个标志告诉greenDao,这个是我需要生成的表。接着点击 Build -> Make Project(快捷键ctrl+F9),将会自动为我们生成需要的类和代码
生成的User类
@Entity
public class User {
@Id(autoincrement = true)
private Long id;
private String name;
private String sex;
private int age;
private int salary;
@Generated(hash = 257789183)
public User(Long id, String name, String sex, int age, int salary) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.salary = salary;
}
@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;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public int getSalary() {
return this.salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
生成的类
这里写图片描述
创建App类,继承Application
public class App extends Application {
public static final boolean ENCRYPTED = true;
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, ENCRYPTED ? "users-db-encrypted" : "users-db");
Database db = helper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
}
tip:别忘记在manifeste把它添加进去
这里写图片描述
这个类起到防止重复创建数据库的操作。当然也可以使用单例模式来实现。
使用GreenDao进行增删改查
package com.example.jian.asked;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import com.example.greendao.gen.DaoSession;
import com.example.greendao.gen.UserDao;
import org.greenrobot.greendao.query.Query;
import org.greenrobot.greendao.query.QueryBuilder;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private Query<User> userQuery;
private RecyclerView recyclerView;
private MyAdapter myAdapter ;
UserDao userDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaoSession daoSession =((App) getApplication()).getDaoSession();
userDao = daoSession.getUserDao();
userQuery = userDao.queryBuilder().orderAsc(UserDao.Properties.Id).build();
}
//插入数据
private void insertUser(){
User user = new User(null,"jianguotang", "男",18,2000);
userDao.insert(user);
}
//删除特定位置的数据
private void deleteUser(){
userDao.deleteByKey(5l);
}
/**
* 对位置 为position的的数据进行修改
* @param position
*/
private void updateUser(Long position){
//查询id是1位置的数据
User user = userDao.load(5l);
//对其进行修改
user.setName("简国堂");
userDao.update(user);
}
//查询全部的数据
private List<User> queryList(){
List<User> users = userQuery.list();
return users;
}
/**
* 按照属性name和sex来查询user
* @param name
*/
private List<User> queryByName(String name,String sex){
QueryBuilder<User> builder = userDao.queryBuilder();
Query<User> query = builder
.where(UserDao.Properties.Name.eq(name),UserDao.Properties.Sex.eq(sex))
.build();
List<User> list = query.list();
return list;
}
}
GreenDao注解
@Entity 用于标识这是一个需要Greendao帮我们生成代码的bean
@Id 标明主键,括号里可以指定是否自增
@Property 用于设置属性在数据库中的列名(默认不写就是保持一致)
@NotNull 非空
@Transient 标识这个字段是自定义的不会创建到数据库表里
@Unique 添加唯一约束
@ToOne 是将自己的一个属性与另一个表建立关联(外键)
@ToMany的属性referencedJoinProperty,类似于外键约束。
@JoinProperty 对于更复杂的关系,可以使用这个注解标明目标属性的源属性。