GreenDao
数据库存储操作会耗时,大量的byte数据的存储会造成OOM 所以最好写在子线程中
第一步
首先我们需要在项目build.gradle中导入包
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
build.gradle
第二步
依赖
implementation 'org.greenrobot:greendao:3.2.0'
implementation 'org.greenrobot:greendao-generator:3.2.0'
顶部声明
apply plugin: 'org.greenrobot.greendao'
注意标注
这里注意一下!
注意标注加入这些 代码
这些 代码 如果没有 特殊的 需求 不用 加 不会影响这个程序! 这里注意
greendao {
schemaVersion 1
daoPackage 'ash.com.greendao_20181212.greendao'//这个是生成代码保存的包名
targetGenDir 'src/main/java'//保存到java代码路径
}
生成位置
第三步
随意建立,或者是按照你的需求 建立一个 bean类 用来存放数据库中的数据
注解 | 作用 |
---|---|
@Entity |
用于标识这是一个需要Greendao帮我们生成代码的bean |
@Id |
标明主键,括号里可以指定是否自增 |
@Property |
用于设置属性在数据库中的列名(默认不写就是保持一致) |
@NotNull |
非空 |
@Transient |
标识这个字段是自定义的不会创建到数据库表里 |
@Unique |
添加唯一约束 |
---- | |
---- | |
@ToOne |
将自己的一个属性与另一个表建立关联(外键) |
@ToMany |
referencedJoinProperty,类似于外键约束 |
@JoinProperty |
对于更复杂的关系,可以使用这个注解标明目标属性的源属性 |
---- |
//数据表 名
@Entity(nameInDb = "user")
//规范命名 什么表 就是什么类
public class User {
//上面介绍了
@Id(autoincrement = true)
private Long id; //Long 大写! 注意!
private String name;
private String sex;
private int age;
private int salary;
}
然后接着点击 Build -> Make Project(快捷键ctrl+F9) , 将会自动为我们生成需要的类和代码
你自动生成的 文件夹 下 会生成 一个 跟你 bean类 有关的 Dao 文件
第四步
在新建一个App类 继承 Application
public class App extends Application {
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
DaoMaster.DevOpenHelper helper =
new DaoMaster.DevOpenHelper(this, "数据库名字-db");
//参数1:上下文
//参数2:String 数据库名字!
Database db = helper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
}
生成位置
生成位置有App 就一定 要 在清单文件中声明 !
第五步
public class MainActivity extends AppCompatActivity {
private Query<User> userQuery;
UserDao userDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaoSession daoSession =((App) getApplication()).getDaoSession();
userDao = daoSession.getUserDao();
userQuery = userDao.queryBuilder().orderAsc(UserDao.Properties.Id).build();
insertUser();
List<User> users = queryList();
Toast.makeText(this, users.get(0).getName(), Toast.LENGTH_SHORT).show();
}
插入数据
!!!--- ID(主键)必须是Long类型 而不是 long 类型 否则不会自增 l (L)
private void insertUser(){
User user = new User(1l,"ash", "男",26,50000);
userDao.insert(user);
}
删除特定位置的数据 注意 ID 位置
private void deleteUser(){
userDao.deleteByKey(1l);
}
对位置 为position的的数据进行修改
private void updateUser(){
//查询id是1位置的数据
User user = userDao.load(1l);
//对其进行修改
user.setName("~~");
userDao.update(user);
}
查询全部的数据
private List<User> queryList(){
List<User> users = userQuery.list();
return users;
}
按照属性name和sex来查询user
private List<User> queryByName(String name,String sex){
QueryBuilder<User> builder = userDao.queryBuilder();
Query<User> query = builder
.where(UserDao.Properties.Name.eq(name),UserDao.Properties.Sex.eq(sex))
.build();
List<User> list = query.list();
return list;
}
网友评论