您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Android数据库框架ORMLite轻量级的对象关系映射(ORM)Java包
Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的,不是我们三言两语就能解决的,我一直想抽个时间自己再过一遍Sqlite和JDBC的,但是,大家也知道,琐事比较多,我们来说一下数据库的框架吧,事实上市面上,我觉得还可以的数据库框架有两个,ORMLite和GreenDao,我以前做的运动类的应用上,就需要存储大量的运动数据,我们最开始是在本地写数据库的,那也是比较老的逻辑了,后来我们准备重构项目的时候,我决定把数据库也重构一下,因为我们当时的应用读取速度来还是比较慢的,比如你有一两年的数据之类的,我后来就研究了一下这两个框架,虽然我最后采用的是GreenDao,但是ORMLite也是研究了一会儿,所以,接下来,我将把这两个框架分两篇文章来分析,首先就是ORMLite了,网上还是有很多关于他们的文章的,所以我也是准备站在巨人的肩膀上,首先他们之间的优缺点,也有前辈写了,你可以参考一下SQLite数据库框架ORMLite与GreenDao的简单比较而且鸿洋老师也写了两篇关于ORMLite的文章AndroidORMLite框架的入门用法Android快速开发系列ORMLite框架最佳实践但是就算他们写了,我觉得我再根据自己的逻辑去讲一遍,很多人还是会收益的,我自信我的文笔应该还是算不错的,而且我是基于Androidstudio来讲的。嘻嘻,话不多说,我们来新建一个项目:一.准备工作在以前,我们写数据库时怎么写的?那就是频繁的去写SQLiteOpenHelper了,所以后来在我们开发中,很多人就喜欢封装他们,提高性能,也就出现了很多的数据库框架,ORMLite算是一个佼佼者了们根据官方文档来看这个框架是怎么样集成的,官网上有共有四个步骤然后添加到libs目录下,然后右键——AddAsLibrary就算是添加成功了,紧接着,我们在xml中写个按钮用来创建表和保存数据Buttonandroid:id=@+id/btn_create_saveandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:text=创建表|保存数据/二.Bean类OK,我们继续看文档,他需要编写一个bean类来声明一些表明和字段的既然如此,那我们就创建好了,这个类可不简单,它主要通过注解去注明表单信息,然后映射给整个数据库,我们看packagecom.lgl.ormlite;importcom.j256.ormlite.field.DatabaseField;importcom.j256.ormlite.table.DatabaseTable;/***bean类,对应的整个数据库的表单信息,帮助我们映射到整个数据库当中*CreatedbyLGLon2016/6/26.*///配置表名@DatabaseTable(tableName=user_info)publicclassUser{//配置主键id@DatabaseField(generatedId=true)privateintid;//名称@DatabaseField(columnName=name)privateStringname;//描述@DatabaseField(columnName=desc)privateStringdesc;//空构造publicUser(){}//构造方法publicUser(intid,Stringname,Stringdesc){this.id=id;this.name=name;this.desc=desc;}publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetDesc(){returndesc;}publicvoidsetDesc(Stringdesc){this.desc=desc;}@OverridepublicStringtoString(){returnUser{+id=+id+,name='+name+'\''+,desc='+desc+'\''+'}';}}写起来还是逻辑性很强的,如果需要一些特别的参数的话,可以参考一下官网上的项目描述,首先在User类上添加@DatabaseTable(tableName=“user_info”),标明这是数据库中的一张表名字为user_info,然后分别在属性上添加@DatabaseField(columnName=“name”),columnName的值为该字段在数据中的列名,@DatabaseField(generatedId=true),generatedId表示id为主键且自动生成,好了,到这里,我们继续看官方的文档了三.Dao类官网写的很详细呀,我们跟着造轮子既可呀,嘿嘿,那我们就来写这个Dao类吧,注意,注释写的很清楚了哦!packagecom.lgl.ormlite;importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;importcom.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;importcom.j256.ormlite.dao.Dao;importcom.j256.ormlite.support.ConnectionSource;importcom.j256.ormlite.table.TableUtils;importjava.sql.SQLException;importjava.util.HashMap;importjava.util.Map;/***Dao类*CreatedbyLGLon2016/6/26.*/publicclassDataBaseHelperextendsOrmLiteSqliteOpenHelper{//创建数据库名称privatestaticfinalStringDATABASE_NAME=ormlite_sql.db;//版本号privatestaticfinalintDATABASE_VERSION=1;//存放DaoprivateMapString,Daomaps=newHashMap();//单例模式privatestaticDataBaseHelperinstance;publicstaticsynchronizedDataBaseHelpergetInstance(Contextcontext){if(instance==null){synchronized(DataBaseHelper.class){if(instance==null){instance=newDataBaseHelper(context);}}}returninstance;}/***获得数据库的访问对象**@paramcls*@return*@throwsSQLException*/publicsynchronizedDaogetDao(Classcls)throwsSQLException{Daodao=null;//通过反射获得类的名称StringclsName=cls.getSimpleName();//是否存在该对象if(maps.containsKey(clsName)){dao=maps.get(clsName);}else{dao=super.getDao(cls);maps.put(clsName,dao);}returndao;}/***关闭所有操作*/publicvoidclose(){super.close();//获取所有的map键值对置空for(Stringkey:maps.keySet()){Daodao=maps.get(key);dao=null;}}//构造方法publicDataBaseHelper(Contextcontext){//上下文,数据库名,null,版本号super(context,DATABASE_NAME,null,DATABASE_VERSION);}//创建数据库@OverridepublicvoidonCreate(SQLiteDatabasesqLiteDatabase,ConnectionSourceconnectionSource){try{//对数据库的创建以及表的建立TableUtils.clearTable(connectionSource,User.class);}catch(SQLExceptione){e.printStackTrace();}}//更新数据库@OverridepublicvoidonUpgrade(SQLiteDatabasesqLiteDatabase,ConnectionSourceconnectionSource,inti,inti1){try{//调用更新就删除数据库TableUtils.dropTable(connectionSource,User.class,true);}catch(SQLExceptione){e.printStackTrace();}}}到这里,我们的前期都OK了,紧接着,我们就可以去操作这些数据了四.UserDao类这个类主要是对数据的初始化和操作的packagecom.lgl.ormlite;importandroid.content.Context;importcom.j256.ormlite.dao.Dao;importjava.sql.SQLException;/***数据库操作类*CreatedbyLGLon2016/6/26.*/publicclassUserDao{//上下文privateContextmContext;//主键查询privateDaoUser,IntegeruserDao;//Dao类privateDataBaseHelperhelper;publicUserDao(ContextmContext){this.mContext=mContext;//创建数据库helper=DataBaseHelper.getInstance(mContext);try{//操作DaouserDao=helper.getDao(User.class);}catch(SQLExc){e.printStackTrace();}}publicvoidaddUser(Useruser){try{userDao.create(user);}catch(SQLExceptione){e.printStackTrace();}}}五.增OK,基本上现在可以去实际的操作了,这个UserDao类我们等下还需要去完善,现在先这样,我们去实现按钮的点击事件//点击事件@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.btn_create_save:userDao=newUserDao(this);Useruser=newUser();user.setName(lgl);user.setDesc(Android);userDao.addUser(user);break;}}到这里,我们就可以去操作了,我们去看数据库,打开DDMS既然插入成功了,那我们尝试一下多条语句的插入吧caseR.id.btn_create_save:Useruser=newUser();use
本文标题:Android数据库框架ORMLite轻量级的对象关系映射(ORM)Java包
链接地址:https://www.777doc.com/doc-2897326 .html