本文带大家一步一步搭建GreenDao数据库:
1.添加依赖:
(1)首先在我们的builde.gradle(Module:app)下添加:
compile 'org.greenrobot:greendao:3.2.0'
(2)在builde.gradle(Module:app)的最上面添加:
apply plugin: 'org.greenrobot.greendao'
(3)在builde.gradle(Module:app)中添加:
greendao{
schemaVersion 1
targetGenDir 'src/main/java'
}
具体位置在:
(4)在我们项目的build.gradle(Project)下添加:
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
具体位置在:
这样,我们数据库所需要的依赖就添加完成了。
2.创建我们的实体类 Person:
新建class名字为Person(名称随意,本次演示为Person):
@Entity(定义实体)
public class Person {
public class Person {
@Id(Id,必须为Long类型)
private Long id;
private String name;
private int age;
@Transient(不存储在数据库中)
private String sex;
@Generated(hash = 1145075130) (构造函数或方法,其中 (hash = 1145075130) 这段为后期自动生成,我们不需要去写)
public Person(Long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Generated(hash = 1024547259)
public Person() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
3.点击MakeProject:
这个时候,系统会自动为我们生成 DaoMaster,DaoSession,PersonDao.
4.在配置完成后,我们需要进行增删改查的操作,这个时候我们使用单例模式:
(1)首先创建我们的MyApp:
public class MyApp extends Application {
private static Context context;
private static DaoMaster daoMaster;
private static DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
context = this;
}
public static Context getContext() {
return context;
}
public static DaoMaster getDaoMaster() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context,"Person.db",null);
daoMaster = new DaoMaster(helper.getWritableDb());
return daoMaster;
}
public static DaoSession getDaoSession() {
if (daoSession == null){
if (daoMaster == null){
daoMaster = getDaoMaster();
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
}
(2)编写我们的DBTool:
public class DBTool {
private static DBTool dbTool = new DBTool();
private static PersonDao personDao;
public static DBTool getInstance(){
if (dbTool == null){
synchronized (DBTool.class){
if (dbTool == null){
dbTool = new DBTool();
}
}
}
personDao = MyApp.getDaoSession().getPersonDao();
return dbTool;
}
//增加单一对象
public void insertPerson(Person person){
personDao.insert(person);
}
//增加集合
public void insertList(List<Person>list){
personDao.insertInTx(list);
}
//删除单一的方法
public void deletePerson(Person person){
personDao.delete(person);
}
//删除所有内容
public void deleteAll(){
personDao.deleteAll();
}
//根据Id删除
public void deleteById(Long id){
personDao.deleteByKey(id);
}
//根据某一字段删除
public void deleteByName(String name){
DeleteQuery<Person> deleteQuery = personDao.queryBuilder()
.where(PersonDao.Properties.Name.eq(name))
.buildDelete();
deleteQuery.executeDeleteWithoutDetachingEntities();
}
//根据具体姓名性别年龄进行删除
public void deleteBySame(String name,int age){
DeleteQuery<Person> deleteQuery = personDao.queryBuilder()
.where(PersonDao.Properties.Name.eq(name)
,PersonDao.Properties.Age.eq(age))
.buildDelete();
if (deleteQuery!= null){
deleteQuery.executeDeleteWithoutDetachingEntities();
}
}
//查询所有
public List<Person>queryAll(){
//方法1
List<Person>list = personDao.loadAll();
//方法2
List<Person> personlist = personDao.queryBuilder().list();
return list;
}
//查重---根据姓名
public boolean isSave(String name){
QueryBuilder<Person>queryBuilder = personDao.queryBuilder()
.where(PersonDao.Properties.Name.eq(name));
long size = queryBuilder.buildCount().count();
return size>0?true:false;
}
//查重
public boolean isSave(Person person){
QueryBuilder<Person> queryBuilder = personDao.queryBuilder()
.where(PersonDao.Properties.Name.eq(person.getName()),
PersonDao.Properties.Age.eq(person.getAge()));
Long size = queryBuilder.buildCount().count();
return size >0 ? true:false;
}
//根据姓名修改
public void changeByName(String name,String newName){
Person person = personDao.queryBuilder().where(PersonDao.Properties.Name.eq(name)).build().unique();
if (person!= null){
person.setName(newName);
}else {
}
}
}
(3)具体的使用:(只提供几种简单的使用,具体复杂的使用,需要自定义实现)
调用DBTool里面的方法
switch (v.getId()){
//增
case R.id.btn_insert:
case R.id.btn_insert:
for (int i = 0; i < 5; i++) {
Person person = new Person(null,String.valueOf(i),i);
DBTool.getInstance().insertPerson(person);
}
break;
Person person = new Person(null,String.valueOf(i),i);
DBTool.getInstance().insertPerson(person);
}
break;
//删
case R.id.btn_delete:
DBTool.getInstance().deleteAll();
break;
//改
case R.id.btn_change:
DBTool.getInstance().changeByName("2","新名字");
break;
//查
case R.id.btn_query:
for ( Person person : DBTool.getInstance().queryAll()){
Log.d("MainActivity", "id:" + person.getId()+"\n"
+ "name:" + person.getName()+"\n"+ "age:" + person.getAge()
);
}
break;
}