GreenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM数据库框架,本文将讲解如何集成GreenDao3.0环境,如何使用GreenDao自动生成代码及注解的使用。
GreenDao官网
GreenDao GitHubjava
GreenDao相较于ORMLite等其余数据库框架有如下优点:
1. 一个精简的库
2. 性能最大化
3. 内存开销最小化
4. 易于使用的 APIs
5. 对 Android 进行高度优化
而GreenDao3.0的版本主要使用注解方式定义实体类,经过gradle插件生成相应的代码。相较于3.0以前的版本集成步骤更为便捷,使用起来也更为简单。本文使用的版本为3.2.0。android
GitHub中提示添加maven仓库,可是AndroidStudio项目已经默认包含了jcenter仓库,而jcenter仓库就是maven仓库的一个分支,所以不须要再添加仓库,直接添加classPath便可。git
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}复制代码
在app下build.gradle文件中咱们须要声明GreenDao插件,及配置GreenDao生成dao路径等信息,声明GreenDao依赖。github
apply plugin: 'org.greenrobot.greendao'
......
greendao {
schemaVersion 1 //数据库版本号
daoPackage 'com.holmeslei.greendaodemo.database' //设置时生成代码的目录
targetGenDir 'src/main/java' //设置DaoMaster、DaoSession、Dao目录
//targetGenDirTest:设置生成单元测试目录
//generateTests:设置自动生成单元测试用例
}
dependencies {
......
compile 'org.greenrobot:greendao:3.2.0'
}复制代码
集成好使用环境后须要初始化实体,首先编写实体类。这里演示使用公司Company与雇员Employer实体例子。使用@Entity注解。莫急,注解机制在以后小节有详细讲解。数据库
@Entity
public class Company {
@Id(autoincrement = true) //自增
private Long id; //主键
private String companyName; //公司名称
private String industry; //行业
@ToMany(referencedJoinProperty = "companyId") //设置外键companyId
private List<Employee> employeeList; //公司与雇员创建一对多关系
}复制代码
@Entity
public class Employee {
@Id(autoincrement = true)
private Long id; //主键
private long companyId; //指向Company主键
private String employeeName; //雇员姓名
private int salary; //薪水
}复制代码
实体类与注解添加完毕后编译项目,就会为全部带注解的实体生成Dao文件,及DaoMaster与DaoSession。若未在build.gradle中配置过则默认生成目录为build/generated/source。若配置过则生成在配置的目录下。
app
3.0以后最大的不一样就是使用的注解来配置实体类属性,便捷且灵活。下面来看一下各种注解:框架
@Entity(
schema = "myschema",
active = true,
nameInDb = "AWESOME_USERS",
indexes = {
@Index(value = "name DESC", unique = true)
},
createInDb = false
)
public class Company {
......
}复制代码
@Id(autoincrement = true)
设置自增加。@Property (nameInDb="name")
。@Entity
public class Company {
@Id(autoincrement = true)
private Long id;
@Index(unique = true)
private String industry;
}
@Entity
public class Employee {
@Id(autoincrement = true)
private Long id;
@Unique
private String employeeName;
}复制代码
@Entity
public class Company {
@Id (autoincrement = true)
private Long id;
private long customerId;
@ToOne(joinProperty = "employeeId")
private Employee employee;
}
@Entity
public class Employee {
@Id(autoincrement = true)
private Long id;
private String employeeName;
}复制代码
//第一种:Employee实体经过外键companyId指向Company实体的主键Id创建一对多关联
@Entity
public class Company {
@Id(autoincrement = true)
private Long id;
private String companyName;
private String industry;
@ToMany(referencedJoinProperty = "companyId")
private List<Employee> employeeList;
}
@Entity
public class Employee {
@Id(autoincrement = true)
private Long id;
private long companyId;
private String employeeName;
private int salary;
}
//第二种:Employee以companyId为外键,与Company非主键不为空的键employeeTag创建一对多关联。
@Entity
public class Company {
@Id(autoincrement = true)
private Long id;
private String companyName;
private String industry;
@ToMany(joinProperties = {
@JoinProperty(name = "employeeTag", referencedName = "companyId")
})
private List<Employee> employeeList;
}
@Entity
public class Employee {
@Id(autoincrement = true)
private Long id;
private String employeeName;
private int salary;
@NotNull
private String companyId;
}
//第三种:经过第三者实体类创建关联,用的较少
@Entity
public class Employee {
@Id(autoincrement = true)
private Long id;
private String employeeName;
private int salary;
@ToMany
@JoinEntity(
entity = JoinEmployeeToCompany.class,
sourceProperty = "employeeId",
targetProperty = "companyId"
)
private List<Company> companyList;
}
@Entity
public class JoinEmployeeToCompany {
@Id(autoincrement = true)
private Long id;
private Long employeeId;
private Long companyId;
}
@Entity
public class Company {
@Id(autoincrement = true)
private Long id;
private String companyName;
private String industry;
}复制代码
到此,这一篇关于GreenDao3.0的集成与注解就讲解完毕了,欢迎参看下一篇关于如何使用GreenDao3.0对数据库进行增删改查。
技术渣一枚,有写的不对的地方欢迎大神们留言指正,有什么疑惑或者不懂的地方也能够在我Github上GreenDaoDemo项目的Issues中提出,我会及时解答。附上GreenDaoDemo的地址:
GreenDaoDemomaven