Greendao 使用总结

来源:互联网 发布:淘宝动态评分查询 编辑:程序博客网 时间:2024/06/10 02:58

关于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(暂时不知道怎么设置主键)。

代码下载请点我

0 0
原创粉丝点击