greenDao----核心类和DaoExampleGenerator项目介绍如何生成类文件和Dao文件(2)

来源:互联网 发布:安娜伊思·马田 知乎 编辑:程序博客网 时间:2024/06/05 03:53

为了在android项目中使用greenDao,首先需要创建另外一个java项目用来生成Object和ObjectDao,这个项目需要两个jar包,一个是greenDao-generator.jar,一个是freemaker.jar,在maven center中可以搜索到。创建一个可执行的Java类,模型实体和触发代码生成。
greenDao-generator.jar
freemarker.jar
greenDao安卓开发jar

核心类:
创建好你所需要的代码后,就可以开始在项目中使用greenDao了,需要一个greenDao.jar的jar包。greenDao包含几个基本的类。

DaoMaster:
这是使用greenDao的入口,DaoMaster管理database 对象(SQLiteDatabase)并管理着Dao类。
包含静态方法用来创建表格和删除表格,内部类OpenHelper和DevOpenHelper都是SQLiteOpenHelper的实现类,在SQLite中创建schema。

DaoSession:管理所有的可用的DAO对象,通过getter来获得,daoSession.getNoteDao();详细介绍可以参考session documentDAOs:Data access object(Dao) 是用来查询entities对象,对每一个对象greenDao生成一个Dao对象,Entities:对象类,通常是由daoGenerator生成的,与数据库的每一行对应,使用标准的Java属性

核心的初始化:
下面这段代码说明了第一步是怎么样初始化数据库,和greenDao的核心类

    helper = new DaoMaster.DevOpenHelper(this,"notes-db",null);    db = helper.getWritableDatabase();    daoMaster = new DaoMaster(db);    daoSession = daoMaster.newSession();    noteDao = daoSession.getNoteDao();

使用greenDao的第一步是创建一个能够呈现数据的实体类。这个是基于greenDao 生成的代码和Dao类
通过Java代码来定义类,基于DaoExampleGenerator项目创建一个java项目,这张图描述了一个元模型
这里写图片描述
Schema:
每一个实体类属于一个schema.schema是你定义的第一个对象,调用他的构造方法,传递schema版本,和默认的Java 包

    Schema schema = new schema(1,"de.greenrobot.daoexample");
默认的java 包是用来保存greenDAO生成的实体类,和对应的dao,和JunitTests.如果那些默认的都是正确的,你就完成了第一步如果想让dao和entity不在同一个包里,可以为schema设置不同的属性:
schema.setDefaultJavaPackageTest("de.greenrotot.daoexample.test");    schema.setDefaultJavaPackageDao("de.greenrobot.daoexample.dao");
schema同时也拥有两个默认的标记,可以被复写,这个标志告诉entities是激活的,是否保证这个模块被使用,
    schema.enableKeepSectionsByDefault();    schema.enableActiveEntitiesByDefault();
Entities一旦获得到了schema对象,你就可以用schema对象添加实体类
    Entity user = schema.addEntity("User");
你可以为entity对象添加属性
    user.addIdProperty();    user.addStringProperty("name");    user.addStringProperty("password");    user.addIntProperty("yearofBirth");
除去这些属性,你也可以为实体类添加一对一和一对多的关系属性和主键上面代码告诉了你怎样为一个entity添加属性。Entity.addXXXProperty返回一个PropertyBuilder对象,PropertyBuilder对象可以用来配置属性。使用方法columnName("")用自定义的列名来覆盖默认的列名。
    note.addDateProperty("date").columnName("date");
访问对象属性的索引和关系可以通过调用getProperty()方法note.addStringProperty("comment").getProperty();当前的主键约束当前,entities必须有一个long或者long property作为他们的主键,这是android和sqlite推荐的方式。以后greenDao会可以处理任何形式的主键,但是现在不是所有的一切都已经实现。因为这个问题,所以你可以使用一个long的主键,使用一个独一无二的index做喂key的属性。默认值greenDao设置了很多合理的默认值,因此开发者不需要为每一个属性或其他,配置值。例如,数据库中的表名和列名是entity和property的名字。和驼峰命名法不同的,数据库的名字是大写的,由下划线来分隔单词。例如有一个property叫做creationDate----对应的列名为 CREATION_DATE.继承 接口 序列化Entities可能继承另外一个non-entity类。可以通过调用Entity.setSuperClass(String)方法来实现,注:目前是不可能有另一个实体作为一个超类(没有多态查询)myEntity.setSuperClass("MyCommonBehavior");另外一个更好的做法是,使用接口作为一个常用的基类,接口中包含属性和方法。例如。A和B共同拥有许多属性(他们setter和getter可以在接口C中定义。)
    entityA.implementsInterface("C");    entityB.implementsInterface("C");    entityB.implementsSerializable();
当所有的需要在schema中都配置完成了之后,就可以触发代码生成程序了,在main方法中实例化一个daoGenerator调用generateAll的方法:
    DaoGenerator daoGenerator = new DaoGenerator();    daoGenerator.generateAll(schema,"../MyProject/src-gen");
默认将会有一段注释
    enableKeepSectionsByDefault()    setHasKeepSections(true)
0 0