一、步骤
1、在build.gradle(Project)中
①```mavenCentral() // 添加的代码```
②dependencies下添加GreenDao的插件```classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin```
2、在build.gradle(Module)中
①插件```apply plugin: 'org.greenrobot.greendao' // apply plugin```
②依赖```implementation 'org.greenrobot:greendao:3.2.2' // add library```
③初始化GreenDao配置
```greendao{
schemaVersion 1 //数据库版本号
daoPackage 'com.example.day05.dao' //数据库全路径 '自己的包名 applicationId.dao'
targetGenDir 'src/main/java' //存放位置
}```
解释: schemaVersion--> 指定数据库schema版本号,迁移等操作会用到;
daoPackage --> dao的包名,包名默认是entity所在的包;
targetGenDir --> 生成数据库文件的目录;
3、实体类(bean类)的 创建 与 注解
public class StudentBean {
@Id(autoincrement = true)
private long id;
@NotNull
private String name;
private int age;
}
@Entity 标识实体类,greenDAO会映射成sqlite的一个表,表名为实体类名的大写形式
@Id 标识主键,该字段的类型为long或Long类型,autoincrement设置是否自动增长
@Property 标识该属性在表中对应的列名称, nameInDb设置名称
@Transient 标识该属性将不会映射到表中,也就是没有这列
@NotNull 设置表中当前列的值不可为空
@Convert 指定自定义类型(@linkPropertyConverter)
@Generated 运行所产生的构造函数或者方法,被此标注的代码可以变更或者下次运行时清除
@Index 使用@Index作为一个属性来创建一个索引;
@JoinEntity 定义表连接关系
@JoinProperty 定义名称和引用名称属性关系
@Keep 注解的代码段在GreenDao下次运行时保持不变
@OrderBy 指定排序方式
@ToMany 定义与多个实体对象的关系
@ToOne 定义与另一个实体(一个实体对象)的关系
@Unique 向数据库列添加了一个唯一的约束
/**
* @Entity
* @Id(autoincrement = true) 标志主键
* @NotNull 标志这个字段不能是null
* @Property(nameInDb = "User")
* @Transient 表示不存储在数据库中
* @Index(unique = true)
* @Unique 用于标志列的值的唯一性。
*/
4、文件生成:Build - > ReBuild Project
二、使用
-
application:app的入口:全局上下文
在manifest中application下添加 android:name=".GreenDaoApplication"
public class GreenDaoApplication extends Application {
private static GreenDaoApplication app;
@Override
public void onCreate() {
super.onCreate();
app = this;
}
public static GreenDaoApplication getApp() {
return app;
}
}
private static DbHelper single;
private final StudentBeanDao studentBeanDao;
//通过单例获取类的对象
public static DbHelper getSingle() {
if (single == null) {
synchronized (DbHelper.class) { //同步代码块
if (single == null) {
single = new DbHelper();
}
}
}
return single;
}
private DbHelper() {
//创建数据库
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(GreenDaoApplication.getApp(), "student.db");
//获取读写对象
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
//获取管理器
DaoSession daoSession = daoMaster.newSession();
//获取表对象
studentBeanDao = daoSession.getStudentBeanDao();
}
public void insert(StudentBean studentBean) {
studentBeanDao.insertOrReplace(studentBean);
}
public void delete(StudentBean studentBean) {
studentBeanDao.delete(studentBean);
}
public List<StudentBean> selectAll() {
List<StudentBean> list = studentBeanDao.queryBuilder().list();
return list;
}
public void update(StudentBean studentBean) {
studentBeanDao.update(studentBean);
}
private void update() {
StudentBean studentBean = new StudentBean();
studentBean.setId((long) 4);
studentBean.setName("小红"+4);
studentBean.setAge(String.valueOf(4));
DbHelper.getInstance().update(studentBean);
}
private void query() {
List<StudentBean> list = DbHelper.getInstance().queryAll();
for (int i=0;i<list.size();i++){
Log.e("TAG", "查询结果"+list.get(i).toString());
}
}
private void delete() {
StudentBean studentBean = new StudentBean();
studentBean.setId((long) 5);
studentBean.setName("赵仟"+5);
studentBean.setAge(String.valueOf(5));
DbHelper.getInstance().delete(studentBean);
}
private void insert() {
for (int i=0; i<10; i++){
StudentBean studentBean = new StudentBean();
studentBean.setId((long) i);
studentBean.setName("赵仟"+i);
studentBean.setAge(String.valueOf(i));
DbHelper.getInstance().insert(studentBean);
}
网友评论