Android greenDAO使用方法解析

时间:2021-06-23 19:51:09

greenDAO在Android开发中提供了一个面向对象的数据接口,使用过程中只需要定义数据原型,greenDao将为你自动创建数据原型及DAOs (data access objects),方便开发者对SQLite进行操作。

1. 下载开源工程

官网文档:http://greenrobot.org/greendao/documentation/how-to-get-started/
下载地址:https://github.com/greenrobot/greenDAO
下载gitHub上的开源工程,我们用到的其实只有三个文件夹下的东西:
Android greenDAO使用方法解析
1) DaoGenerator:Java用在java工程里,生成建数据原型及DAOs ;
2)DaoCore:Android工程里需要导入,用于对生成的greenDao数据进行操作;
3)DaoExample:里面有个例程,教你如何在Android工程里使用greenDao。

2. 创建Java工程,生成greenDao相关代码

1)新建一个Java工程,添加自己的代码,我这里是TestDaoGenerator,程序里PACK_NAME即生成的Java文件的包名,GEN_DAO_FILE为所生成的Java文件所在的文件夹;
2)将DaoGenerator里面src\de\greenrobot\daogenerator目录下的文件拷贝到工程src目录下;
3)导入freemarker.jar的jar包;
4)新建src-template目录,导入DaoGenerator里面src-template目录下的.ftl文件。
Android greenDAO使用方法解析

/**
* Generates test entities for test project DaoTest.
*
* @author Markus
*/

public class TestDaoGenerator {
//生成文件的包名
private final static String PACK_NAME="com.pigrush.daogen";
//生成文件所在目录
private final static String GEN_DAO_FILE="../DaoTestBase";

private final Schema schema;

public static void main(String[] args) throws Exception {
TestDaoGenerator testDaoGenerator = new TestDaoGenerator();
testDaoGenerator.generate();
}

public TestDaoGenerator() {
schema = new Schema(1,PACK_NAME);
createSimple();
}

public void generate() throws Exception {
DaoGenerator daoGenerator = new DaoGenerator();
File genFileDir=new File(GEN_DAO_FILE);
if(!genFileDir.exists()){
genFileDir.mkdirs();
}
daoGenerator.generateAll(schema, GEN_DAO_FILE);
}

protected void createSimple() {
Entity simple = schema.addEntity("SimpleEntity");
simple.addIdProperty().autoincrement();
simple.addBooleanProperty("simpleBoolean");
simple.addByteProperty("simpleByte");
simple.addShortProperty("simpleShort");
simple.addIntProperty("simpleInt");
simple.addLongProperty("simpleLong");
simple.addFloatProperty("simpleFloat");
simple.addDoubleProperty("simpleDouble");
simple.addStringProperty("simpleString");
simple.addByteArrayProperty("simpleByteArray");
simple.addContentProvider().readOnly();
}
}

注:如果报错:Exception in thread “main” freemarker.template.TemplateNotFoundException: Template not found for name “dao.ftl”.,是因为没找到src-template目录下的.ftl文件。
解决方法:找到DaoGenerator.java,在DaoGenerator()函数config.setClassForTemplateLoading(this.getClass(), “/”);代码下面加入以下两行: FileTemplateLoader templateLoader = new FileTemplateLoader(new File(“src-template”)); config.setTemplateLoader(templateLoader);
Android greenDAO使用方法解析
编译,即可在Java工程所在文件夹下生成相关Java文件。
Android greenDAO使用方法解析

3. 将DaoCore生成Jar包

为使用方便,将DaoCore生成Jar包,新建一个Android工程,将DaoCore里面的Java文件拷贝到新建的工程下,如下图所示。生成Jar包即可
Android greenDAO使用方法解析

4. 新建Android测试工程

新建测试工程,用来测试生成的greenDao。
Android greenDAO使用方法解析
1) 将2生成的greenDao的Java文件导入工程;
2)导入3生成的daoCore.jar;
3)为操作方便,我这里新建了一个DaoOper。代码如下:

public class DaoOper {

private final static String DB_NAME="hudVersion";
private DaoMaster.DevOpenHelper helper;
private DaoMaster daoMaster;
private DaoSession daoSession;
private SimpleEntityDao test1Dao;

private static DaoOper _instance;

public static DaoOper getInstance(){
if(_instance==null){
_instance=new DaoOper();
}
return _instance;
}

public void initDao(Context context){
helper = new DaoMaster.DevOpenHelper(context,DB_NAME,null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
daoSession = daoMaster.newSession();
test1Dao=daoSession.getSimpleEntityDao();
}

public SimpleEntityDao getTest1Dao(){
return test1Dao;
}
}

MainActiviy代码如下:

public class MainActivity extends Activity implements OnClickListener{

private DaoOper mDaoOper;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDaoOper.getInstance().initDao(this.getApplicationContext());
findViewById(R.id.insert_data).setOnClickListener(this);
findViewById(R.id.query_data).setOnClickListener(this);
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.insert_data:
SimpleEntity test1Data=new SimpleEntity();
test1Data.setSimpleBoolean(false);
test1Data.setSimpleByte((byte) 1);
mDaoOper.getInstance().getTest1Dao().insert(test1Data);

SimpleEntity test1Data2=new SimpleEntity();
test1Data2.setSimpleBoolean(true);
test1Data2.setSimpleByte((byte) 2);
mDaoOper.getInstance().getTest1Dao().insert(test1Data2);
break;
case R.id.query_data:
List<SimpleEntity> dataList=mDaoOper.getInstance().getTest1Dao().loadAll();
Toast.makeText(MainActivity.this, "dataCount="+dataList.size(), Toast.LENGTH_SHORT).show();
break;
}
}
}

Ok, that’s all, enjoy it.
工程源码地址:http://download.csdn.net/detail/guokehello/9502497