Android greenDao的学习总结

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;

private static final String TAG = DBDaoUtil.class.getSimpleName();

private static DBDaoUtil instance;


public DaoSession getDaoSession() {

returnmDaoSession;

}


private DBDaoUtil() {


}


public static 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(){

return instance.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来执行了,比较简单就不赘述.




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值