Android数据库框架-GreenDao入门
[0] greenDAO介绍
GreenDAO是一款开源且面向Android的轻便、快捷的ORM框架,可以将对象映射到SQLite数据库中.它针对Android进行了高度优化,性能最大化且内存消耗极少同时还支持数据库加密.[百科]
一、greendao环境配置
1.新建一个项目
我的项目名称为Search
2.配置
2.1在项目Project的build.gradle中配置classpath:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'//添加插件
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
之后点击Sync Project
2.2. 在app的build.gradle中配置
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
之后在dependencies中添加依赖
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'org.greenrobot:greendao:3.2.2' // 添加依赖
}
之后配置数据库相关信息
greendao {
schemaVersion 1 //当前数据库版本
targetGendir 'src/main/java'//指定生成代码的目录
daoPackage 'com.lab.search'//生成代码到具体的包下
}
配置就完成了,之后点击Sync Now
在Sync时,出现了下载依赖很慢的事情,所以我在工程目录下的build.gradle将buildscript的repositories改成了
repositories {
google()
//jcenter()
maven{
url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
以及
allprojects {
repositories {
google()
//jcenter()
maven{
url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
}
把地址改成了阿里云的仓库,下载就快了。
二、使用greendao(1)
2.1. 创建一个实体类
在目录下创建一个Package名为bean,在bean包下面创建一个Java类,类为实体类,即仅有属性以及getter、setter、构造方法以及toString()方法的类,一个实体类则对应一张数据库的表,我将这个实体类取名为UserInfo,类中有id,userName,phoneNumber,address等属性
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
@Entity
public class UserInfo {
@Id
private Long id;
@Property(nameInDb = "user_name")
private String userName;
@Property(nameInDb = "phone_number")
private String phoneNumber;
@Property(nameInDb = "address")
private String address;
}
在这里,我用了许多注解,而这些注解有什么作用呢?简单介绍一下在GreenDao中常用的一些注解
@Entity:将我们的java普通类变为一个能够被greenDAO识别的数据库类型的实体类,也就是将这个类标记为要映射到数据库的实体类
@Id:主键,选择使用long或Long,若写成@Id(autoincrement = true)则可标记为自增长。
@Property(nameInDb = “”) :表示该类的这个属性是表的一个字段(即一列),且非主键,nameInDb值则是这个字段的名字,
@NotNull: 不为null
@Transient 不保存于数据库,添加此标记后不会生成数据库表的列
@Index 作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
@Unique: 唯一约束,也就是值必须唯一
@ToOne 表为一对一关系
@ToMany 一对多关系
@Generated 由greendao产生的构造函数或方法,此注释标记的所有代码元素都可以在生成的下一次运行中更改/删除
编译(Make Project)之后,代码就自动生成了构造函数及set get方法,之后再加上toString方法,在进行数据库操作时,可用toString()方法打印来验证结果的正确性。
@Entity
public class UserInfo {
@Id
private long id;
@Property(nameInDb = "user_name")
private String userName;
@Property(nameInDb = "phone_number")
private String phoneNumber;
@Property(nameInDb = "address")
private String address;
@Generated(hash = 459973421)
public UserInfo(long id, String userName, String phoneNumber, String address) {
this.id = id;
this.userName = userName;
this.phoneNumber = phoneNumber;
this.address = address;
}
@Generated(hash = 1279772520)
public UserInfo() {
}
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPhoneNumber() {
return this.phoneNumber;
}