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