热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java注解数据库框架_Java注解知多少之自定义Android数据库框架

嘿嘿小伙伴们,今天是开始又是愉快的周末啦!小伙伴们平时周末都在干嘛,有没有学习啊!学习的小伙伴不妨也来多看看我的文章呀(臭不

嘿嘿小伙伴们,今天是开始又是愉快的周末啦!小伙伴们平时周末都在干嘛,有没有学习啊!学习的小伙伴不妨也来多看看我的文章呀(臭不要脸)。话不多说,我们接着上一节讲的注解,更深层次的使用。

6f4746b4cc34

一、注解在Android中的使用

我们知道,注解的使用在Android项目开发当中是经常用到的,除了一些Android SDK里面自带的注解以及JDK自带的注解,里面还包括一些第三方框架使用的注解,其基本原理都是差不多的,下面来用注解来写一个简单的数据库框架。但是这个框架还是相对来说比较简单的。

Android数据库中原生的数据库的对象相关的类,在这里就简单的介绍一下了,因为只针对注解在Android项目中的使用来举例,让大家更深层次的理解。

6f4746b4cc34

图1.1

我们知道SQLiteDatabase对象在创建的时候是需要SQLiteOpenHelper去创建的,在创建数据库的时候需要创建表及其字段,那么如何用注解来实现我们的数据库框架达到自动建表以及简单的增删改查的效果呢?

二、创建注解实现数据库自动建表

1.创建表名相关的注解

我们知道每个数据库中都有各种各样的表,那么表名的如何用我们的注解去定义呢?看下面的例子

6f4746b4cc34

图2.1.1

根据代码可知,这里定义了一个叫DataBaseTable的注解,生命周期为运行时注解,作用域用的是Type,下面我们这里再写一个bean用来存储这个bean里面的数据,也用这个bean来创建一个表。

6f4746b4cc34

图2.1.2

到这里相信很多小伙伴们应该知道这些注解是干嘛用的了,在这里我们定义了一个表名注解类,其中这个注解有个叫    String value()的方法,这个方法呢,在修饰作用域的时候可以传一个String对象进去,这个String对象就是我们需要建表的    表名。

2.创建表的列名相关的注解

6f4746b4cc34

图2.2.1

6f4746b4cc34

图2.2.2

我们看到,这里我定义了另外两个注解,这两个注解的生命周期也是运行时注解,但是其作用域是在成员变量的。其中图2.2.1的注解呢,使用来实现我们数据库表的列名的,图2.2.2是实现我们数据库表中的自增长id的。我们通过这个注解修饰成员变量,通过反射的原理将表名与bean中的成员变量一一对应就可以实现建表与简单的增删改查了。

3.创建数据库操作相关的类的对象

在这里对这个不做过多表述,我们就以一些代码带过。

6f4746b4cc34

图2.3.1

6f4746b4cc34

图2.3.2

在这里我用DataBaseHepler创建了一个SQLiteDatabase对象,数据库名字为“test”,数据库版本为1,并且放在单例        模式下的DataBaseFactory下面。

4.创建数据库实际操作类

为此我们需要的所有跟数据库相关,表名与列名相关的(注解)类都已经创建好了,现在来创建数据库操作相关的类

首先我们先定义一个接口,这个接口有简单的增删改查的方法。

6f4746b4cc34

图2.4.1

6f4746b4cc34

图2.4.2

这里我们写了一些成员变量分别实现指定的功能,database为数据库操作的对象,entityClass为我们实际要保存的bean(即Test)的class对象,tableName为表名,以及表的缓存等。

在实现数据库增删该查的之前呢,首先我们要创建数据库的表,这时候呢就可以运用到我们之前自定义的注解DataBaseTable、DataBaseFeild、DataBaseKey了。看下列代码

6f4746b4cc34

图2.4.3

这里的initCacheMap方法呢,主要是将数据库的表名跟entityClass中的成员变量建立一对一的键值对关系保存在缓存里面,用于增删改查工作。

6f4746b4cc34

图2.4.4

6f4746b4cc34

图2.4.5

通过反射出我们上面定义的注解类并得到该注解类对应的value值,根据value值拼接自动建表语句

6f4746b4cc34

图2.4.6

6f4746b4cc34

图2.4.7

最后调用database.execSQL(sql)完成最后的建表,其中这里涉及到非常重要的概念叫反射,这里不做过多描述,后续章节将会详细讲解java反射的运用。

这里先抽取一部分代码作为解释,其中就是Field[] fields =entityClass.getDeclaredFields(),是通过class对象反射出该class的所有成员变量并返回一个数组的形式。field.getAnnotation(Annotion.class)可以得到该成员变量的指定的注解类。

5.简单的数据库操作

这里就以插入数据作为例子,其他的增删改查都是大同小异

6f4746b4cc34

图2.5.1

根据遍历缓存的cacheMap的键值对创建ConrtentValues对象,其中需要判断缓存的map里面的成员变量的数据类型创建ContentValues的值,并最终通过database的insert方法插入指定的表中完成数据插入的操作

6f4746b4cc34

图2.5.2

6f4746b4cc34

图2.5.3

在这里简单的通过注解方式与反射的方式实现Android数据库框架设计,当然这里写的数据库框架肯定是不够完善的,一个简单好用、性能良好的数据库框架不仅仅是通过简短的几行代码就可以实现的。

其他的数据库操作需要小伙伴们自行实现啦,可以练练手,当然如果上述存在什么疑问或者有什么良好的建议可以下方评论哟!最后祝大家事业顺心顺意!



推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
author-avatar
清新之乄风666
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有