您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > Android数据库框架GreenDao轻量级的对象关系映射框架,永久告别sqlite
Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite对于我个人来说,我可能更加倾向于用GreenDao,所以今天也为大家带来了GreenDao的详细博客,希望大家喜欢,之前也详细介绍了ORM的思想,如果不明白可以先看一下前面的博文,这里就不多赘述了,我们新建一个工程传说中的优点最大性能(最快的AndroidORM)易于使用API高度优化最小内存消耗首先,我们查看Github上的集成步骤,先添加依赖我们要添加compile'org.greenrobot:greendao:2.2.1'同时也要添加Java的项目包compile'org.greenrobot:greendao-generator:2.2.0'紧接着,我们在main目录下创建一个文件夹java-gen然后继续在配置文件中添加//仓库sourceSets{main{java.srcDirs=['src/main/java','src/main/java-gen']}}最后,新建一个Module,选择JavaLibrary,创建成功后,我们在他的build.gradle下添加compile'org.greenrobot:greendao-generator:2.2.0'二.实体类到这里,我们的初步集成算是完成了,是不是比较麻烦,我们看她说现在去看java-gen有生成代码,实际上我们去看并没有,因为我们需要NoteDao.java,一个数据缓存对象,那我们需要怎么去做呢?我们直接在Module的类里写了packagecom.example;importde.greenrobot.daogenerator.DaoGenerator;importde.greenrobot.daogenerator.Entity;importde.greenrobot.daogenerator.Schema;publicclassDaoMaker{publicstaticvoidmain(String[]args){//生成数据库的实体类,还有版本号Schemaschema=newSchema(1,com.student.entity);addStudent(schema);//指定daoschema.setDefaultJavaPackageDao(com.student.dao);try{//指定路径newDaoGenerator().generateAll(schema,D:\\github\\GreenDao\\app\\src\\main\\java-gen);}catch(Exceptione){e.printStackTrace();}}/***创建数据库的表**@paramschema*/publicstaticvoidaddStudent(Schemaschema){//创建数据库的表Entityentity=schema.addEntity(Student);//主键是int类型entity.addIdProperty();//名称entity.addStringProperty(name);//年龄entity.addIntProperty(age);//地址entity.addStringProperty(address);}}写完这个时候我们要注意了,我们不能直接去运动这个工程,我们要单独编译这个java类。也就是右键编译的时间有点点长,我们耐心等待一下就好了,这个时候我们可以看到控制台会打印相关的信息这个时候你再去看java-gen目录,就会有东西了很nice,这算是前期基本已经完工了,我们可以看他的原型图三.核心类可以看到,GreenDao是有自己创建的类的,我们来看看是什么类DaoSession:会话层,操作具体dDao类,提供了基本的持久化操作方法,比如对实体对象的insert,load,update,refresh,delete的一些操作XXDao:实际生成的Dao类,通常对应具体的java类,greenDao为每一个实体类创建一个Dao,他提供了比DaoSession更为具体的付费,比如count,loadALL和inserlnTx,批量插入xxEntity:持久的实体对象,通常代表数据库row标准的java属性Schema:实例数据schema,通过schema的版本和缺省的java包调用构造器四.封装操作类OK,了解的差不多了,我们就来实战操作一下吧!实战的时候,我们不需要在主Activity中放太多的逻辑代码,全部封装在一个数据库的操作类中其实是最好的,所以我们先新建一个类packagecom.lgl.greendao;importandroid.content.Context;importcom.student.dao.DaoMaster;importcom.student.dao.DaoSession;importde.greenrobot.dao.query.QueryBuilder;/***数据库操作类*CreatedbyLGLon2016/7/2.*/publicclassDaoManager{/***实现功能*1.创建数据库*2.创建数据库的表*3.对数据库的升级*4.对数据库的增删查改*///TAGpublicstaticfinalStringTAG=DaoManager.class.getSimpleName();//数据库名称privatestaticfinalStringDB_NAME=greendao.db;//多线程访问privatevolatilestaticDaoManagermanager;//操作类privatestaticDaoMaster.DevOpenHelperhelper;//上下文privateContextmContext;//核心类privatestaticDaoMasterdaoMaster;privateDaoSessiondaoSession;//单例模式publicstaticDaoManagergetInstance(){DaoManagerinstance=null;if(manager==null){synchronized(DaoManager.class){if(instance==null){instance=newDaoManager();manager=instance;}}}returninstance;}//传递上下文publicvoidinitManager(Contextcontext){this.mContext=context;}/***判断是否存在数据库,如果没有则创建**@return*/publicDaoMastergetDaoMaster(){if(daoMaster==null){helper=newDaoMaster.DevOpenHelper(mContext,DB_NAME,null);daoMaster=newDaoMaster(helper.getWritableDatabase());}returndaoMaster;}/***完成对数据库的操作,只是个接口**@return*/publicDaoSessiongetDaoSession(){if(daoSession==null){if(daoMaster==null){daoMaster=getDaoMaster();}daoSession=daoMaster.newSession();}returndaoSession;}/***打开输出日志,默认关闭*/publicvoidsetDebug(){QueryBuilder.LOG_SQL=true;QueryBuilder.LOG_VALUES=true;}/***关闭DaoSession*/publicvoidcloseDaoSession(){if(daoSession!=null){daoSession.clear();daoSession=null;}}/***关闭Helper*/publicvoidcloseHelper(){if(helper!=null){helper.close();helper=null;}}/***关闭所有的操作*/publicvoidcloseConnection(){closeHelper();closeDaoSession();}}这个类能初始化数据库的很多操作,不过这样还不够,我们需要再写个实在点的操作类,现在只是单单实现一个插入的动作packagecom.lgl.greendao;importandroid.content.Context;importcom.student.entity.Student;/***完成对某一张表的具体操作*CreatedbyLGLon2016/7/2.*/publicclassCommonUtils{privateDaoManagerdaoManager;//构造方法publicCommonUtils(Contextcontext){daoManager=DaoManager.getInstance();daoManager.initManager(context);}/***对数据库中student表的插入操作*@paramstudent*@return*/publicbooleaninsertStudent(Studentstudent){booleanflag=false;flag=daoManager.getDaoSession().insert(student)!=-1?true:false;returnflag;}}五.插入OK,那我们先去看看sql的插入是怎么做的,定义一个buttonButtonandroid:id=@+id/btn_addandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:text=添加数据/我们只需要看他的点击事件就可以了caseR.id.btn_add:dbUtils=newCommonUtils(this);Studentstudent=newStudent();student.setName(lgl);student.setAge(18);student.setAddress(北京);dbUtils.insertStudent(student);break;我们一运行之后,就可以在data/data/报名/databases中找到数据库了这里感觉不好,ID应该设置自动增长的对吧!其实只要不设置ID,他就会自增长的六.批量插入插入可以了,我们批量插入就简单了,CommonUtils中增加与一个方法/***批量插入**@paramstudents*@return*/publicbooleaninserMultStudent(finalListStudentstudents){//标识booleanflag=false;try{//插入操作耗时daoManager.getDaoSession().runInTx(newRunnable(){@Overridepublicvoidrun(){for(Studentstudent:students){daoManager.getDaoSession().insertOrReplace(student);}}});flag=true;}catch(Exceptione){e.printStackTrace();}returnflag;}我们可以去验证一下吧,那首先先去写一个button吧Buttonandroid:id=@+id/btn_add_multandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:text=批量添加数据/
本文标题:Android数据库框架GreenDao轻量级的对象关系映射框架,永久告别sqlite
链接地址:https://www.777doc.com/doc-2897324 .html