对于GreenDao的基本使用

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 select() {
        //方法一
        List users = mUserDao.loadAll();
        //方法二
        //List mDayStep = dao.queryBuilder().list();
        //方法三 惰性加载
        //List mDayStep = dao.queryBuilder().listLazy();

        return users;
    }
    /**
     * 查询指定用户
     */
    public List SearchUserInfo(int id)
    {
        //惰性加载
        List 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所对应的实体

你可能感兴趣的:(对于GreenDao的基本使用)