您好, 访客   登录/注册

一款安卓SQLite数据库对象关系映射框架的开发

来源:用户上传      作者:

  【摘 要】安卓操作系统内嵌的SQLite数据库适用于在移动设备保存少量的数据,但目前业界一直缺少适合SQLite数据库的映射框架,能公开源代码的则更为罕见。本文就开发效率提升和容错问题等方面,描述了一款SQLite对象关系映射框架的设计实现思路。并以实际案例,对比使用前后的效率提升结果。
  【关键词】对象关系映射;SQLite;框架;安卓
  中图分类号: TP277 文献标识码: A 文章编号: 2095-2457(2019)30-0051-002
  DOI:10.19694/j.cnki.issn2095-2457.2019.30.024
  了解安卓系统的人都知道,SQLite是一款开源的轻量级关系型数据库,安卓系统原生内建了SQLite的实现,以文件存储的方式在移动设备中存储数据。而现在针对SQLite数据库的对象关系映射,开发了一款新的框架,解决了SQLite在编程时的效率和容错问题,它的名称是ChopinLite。这款框架既可作为安卓系统开发的实用工具,也可作为本科或高职专业移动开发课程的内容。
  根据以往的体验,在使用Java语言进行各类数据库的相关操作时,会经常用到Hibernate等框架;而且在Java语言编程教学中,一般也会把Hibernate框架作为教学内容。当体验过使用Hibernate框架给编程带来的便利后,会发现进入安卓开发时,对于SQLite数据库并未有类似框架的支持。又因为精简内存的需要,安卓系统不适合使用较复杂的大型框架,只能使用轻量级的框架。而目前能支持SQLite数据库的第三方框架种类欠丰富,功能欠完善,操作也欠优化。以目前较为流行的OrmLite框架为例,其在连接时需要手动定义辅助类;定义映射及关联关系时所用的标识符过长且不够明确;操作时需要手动处理异常。这些不足之处引发了进一步开发更为简单实用的新框架的需求,因此本框架应运而生。本框架的优势在于:
  (1)弥补不足:本框架可以弥补目前SQLite数据库的第三方框架的各种不足,实现搭建便捷、功能定位适当、操作优化的目的。
  (2)填补空白:目前国内还没有公开发行的类似框架,主要都是公司内部的产权技术,因此本框架在某种程度上可以填补国内空白。
  (3)辅助教学:本框架一方面能够满足实际生产中的简单安卓项目的快速开发,同时又可以作为课堂教学的辅助工具,甚至其自身的开发过程也可以作为教学内容,使学生能够快速掌握对象关系映射的原理和方法。
  本框架的设计理念是精简和高效,其大致来自桌面平台的Hibernate框架,但进行了大幅度的优化,同时摒弃了其他类似框架的各种不足之处,给使用者提供了极大的便利。使用者无须编写任何配置文件,也基本无须派生其他多余的操作类和接口。无论是在搭建数据表结构还是在操作实体时,使用者都只需使用框架中已经实现的各种操作方法,无须二次开发。
  图1
  本框架核心组件包含连接和初始化(OpenHelper)、实体模板(Entity)、实体标注(annotations)、实体操作(Dao)和辅助工具(utils)。这些核心组件建立在安卓SQLite数据库的操作接口之上,并为安卓APP的开发提供支持。
  在这些核心组件中,OpenHelper可以进行数据库的初始化连接,进而根据已定义的实体及其关联关系,自动生成数据表及其字段,也可以对数据库进行备份和重建;而Entity则是用来定义上述实体的模板,封装了包含实体标识(ID)在内的各个字段的Java Bean操作,这些字段可通过annotation进行标注,如标注为表、列、多对一关联、多对多关联等;在这之后,可以使用Dao进行各种实体操作,如添加、修改、删除实体,或以各种指定条件查询实体等。在使用上述核心组件时,辅助工具也是不可或缺的。使用本框架的辅助工具可以定义模糊查询条件、组合查询条件和聚合函数,可以保存查询结果,也可以更加便捷地定义日期和时间。
  设计这些核心组件时使用了泛型、内部类和反射原理,使框架尽可能轻量化,结构尽可能简化,操作尽可能简洁。在此基础上,本框架通过内部算法,将使用者的意图转化为对应的SQL语句,并将语句的执行结果重新封装为使用者所需的实体或数值。
  使用本框架的步骤非常简单:先定义实体类,再进行数据表结构的搭建,最后进行实体操作。
  实体类只需从实体模板派生,并对每个字段标注映射关系和关联关系即可;在搭建数据表结构时,只需将事先定义好的若干实体类作为参数,调用初始化或备份方法即可,而且还可以选择是否在操作过程中显示自动生成的SQL语句;在实体操作时,只需调用简单的方法即可实例化操作类,进而添加、删除或更新实体,以及根据各种条件查询实体、计算聚合函数等。
  本框架在安全性方面,也尽可能与可扩展性平衡,尽量隐藏无须使用者扩展的资源,使使用方式趋于规范统一。
  下面以一个常见的用户注冊和登录功能的案例来说明本框架的使用方法和原理:
  如果采用MVC结构,则由service(控制层)实现用户注册和登录的功能逻辑,dao(模型层)实现实体数据的操作。本案例旨在对比采用和不采用本框架的区别,从而说明采用本框架将大幅提高开发效率。
  不使用框架编写Service实现类的login方法:
  使用框架编写后的版本
  由此可见,采用本框架后,类结构和代码更简练,条理性更强。
转载注明来源:https://www.xzbu.com/8/view-15269390.htm