关闭

强大的数据库ORM框架-GreenDao项目构建篇(Eclispe平台)

标签: android数据库ORMGreenDao
580人阅读 评论(0) 收藏 举报
分类:

强大的数据库ORM框架-GreenDao项目构建篇(Eclispe平台)


   作者:

    蒋东国

  时间:

    2016年11月9日 星期三

  应用来源:

    hqt APP (测试机型:华为荣耀4X,Samsung Note4)                 

  博客地址:

    http://blog.csdn.net/andrexpert/article/details/53105297

      

       情景再现:“最近有个项目需要数据库升级,看了下项目源码使用的是GreenDao开源框架。由于之前没有接触过,就打算在网上找些资料了解下,但找了半天发现大部分都是蜻蜓点水似的介绍了下,有点甚至就直接贴官方Demo,并且基本上都是介绍AndroidSudio平台的。经过对GreenDao框架了解,发现确实是个非常不错的项目,算是主流的数据库ORM框架中较好的。经过一方摸索,我发现这个框架表面上看起来很复杂,但是只要你把从项目构建、API使用的流程走一边之后就很容易上手了。出于学习和总结的目的,也方便其他当初像我一样的刚接触的人能够快速入手,打算写几篇文章以形成一个系列,虽然不是很深,但是自己会不断的进行深入的理解和使用,同时也会更新博客以记录之。”

 GreenDAO是一个轻量、快速的Android SQLite对象关系映射(ORM,Object RelationalMapping)数据库解决方案,它帮助开发者能够快速地将Java对象映射到SQLite数据库的表单中,并借助相关的API和Java对象实现对SQLite数据库进行增删改查。通俗来说,GreenDAO就是一个SQLite数据库操作开源框架,通过这个框架能够自动生成与数据库操作相关的实体层(Entity)和DAO层,从而使得开发者无需再去写大量的数据库操作相关的代码,如创建SQLiteHelper、编写DAO层、对Cursor操作等。示意图如下:

 

1.项目框架

(1)   DaoCore

GreenDAO内核程序,是一个Java程序,为最后项目中依赖的库。

(2) DaoGenerator

实体(Entity)和DAO层代码生成器(Java项目)

(3) DaoExample                           

使用GreenDAO Demo(Android)

(4) DaoExampleGenerator

代码生成器Demo(Java项目)

(5) DaoTest

测试Demo(Android项目)

(6) DaoTestGenerator

代码生成器测试Demo(Java项目)

        源码下载地址: https://github.com/greenrobot/greenDAO

2.构建Eclipse Android DAO项目

 GreenDAO框架的使用关键在于两个方面:一是新建一个Java项目并依赖DaoGenerator生成与数据库表相对应的实体类和DAO层代码,二是新建Android项目并依赖DaoCore项目。

经过一番摸索,这里我提供两种方式来构建基于Eclipse平台的GreenDAO应用项目:在Java项目和Android项目中分别引入DaoGenerator.jar&freemarker.jar包和DaoCore.jar包;手动构建DaoGenerator项目和DaoCore项目,并将其作为新建Java项目和Android项目的依赖。

  首先,来个最简单的,在新建Java项目和Android项目直接引入jar包。

  (1)新建Android项目,将DaoCore-1.3.0.jar、sqlcipher.jar拷贝到libs目录即可。

(2)新建Java项目并添加libs目录,将freemarker.jar、greendao-generator-2.1.0.jar拷贝至该目录,再通过”Java Build Path->Libraries->Add JARs”方法导入jar包。

         

  创建DaoDemoGenerator工程的目的就是生成Android项目所需的实体类和DAO层,因此,DaoDemoGenerator.java的作用就是指定生成代码的存放路径、实体类和DAO层代码所属包名以及创建与数据库表相对应的实体类及其属性等。现在我们就参照GreenDAO项目中的DaoExampleGenerator示例,来创建DaoDemoGenerator.java,代码如下:

/**
 *@dscrible Java项目,用于生成Android项目所需的实体和DAO层
 *
 * Created by jiangdongguo on 2016-11-7 下午10:15:13
 */
public class DaoDemoGenerator {
	public static void main(String[] args) throws IOException, Exception {
		//设置实体类包名,其中com.example.greendaodemo1是Android项目包名
		Schema schema = new Schema(1, "com.example.greendaodemo.bean");
		//设置DAO层包名
		schema.setDefaultJavaPackageDao("com.example.greendaodemo.dao");
		//创建三个与数据库表相对应的实体类
		addNote(schema);
		//生成代码后存放的路径,GreenDaoDemo是Android项目
		new DaoGenerator().generateAll(schema, "../GreenDaoDemo1/src");
	}
	
