greenDao和之前的区别就是不用写大量的sql语句,节省了很多的时间。
首先在build.gradle导入
classpath ‘org.greenrobot:greendao-gradle-plugin:3.2.2’
然后在你的model里面导入
apply plugin: ‘org.greenrobot.greendao’
在app里面写这个
greendao {
schemaVersion 1 //版本
daoPackage ‘bwie.com.greendao.gdao’ // 一般为app包名+生成文件的文件夹名
targetGenDir ‘src/main/java’ //生成文件路径
}
赋值进去就行了
之后还有两个依赖
implementation ‘org.greenrobot:greendao:3.2.2’
implementation ‘org.greenrobot:greendao-generator:3.2.2’
然后在自定义一个User的类
public class User {
/**
* @NotNull @NotNull 设置数据库表当前列不能为空
*
* @Id:主键,,通过这个注解标记的字段必须是Long类型的这个字段在数据库中表示它就是主键,(autoincrement = true)表示主键会自增,如果false就会使用旧值 。而且必须改成Long,否则不成功
*
* //@Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "name"),注意外键不能使用该属性
*
* //@Transient:表明这个字段不会被写入数据库,只是作为一个普通的java类字段,用来临时存储数据的,不会被持久化
*
* @Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
*
* @Unique:该属性值必须在数据库中是唯一值
*
* @Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
@OrderBy 排序
@ToOne 一对一
* */
//属性为id,
@Id
private long id;
//自定义属性name,
@Property(nameInDb = "NAME")
private String name;
@Transient
private int tempuser;
}
之后再Ctrl+F9,刷新完之后再新建一个Application进行初始化,记住在清单文件中。
private DaoMaster.DevOpenHelper mHelper;
private SQLiteDatabase db;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
public static MyApplication instances;
@Override
public void onCreate() {
super.onCreate();
instances=this;
setDatabase();
}
public static MyApplication getInstances(){
return instances;
}
private void setDatabase() {
mHelper = new DaoMaster.DevOpenHelper(this, "sport-db");
db= mHelper.getWritableDatabase();
mDaoMaster= new DaoMaster(db);
mDaoSession=mDaoMaster.newSession();
}
public DaoSession getDaoSession() {
return mDaoSession;
}
public SQLiteDatabase getDb() {
return db;
}
}
之后就是对数据库的一些操作
private static bwie.com.greendao.gdao.UserDao mUserDao=MyApplication.getInstances().getDaoSession().getUserDao();
private User mUser=new User();
public void insert() {
mUser = new User(2, "李晓亮");
mUserDao.insert(mUser);
}
public void delete() {
mUserDao.deleteByKey((long) 2);
}
public void update() {
mUser = new User(2, "李晓亮(╯▽╰)");
mUserDao.update(mUser);
}
public List<User> select() {
//方法一
List<User> users = mUserDao.loadAll();
//方法二
//List<dayStep> mDayStep = dao.queryBuilder().list();
//方法三 惰性加载
//List<dayStep> mDayStep = dao.queryBuilder().listLazy();
return users;
}
/**
* 查询指定用户
*/
public List<User> SearchUserInfo(int id)
{
//惰性加载
List<User> list = mUserDao.queryBuilder().where(bwie.com.greendao.gdao.UserDao.Properties.Id.eq(id)).list();
//mUser.queryBuilder().where(UserInfoDao.Properties.Id.eq(id)).list();
return list;
}
}
其他一些插入方法:
-
insertInTx(T… entities):使用事务在数据库中插入给定的实体。 insertInTx(Iterable
entities):使用事务操作,将给定的实体集合插入数据库。 insertInTx(Iterable entities,
boolean setPrimaryKey):使用事务操作,将给定的实体集合插入数据库,并设置是否设定主键 。insertOrReplaceInTx(T… entities):使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖
insertOrReplaceInTx(Iterable
entities):使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖 。
insertOrReplaceInTx(Iterable entities, boolean
setPrimaryKey):使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖,并设置是否设定主键 。
insertWithoutSettingPk(T entity):将给定的实体插入数据库,但不设定主键。// 新增数据插入相关API save(T entity):将给定的实体插入数据库 saveInTx(Iterable
entities):将给定的实体集合插入数据库 saveInTx(T… entities):使用事务操作,将给定的实体插入数据库
查询: //查询全部 mUserDao.loadAll();//根据主键获取对象,也就是通过id获取 mUserDao.load(Long key)
//根据行号查找数据 loadByRowId(long rowId) 条件查询: //查询全部 List list =
mUserDao.queryBuilder().list();//查询 name等于xyh8的数据 List list=
mUserDao.queryBuilder().where(UserDao.Properties.Name.eq(“xyh8”)).list();//查询 name不等于xyh8的数据 List list=
mUserDao.queryBuilder().where(UserDao.Properties.Name.notEq(“xyh8”)).list();//like 模糊查询 //查询 name以xyh3开头的数据 List list =
mUserDao.queryBuilder().where(UserDao.Properties.Name.like(“xyh3%”)).list();//between 区间查询 年龄在20到30之间 List list =
mUserDao.queryBuilder().where(UserDao.Properties.Age.between(20,30)).list();//gt: greater than 半开区间查询,年龄大于18 List list =
mUserDao.queryBuilder().where(UserDao.Properties.Age.gt(18)).list();//ge: greater equal 半封闭区间查询,年龄大于或者等于18 List list =
mUserDao.queryBuilder().where(UserDao.Properties.Age.ge(18)).list();//lt: less than 半开区间查询,年龄小于18 List list =
mUserDao.queryBuilder().where(UserDao.Properties.Age.lt(18)).list();//le: less equal 半封闭区间查询,年龄小于或者等于18 List list =
mUserDao.queryBuilder().where(UserDao.Properties.Age.le(18)).list();//排序
//名字以xyh8开头,年龄升序排序 List list = mUserDao.queryBuilder()
.where(UserDao.Properties.Name.like(“xyh8%”))
.orderAsc(UserDao.Properties.Age)
.list();//名字以xyh8开头,年龄降序排序 List list = mUserDao.queryBuilder()
.where(UserDao.Properties.Name.like(“xyh8%”))
.orderDesc(UserDao.Properties.Age)
.list(); 三.更新: update(T entity) :更新给定的实体updateInTx(Iterable entities) :使用事务操作,更新给定的实体
updateInTx(T… entities):使用事务操作,更新给定的实体 删除: //删除全部
mUserDao.deleteAll();delete(T entity):从数据库中删除给定的实体
deleteByKey(K key):从数据库中删除给定Key所对应的实体
deleteInTx(T… entities):使用事务操作删除数据库中给定的实体
deleteInTx( entities):使用事务操作删除数据库中给定实体集合中的实体
deleteByKeyInTx(K… keys):使用事务操作删除数据库中给定的所有key所对应的实体
deleteByKeyInTx(Iterable keys):使用事务操作删除数据库中给定的所有key所对应的实体