Greendao 使用总结

关于GreenDao的配置:http://itangqi.me/2015/07/26/orm-greendao-summary/

在上述配置中的第三步,生成DAO文件时,步骤如下:主菜单->Run -> Run…
然后就会弹出这里写图片描述
选择ExampleDaoGenerator运行就ok了。

注意:可以用“RE文件管理器“来查看数据库,测试是否创建成功。

GreenDao 的基本使用方法

1、如何创建表
在daoexamplegenerator工程下的ExampleDaoGenerator.java文件中添加表,如下:

public class ExampleDaoGenerator {
    public static void main(String[] args) throws Exception{
        //在更新的时候要更改版本号
        Schema schema = new Schema(1,"com.example.baiyuanwei.commonlib");
        //添加一个noto表
        addNote(schema);
        //添加一个book表
        addBook(schema);
        //添加一个学生表
        addStudent(schema);

        //这行代码就可以自动生成我们需要的代码了
        new DaoGenerator().generateAll(schema,"/Users/baiyuanwei/Documents/androidFiles/CommonLib/app/src/main/java-gen");
    }

    /**
     * 这是一个note表
     * @param schema
     */
    private static void addNote(Schema schema){

        Entity note = schema.addEntity("Note");
        //默认id 是主键
        note.addIdProperty();

        note.addStringProperty("text").notNull();
        note.addDateProperty("date");
        note.addStringProperty("comment");
    }

    /**
     * 书表
     * @param schema
     */
    private static void addBook(Schema schema){
        Entity book = schema.addEntity("BookLib");
        book.addIdProperty();
        book.addStringProperty("name");
        book.addIntProperty("price");
    }

    /**
     * 这是一个新建的表
     * @param schema
     */
    private static void addStudent(Schema schema){
        Entity entity = schema.addEntity("Student");
        entity.addIdProperty();
        entity.addStringProperty("name");
    }
}

注意:我们在测试的时候,如果修改了此文件,就要重新编译一次此文件,生成DAO文件,最好把测试手机上的此app删掉,重新编译安装,否则就得更改版本号更新。

2、如何使用生成的DAO 文件
我们自定义Application,如下:

public class MyApplication extends Application {

    private DaoMaster daoMaster;
    private DaoSession daoSession;
    private SQLiteDatabase sqLiteDatabase;

    @Override
    public void onCreate() {
        super.onCreate();
        setupDataBase();
    }

    private void setupDataBase() {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, DbConstant.DB_NAME, null);
        sqLiteDatabase = helper.getWritableDatabase();
        daoMaster = new DaoMaster(sqLiteDatabase);
        daoSession = daoMaster.newSession();
    }

    public DaoSession getDaoSession() {
        return daoSession;
    }
}

我们只要用DaoSession这个对象就可以完成数据库的增删改查了。其中主要的就是DaoMaster、DaoSession、SQLiteDatabase,这些在Application中创建好,我们就相当于在整个app中创建了一次这些变量。
然后我们新建一个DbHelper.java类,完成对数据库增删改查的封装,如下:

public class DbHelper {

    //note表
    private NoteDao noteDao;

    //BookLib 表
    private BookLibDao bookLibDao;

    private static DbHelper dbHelperInstance;
    private static Context mContext;

    /**
     * 单例模式得到DbHelper的对象
     *
     * @param context
     * @return
     */
    public static DbHelper getDbHelperInstance(Context context) {
        if (dbHelperInstance == null) {
            dbHelperInstance = new DbHelper();
            if (mContext == null) {
                mContext = context;
            }
            DaoSession daoSession = ((MyApplication) mContext.getApplicationContext()).getDaoSession();
            dbHelperInstance.noteDao = daoSession.getNoteDao();
            dbHelperInstance.bookLibDao = daoSession.getBookLibDao();
        }

        return dbHelperInstance;
    }

    /**
     * 如果不存在该书名,就增加数据
     * @param bookLib
     */
    public void insertBookLibData(BookLib bookLib) {
        if (!isSaveByName(bookLib.getName())){
            bookLibDao.insert(bookLib);
        }

    }

    /**
     * 根据id删除数据
     * 也可以根据其它列删除数据
     *
     * @param id
     */
    public void deleteBook(int id) {
        QueryBuilder<BookLib> qb = bookLibDao.queryBuilder();

        //where的括号中就是条件,把其中的"Id"换成其它列名就ok了,"eq"代表相等
        DeleteQuery<BookLib> dq = qb.where(BookLibDao.Properties.Id.eq(id)).buildDelete();
        dq.executeDeleteWithoutDetachingEntities();
    }

    /**
     * 删除BookLib表中的所有数据
     */
    public void deleteAll() {
        bookLibDao.deleteAll();
    }

    /**
     * 修改数据
     * 要知道该条目的主键的值
     * @param bookLib
     */
    public void updateBook(BookLib bookLib) {
        bookLibDao.update(bookLib);
    }

    /**
     * 查询booklib表中的所有数据
     *
     * @return
     */
    public List<BookLib> queryAllBookLib() {
        return bookLibDao.loadAll();
    }

    /**
     * 查询
     * 根据name这一列,查询是否已经存在此name
     * 也可以根据其它列来查询,只要修改where中的代码就ok了
     * @param name
     * @return
     */
    public boolean isSaveByName(String name) {
        QueryBuilder<BookLib> qb = bookLibDao.queryBuilder();
        qb.where(BookLibDao.Properties.Name.eq(name));
        int count = (int) qb.buildCount().count();
        return count > 0 ? true : false;
    }

    /**
     * 查询
     * 根据书的名字返回书的价格
     * @param name
     * @return -1代表没有此书
     */
    public int getPriceByName(String name){
        QueryBuilder<BookLib> qb = bookLibDao.queryBuilder();
        qb.where(BookLibDao.Properties.Name.eq(name));
        if (qb.list().size()>0){

            //返回书的价格
            return qb.list().get(0).getPrice();
        }else {
            //没有此书,返回一个错误码
            return -1;
        }
    }

    /**
     * 查询
     * 根据多个条件来查询
     * @param name
     * @param price
     * @return 返回符合条件的所有booklib
     */
    public List<BookLib> getMoreQuery(String name,int price){
        QueryBuilder<BookLib> qb = bookLibDao.queryBuilder();
        qb.where(BookLibDao.Properties.Name.eq(name),BookLibDao.Properties.Price.eq(price));
        return qb.list();
    }

}

增删改查中,这里只看一下“改“,其它的可以看下代码就应该懂了。在“改“的时候,需要注意:

 public void updateBook(BookLib bookLib) {
        bookLibDao.update(bookLib);
    }

在bookLib这个变量中,每个属性的值都要有,只是修改需要改的属性,其中主键的值肯定是不能变的,在GreenDao中默认主键是id(暂时不知道怎么设置主键)。

代码下载请点我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值