Android 的ORM GreenDao

一 . 关于 GreenDao 与 SQLite 数据库 ,javaObject的关系

Android ORM 框架之 greenDAO 使用心得
简单的讲,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。

二. 在AndroidStudio 工程中配置GreenD Generayor mo
1.在 .src/main 目录下新建一个与 java 同层级的「java-gen」目录,用于存放由 greenDAO 生成的 Bean、DAO、DaoMaster、DaoSession 等类

Android ORM 框架之 greenDAO 使用心得

Android ORM 框架之 greenDAO 使用心得
Android ORM 框架之 greenDAO 使用心得
2 通过 File -> New -> New Module -> Java Library -> 填写相应的包名与类名 -> Finish.

Android ORM 框架之 greenDAO 使用心得

Android ORM 框架之 greenDAO 使用心得


Android ORM 框架之 greenDAO 使用心得

编写你的Java类


/**
 * GreenDao生成器
 */

public class MyGreenDao {

    //辅助文件生成的相对路径
    public static final String DAO_PATH = "app/src/main/java-gen";
    //辅助文件的包名
    public static final String PACKAGE_NAME = "com.source.greendao";
    //数据库的版本号
    public static final int VERSION_CODE = 1;

    public static void main(String[] arg) throws Exception {
      /**  你创建了一个用于添加实体(Entity)的模式(Schema)对象。
        两个参数分别代表:数据库版本号与自动生成代码的包路径。*/
        Schema schema=new Schema(VERSION_CODE,PACKAGE_NAME);
        //用对象添加实体表名,获得实体,
        addCache(schema,"FreshNewsCache");
        addCache(schema, "PictureCache");
        addCache(schema, "SisterCache");
        addCache(schema, "JokeCache");
        addCache(schema, "VideoCache");
        
        //这一步生成 相应的 Cache CacheDao ,DaoSession,DaoMaster 文件
        new DaoGenerator().generateAll(schema,DAO_PATH);


    }

    private static  void addCache(Schema schema,String tablename){

        Entity entity=schema.addEntity(tablename);

        //添加表的列项
        entity.addIdProperty().primaryKey().autoincrement();
        entity.addStringProperty("result");
        entity.addIntProperty("page");
        entity.addLongProperty("time");

    }



运行 MyGreenDao,生成响应的文件




最后写一个Cache 管理类 用于向缓冲表里面 写入数据和查询数据

public abstract class BaseCache<T> {

   public static final String DB_NAME = "jiandan-db";

   protected static DaoSession mDaoSession;

   public abstract void clearAllCache();

   public abstract ArrayList<T> getCacheByPage(int page);

   public abstract void addResultCache(String result, int page);

}

public class FreshCacheManager extends BaseCache {

    private static FreshCacheManager instance;
    private static FreshNewsCacheDao mFreshNewsCacheDao;


    public static FreshCacheManager getInstance(Context context){
        if(instance==null){
            synchronized (FreshCacheManager.class){
                if(instance==null){

                    instance=new FreshCacheManager();
                }

            }
            mDaoSession = APP.getDaoSession(context);
            //获取数据库
            mFreshNewsCacheDao = mDaoSession.getFreshNewsCacheDao();
        }
        return  instance;
    }

    @Override
    public void clearAllCache() {
             mFreshNewsCacheDao.deleteAll();
    }

    @Override
    public ArrayList<FreshNews> getCacheByPage(int page) {

       QueryBuilder<FreshNewsCache> queryBuilder=mFreshNewsCacheDao.queryBuilder()
               .where(FreshNewsCacheDao.Properties.Page.eq(""+page));

        if(queryBuilder.list().size()>0){
            try{
                Log.d("DDD","Str="+queryBuilder.list().get(0).getResult());
             //   return  FreshNews.parse(new JSONArray(queryBuilder.list().get(0).getResult()));
                String string=queryBuilder.list().get(0).getResult();
                return  ((ArrayList<FreshNews>) JSONParser.toObject(string,
                        new TypeToken<ArrayList<FreshNews>>(){}.getType()));

            }catch (Exception e){
                e.printStackTrace();
            }

        }else {
            Log.d("DDD","大小为0");
            return  new ArrayList<>();

        }
        return null;
    }

    @Override
    public void addResultCache(String result, int page) {
        Log.d("DDD","result="+result);
        FreshNewsCache freshNewsCache=new FreshNewsCache();
        freshNewsCache.setResult(result);
        freshNewsCache.setPage(page);
        freshNewsCache.setTime(System.currentTimeMillis());
        //插入到数据库
        mFreshNewsCacheDao.insert(freshNewsCache);
    }
}

到这里就完成了 之后再工程里调用 AddResultCache 和getCacheByPage 两个函数就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值