	private static void addNote(Schema schema){
		//实体类
		Entity personInfo = schema.addEntity("PersonInfo");
		//添加id属性
		personInfo.addIdProperty();
		//依次添加name、age、sex、phone、address属性
		personInfo.addStringProperty("name").notNull();
		personInfo.addIntProperty("age");
		personInfo.addStringProperty("sex").notNull();
		personInfo.addIntProperty("phone");
		personInfo.addStringProperty("address").notNull();
		
		//实体类
		Entity carInfo = schema.addEntity("CarInfo");
		//添加id属性
		carInfo.addIdProperty();
		//依次添加brand属性
		carInfo.addStringProperty("brand").notNull();
		carInfo.addStringProperty("model");
		carInfo.addIntProperty("price").notNull();
		carInfo.addStringProperty("date");
		carInfo.addStringProperty("place").notNull();
		
		//实体类
		Entity workInfo = schema.addEntity("WorkInfo");
		//添加id属性
		workInfo.addIdProperty();
		workInfo.addStringProperty("company").notNull();
		workInfo.addStringProperty("address").notNull();
		workInfo.addIntProperty("number");
	}
}

  执行运行DaoDemoGenerator工程(Run As->Java Application),即可在Android项目中生成如下文(需F5刷新Android项目,且该项目是已经先存在的):


   DaoMaster:可理解为DAO管理员,它保存了SQliteDatabase对象以及操作DAO Classes,并提供了一些创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架。

  DaoSession:会话层。用于获得能够操作数据库的xxxDao对象,如PersonInfoDao。

  PersonInfoDao等:生成器生成的DAO类,具有更多的权限和方法来操作数据库元素。也就是说,我们对数据库 PersonInfo表的增删改查方法都应该在这个类中实现。

  PersonInfoEntity等:持久的实体对象,即bean目录下的实体类,可理解为用于封装与数据库PersonInfo表字段对应的相关属性。

其次,来个复杂点的,手动导入DaoGenerator项目和GreenDao项目。

  由于DaoGenerator项目、DaoCore是在AndroidStudio使用gradle构建,目前无法直接将其导入到Eclipse中,我们需要手动导入这两个项目。

 (1)手动导入DaoGenerator项目到Eclipse。创建一个Java项目,将src和src-template目录拷贝到项目中,并引入freemarker.jar包。

        

  (2)新建一个Java项目作为Android项目的代码生成器,并依赖于DaoGenerator,可通JavaBuild Path->Projects->DaoGenerator实现。

                     

 然后,我们再在该Java项目src目录中创建DaoDemoGenerator类(类名自定义),用于生成所需的实体和DAO层代码。

/**
 *@dscrible Java项目,用于生成Android项目所需的实体和DAO层
 *
 * Created by jiangdongguo on 2016-11-7 下午10:15:13
 */
public class DaoDemoGenerator {
	public static void main(String[] args) throws IOException, Exception {
		//设置实体类包名
		Schema schema = new Schema(23, "com.example.greendaodemo1.bean");
		//设置DAO层包名
		schema.setDefaultJavaPackageDao("com.example.greendaodemo1.dao");
		//定义实体类
		addNote(schema);
		//生成代码后存放的路径
		new DaoGenerator().generateAll(schema, "../GreenDaoDemo1/src");
	}
	
	private static void addNote(Schema schema){
		//实体类
		Entity personInfo = schema.addEntity("PersonInfo");
		//添加id属性
		personInfo.addIdProperty();
		//依次添加name、age、sex、phone、address属性
		personInfo.addStringProperty("name").notNull();
		personInfo.addIntProperty("age");
		personInfo.addStringProperty("sex").notNull();
	} 

  注:实际上,这里的代码与上面所述的一样的,只是方便再次理解。

 (3)手动导入DaoCore项目到Eclipse。创建一个Android项目,并将包名命名为” org.greenrobot.greendao”,然后再将GreenDAO项目中的DaoCore里greendao的所有源码拷贝到包里,最后分别将sqlcipher.jar、rxjava-1.0.10.jar引入到该Android项目中。其中,还需要将GreenDAO项目源码中的..\greenDAO-master\greendao-api目录下的annotation、converter目录源码拷贝到包中,否则会报错。

          

 (4)新建一个Android项目,并依赖于DaoCore工程,可通过Java Build Path->Projects->DaoCore实现。

                    

最后的话:“(1)表面上看方法二有点复杂,其实就是“2个Java项目,2个Android项目”的问题。“2个Java项目”,其一是为了导入GreenDAO框架的生成器核心源码,它将作为依赖库存在;其二是为了生成最终与数据库对应的实体和DAO层代码。“2个Android项目”,其一是为了导入GreenDAO框架的DaoCore核心源码,它将作为依赖库;其二就是我们自己将要开发的Android应用项目。 (2)GreenDao项目是一个非常优秀的数据库ORM框架,除了拥有高性能、低消耗、易于使用的APIs等优点,它对有关数据库的操作进行了深度封装,且是完全面向对象的。也就是说,你基本可以不与SQL语句打交到就可以非常方便、简单地实现对数据库的操作,当然,前提是你要熟悉如何去驾驭它~  ”

 

关于资料与Demo

GreenDao官方文档:http://greenrobot.org/greendao/

GreenDAO源码:https://github.com/greenrobot/greenDAO

GreeDao相关jar包:

*  greendao-generator.jar:http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22greendao-generator%22

*  rxjava.jar:https://jcenter.bintray.com/io/reactivex/rxjava/1.0.10/rxjava-1.0.10.jar

*  freemarker.jar:http://freemarker.incubator.apache.org/

*  DaoCore-1.3.0.jar:http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22DaoCore%22

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:48970次
    • 积分:1030
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:0篇
    • 译文:0篇
    • 评论:214条
    博客专栏
    最新评论