GreenDao的使用心得和分享

 我们在开发android程序中,大部分项目是要用到数据库的,第一次的项目使用的是sqliteOpenHelper,但是使用过程较为繁琐,建表,增删改查,都相当繁琐,反正本人代码技术不是很牛,用起来这个也是相当累的。对于现在的开发,主要还是一个效率问题,自己使用sqlite,效率太低拉。
自从使用了 GreenDao以后,就再也不想用android给的sqlite了,现在自己做完一个项目了,使用的是GreenDao,也是第一次接触这个,总结下经验和GreenDao的优点,
GreenDao 是一个 Object Relational Mapping(ORM)关系型数据库,使用起来那是相当的方便,增删该查,直接使用对象就好了。基本上用的就是 set、get方法,最后直接insert一下就存入到数据库了。很方便的。
总结下GreenDao的优点有以下几点:
1、创建对象很方便:我们经常要封装一个对象,GreenDao直接帮我们生成好了对象,同时也生成好了表。生成的方法也是相当简单的。
2、内存的消耗少:在listView可以频繁的使用 数据库,没见卡,使用sqlite真是卡到不行。还需要各种优化。
3、API容易掌握:增删改查都是针对 对象的,使用set方法就是修改数据,调用一下insert方法就存入数据库了(类似commit)。

GreenDao使用流程:
1、话不多说,先下载这玩意把,生成数据库文件和建表的java项目。

首先要在自己的项目根目录里面创建一个名字(src-gen)的文件夹,必须手动创建;

下载如下连接:
http://pan.baidu.com/s/1i3xfPlF
代码:
public class ExampleDaoGenerator {

    public static void main(String[] args) throws Exception {

        // 第一个参数是DB的版本号,通过更新版本号来更新数据库
        // 第二个参数是自动生成代码的包路径
        Schema schema = new Schema(1, "com.test.hehe.dao");

        addCalendar(schema);

        // 第一个参数是Schema对象,第二个参数是希望自动生成的代码对应的项目路径
        // 注:src-gen这个文件夹必须手动创建,这里路径如果错了会抛出异常
        new DaoGenerator().generateAll(schema, "../WeikeCpa/src-gen");
    }

    private static void addCalendar(Schema schema) {
        // Entity表示一个实体可以对应成数据库中的一个表,系统自动会以传入的参数作为表的名字,这里表名就是Note
        Entity note = schema.addEntity("WeikeCalendar");
        // 添加表中的属性字段
        // note.addIdProperty().autoincrement(); // id自动增长
        note.addIntProperty("year");
        note.addIntProperty("month");
        note.addIntProperty("day");
        note.addStringProperty("type");
        note.addStringProperty("isFinish");
    }

    
}


这是一段java代码,写好了直接运行就好了,对了还有两个jar包,记得导入到这个java项目中;
都加上了注释,其中

  
  Schema schema = new Schema(1, "com.test.hehe.dao");



  //com.test.hehe.dao 是创建GreenDao对象的包路径,回头运行完了,生成的class对象就在这个包里面;

  
  Entity note = schema.addEntity("WeikeCalendar");



这句话就是创建一个表,并且生成一个叫WeikeCalendar.java 的对象,和一个WeikeCalendardao的文件。weikeCalendar.java 成员变量就是自己添加的;

2、使用方法
在项目中增加如下方法:

private WeikeCalendarDao getWeikeCalendar() {
	  // greendao
        DaoSession ds = WeikeApplication.getDaoSession(getActivity());
        WeikeCalendarDao wcDao = ds.getWeikeCalendarDao();
        return wcDao;
    }


先拿到这个Dao类,在通过这个Dao去操作对象,简单的说下增删改查的方法:
解释:查询日期为 1月12日的所有对象:

List<WeikeCalendar> l = wcDao .queryBuilder()
                .where(WeikeCalendarDao.Properties.Day.eq(12),
                        WeikeCalendarDao.Properties.Month.eq(1)).list();




List<WeikeCalendar> l = wcDao .queryBuilder()
                .where(WeikeCalendarDao.Properties.Day.eq(12),
                        WeikeCalendarDao.Properties.Year.eq(2014),
                        WeikeCalendarDao.Properties.Month.eq(1)).list();



解释:查询日期为2014年1月中 天数为0到12号 的所有对象:

    List<WeikeCalendar> l = wcDao
                .queryBuilder()
                .where(WeikeCalendarDao.Properties.Day.eq(12),
                        WeikeCalendarDao.Properties.Year.eq(2014),
                        WeikeCalendarDao.Properties.Month.between(0, 12)).list();



解释:删除某一条对象

  
  wcDao.delete(entity);



解释:存入某一条数据:

    WeikeCalendar w = new WeikeCalendar(year, month, day, type, isFinish);
        wcDao.insertOrReplace(w);



ps:这里用insertOrReplace是因为,如果数据库中,已经有这个对象了。那么直接insert,就会报错的,必须insertOrReplace 相当于 update;

亲测有效啊!!!
还有为什么封装成方法调用呢?


    
private WeikeCalendarDao getWeikeCalendar() {
        // greendao
        DaoSession ds = WeikeApplication.getDaoSession(getActivity());
        WeikeCalendarDao wcDao = ds.getWeikeCalendarDao();
        return wcDao;
    }



这个方法,是因为之前使用时,明明更新了数据库,但是查询的时候,还是原来的值,是因为

    DaoSession ds = WeikeApplication.getDaoSession(getActivity());


这个没有更新,你用的是原来的DaoSession,所以有时候会出问题,亲测有效!一定要封装成方法,然后每次使用的时候,都调用下,重新获取下,不然会有查询不出正常的值的问题!
大概就先写这么多,互相交流互相学习。。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值