GreenDAO 优势
1、一个精简的库
2、性能最大化
3、内存开销最小化
4、易于使用的 APIs
5、对 Android 进行高度优化
1.首先先配置
1):在根build.gradle里添加:classpath ‘org.greenrobot:greendao-gradle-plugin:3.2.0’
2):在项目的build.gradle里:
-----①apply plugin: ‘org.greenrobot.greendao’
-----②在android{}里添加:
greendao {
schemaVersion 1//数据库版本号
daoPackage ‘com.example.zhujie.mydao’//设置DaoMaster、DaoSession、Dao包名
targetGenDir ‘src/main/java’//设置DaoMaster、DaoSession、Dao目录
//targetGenDirTest:设置生成单元测试目录
//generateTests:设置自动生成单元测试用例
}
-----③在dependencies{}里添加:(导入依赖)
implementation ‘org.greenrobot:greendao:3.2.2’
2.新建一个实体类
①通过@Entity
②id只能是Long类型, 通过Id(autoincrement = true) // 主键自增
③通过锤子自动生成一些内容
④toString
3.通过锤子(Build------>Make Project)
1):基本类里 自动生成: 图片内容+setter and getter
2):①DaoMaster,②DaoSession,③StudentDao
4.新建一个类继承Application
public class MyApp extends Application {
private static DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
initGreenDao();
}
private void initGreenDao() {
//创建DevOpenHelper类
DaoMaster.DevOpenHelper openHelper=new DaoMaster.DevOpenHelper(this,"fxr.db");
//开启一个可写数据库类
SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
//通过DaoMaster封装
DaoMaster master=new DaoMaster(writableDatabase);
daoSession = master.newSession();
}
public static DaoSession getDaoSession(){
return daoSession;
}
}
*注意:写完要在清单文件中注册
5.在MainActivity里
public class MainActivity extends AppCompatActivity {
@BindView(R.id.Insert)
Button Insert;
@BindView(R.id.Delete)
Button Delete;
@BindView(R.id.Update)
Button Update;
@BindView(R.id.Select)
Button Select;
@BindView(R.id.get_Content)
TextView getContent;
private StudentDao studentDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
studentDao = MyApp.getDaoSession().getStudentDao();
}
@OnClick({R.id.Insert, R.id.Delete, R.id.Update, R.id.Select})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.Insert:
setInsert();
break;
case R.id.Delete:
setDelete();
break;
case R.id.Update:
setUpdate();
break;
case R.id.Select:
setSelect();
break;
}
}
//增加数据
private void setInsert() {
Student student = new Student("迪丽热巴", "美炸了", 18);
long insert = studentDao.insert(student);
if (insert > 0) {
Toast.makeText(this, "插入成功", Toast.LENGTH_SHORT).show();
}
}
//删除数据 删除必须要删除数据库里面存在的数据
private void setDelete() {
studentDao.deleteByKey(1l);
Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
}
//修改数据
private void setUpdate() {
//修改必须要改数据库里面存在的数据
Student student = studentDao.load(1l);
student.setAge(3);
student.setName("fff");
student.setSex("女");
studentDao.update(student);
}
//查询数据
private void setSelect() {
//查询所有数据
getContent.setText("");
List<Student> students = studentDao.loadAll();
getContent.setText(students.toString());
}
}
*
*
图示注解的内容通过以下操作实现:(ButterKnife)
a:下载插件:File---->Settings---->Plugins----->搜索zelezny 下载
b:导两个依赖:----implementation ‘com.jakewharton:butterknife:8.8.1’
------------------------annotationProcessor ‘com.jakewharton:butterknife-compiler:8.8.1’
c:Alt+Insert 选最后一个
*
*
Greendao中的注解
1.实体@Entity注解
① schema:告知GreenDao当前实体属于哪个schema
② active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
③ nameInDb:在数据库中使用的别名,默认使用的是实体的类名
④ indexes:定义索引,可以跨越多个列
⑤ createInDb:标记创建数据库表
2.基础属性注解
① @Id:主键 Long 型,可以通过@Id(autoincrement = true)设置自增长
② @Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = “name”)
③ @NotNull:设置数据库表当前列不能为空
④ @Transient:添加此标记后不会生成数据库表的列
3.索引注解
① @Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
② @Unique:向数据库添加了一个唯一的约束
4.关系注解
① @ToOne:定义与另一个实体(一个实体对象)的关系
② @ToMany:定义与多个实体对象的关系