您的位置:首页 > 移动开发 > Android开发

Android greenDao的学习总结

2014-11-13 17:27 190 查看
greedDao 是在android 开发中类似J2ee中的 Hibernate的 开源框架,操作也非常类似Hibernate。 且效率极高。在使用过程中,你也将深刻体会到MVC模型的艺术所在,因为每当你要修改表的任何结构,只需要在java工程中重新修改代码,生产greenDAO操作代码,复制到android工程即可。可扩展性极强。
首先可以到 Github 开源社区下载相应的jar包和API https://github.com/greenrobot/</span><span style="color:rgb(204,0,0)
如果英文水平好大可直接到官网查阅 http://greendao-orm.com/2011/08/19/query-builder-and-lazy-loading-lists/
接着必须先创建一个java工程来完成数据库MVC结构的实现。
给Java工程导入量给jar包, freemaker.jar  和  greendao-generator.jar  看到报名应该就知道意思了。
通过这两个包,我们可以在java工程中创建出  在android工程中需要的类文件,如表模型Model结构,以及 Dao操作类 还有android数据库的创建类。
如何在java工程中写代码:
创建一个普通的java类,包含有main函数
>现在先来创建一张表:
Schema schema = new Schema(3,"com.jin.database");  //第一个参数表示的是数据库的名字,第二个参数是创建完成的数据库相关类将会存储的包名
Entity hospital = schema.addEntity("hospital");   //开始创建一张名为 hospital的表
hospital.addIdProperty().primaryKey();  //创建主键  且自增  主键默认的类型为Long
hospital.addStringProperty("name");// 加入属性 name 类型为String
hospital.addFloatProperty("rate"); //加入浮点类型的属性
hospital.addIntProperty("priority");//增加int型   以此类推  可以通过不同方法创建不同类型的的表属性 
(以上代码放入main函数中执行完毕 刷新java工程 你将会看到你想要的 在android项目中可以使用到的类,将报名和类文件名复制到android工程)
生产完的代码 除了hospital 和 hospitalDao 以外还会有DaoMaster 和DaoSession 认真研读这两个类,你就知道greenDao是怎么一回事了。一般来说这些生产类不需要做很大的修改即可使用。</p><p>数据库无非就是增删改查,以下就简单复制代码介绍:
首先我是这么架构代码的,这也是官方建议的方法   在自己项目所拥有的Application类中创建如下属性   </p><p></p><pre name="code" class="java">// 数据库private static Application applicationInstance;private static DaoMaster daoMaster;private static DaoSession daoSession;private static CrashApplication mInstance;
</pre><pre code_snippet_id="517987" snippet_file_name="blog_20141113_6_8625089" name="code" class="java">/*** 取得DaoMaster** @param context* @return*/public static DaoMaster getDaoMaster(Context context) {if (daoMaster == null) {OpenHelper helper = new DaoMaster.DevOpenHelper(context,GlobleData.DB_NAME, null);daoMaster = new DaoMaster(helper.getWritableDatabase());}return daoMaster;}/*** 取得DaoSession** @param context* @return*/public static DaoSession getDaoSession(Context context) {if (daoSession == null) {if (daoMaster == null) {daoMaster = getDaoMaster(context);}daoSession = daoMaster.newSession();}return daoSession;}
接下来创建一个类 用来获取相应的Dao操作public class DBDaoUtil {privatestatic ContextappContext;public DaoSessionmDaoSession;privatestatic final StringTAG = DBDaoUtil.class.getSimpleName();privatestatic DBDaoUtil instance;public DaoSession getDaoSession() {returnmDaoSession;}private DBDaoUtil() {}publicstatic DBDaoUtil getInstance(Context context) {if (instance ==null) {instance =new DBDaoUtil();if (appContext ==null) {appContext = context.getApplicationContext();}instance.mDaoSession = CrashApplication.getDaoSession(context);}returninstance;}public focus_drugstoreDao gethospitalDao(){returninstance.mDaoSession.gethospitalDao();}}以后你就可以很方便的来获取到 相应表上得Dao操作对象msgDao = DBDaoUtil.getInstance(context).getMessageDao();msgDao.loadAll(); // 可直接获取到全部的表数据库/**进行比较复杂的查询**/QueryBuilder<message> qb = msgDao.queryBuilder();qb.where(new StringCondition(" _id in (select max(_id) from message group by FROM_ACCOUNT)")).build();// qb.orderAsc(messageDao.Properties.Time);return (ArrayList<message>) qb.list();同样你也可以进行最简单的查询QueryBuilder<doctor> qb = doctorDeal.queryBuilder();qb.where(doctorDao.Properties.Phone.eq(item.getFrom_account())); //通过匹配某个值来实现final doctor doctorData = qb.list().get(0);也可以换回原来的纯SQL查询方式SQLiteDatabasedbSql = DBDaoUtil.getInstance(context).mDaoSession.getDatabase();dbSql.execSQL("UPDATE message SET is_read = 1 WHERE from_account = "+ account);其余的删除,更新就根据Model对象或者Id来执行了,比较简单就不赘述.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: