架构师学习--数据库框架的基本搭建(增删改查)

本文主要实现如何搭建一套自己的数据库框架。包括数据库的创建、表的创建、数据的增删改查功能、以及数据库如何实现分库、如何进行更新。

一、创建数据库及生成数据库表

如何使自己的数据库表的创建以更加优雅的方式,我们就需要注解的方式实现。

1、创建表名注解类Table

在这里插入图片描述

2、创建表中字段注解类FieldParams

在这里插入图片描述

3、创建实体类中不需要保存到数据库的字段注解类Exclude

在这里插入图片描述

4、创建数据库表实体类Student

在这里插入图片描述
针对没有FieldParams注解的字段我们会使用字段名称作为数据库保存的字段名称,对于Exclude注解的字段我们不保存在数据库中。

5、创建数据库操作公共接口IBaseDao

接口提供增删改查基本功能,供子类实现。
在这里插入图片描述
这里使用泛型T表示,做到了实体类的通用。

6、创建数据库操作公共实现类BaseDao

这个类主要负责数据库的基础增删改查的操作,对于其他特殊的数据库操作功能,我们可以继承这个类去扩展功能。

(1)创建数据库表

在init方法进行创建表的操作,大致流程是通过反射拿到实体类的数据库表名,和注解的字段名称及类型,将它们拼接处数据库执行语句,最后通过SQLiteDatabase执行execSQL(sql)即可。主要代码如下:

拼接过程如下:

private String createTableSql(Class<T> clazz) {
        StringBuilder sb = new StringBuilder();
        sb.append("create table if not exists " + tableName + "(");

        //拿到所有的属性字段
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);

            //判断是否需要保存字段到数据库
            Exclude exclude = field.getAnnotation(Exclude.class);
            if (exclude != null) {
                continue;
            }

            FieldParams fieldParams = field.getAnnotation(FieldParams.class);

            //字段名
            String columnName;
            if (fieldParams == null) {
                columnName = field.getName();
            } else {
                columnName = fieldParams.value();
            }

            if ("serialVersionUID".equals(columnName)) {
                continue;
            }

            caches.put(columnName, field);

            //拼接类型
            Class type = field.getType();

            if (type == String.class) {
                sb.append(columnName + " TEXT,");

            } else if (type == Integer.class || type == int.class) {
                sb.append(columnName + " INTEGER,");
            } else if (type == Long.class) {
                sb.append(columnName + " BIGINT,");
            } else if (type == Double.class) {
                sb.append(columnName + " DOUBLE,");
            } else if (type == byte[].class) {
                sb.append(columnName + " BLOB,");
            } else {
                //不支持的类型号
                caches.remove(columnName);
                continue;
            }
        }

        //去除最后一个,
        if (sb.charAt(sb.length() - 1) == ',') {
            sb = sb.deleteCharAt(sb.length() - 1);
        }
        sb.append(")");

        return sb.toString();

    }

最后执行如下:
在这里插入图片描述

(2)创建数据库

创建一个用户可以直接操作的类,类中我们进行数据库的创建
在这里插入图片描述
并且提供方法,创建数据库表
在这里插入图片描述
这里调用init方法后就完成了数据库表的创建,并将数据库SQLiteDatabase对象传给了BaseDao类,拿到它我们就可以进行增删改查操作了。

二、创建数据库表增删改查

以上完成了数据库的创建和表的创建,并且BaseDao基类持有了SQLiteDatabase对象,下面开始基础功能的实现

1、增

在这里插入图片描述
主要执行db.insert()方法。其中第三个参数保存了所有字段及字段值的映射,代码如下:
在这里插入图片描述
注意,我这里的caches是一个map集合,key为数据库中字段对应的名称,value为实体类的属性Field
在这里插入图片描述

2、查

在这里插入图片描述
注意,这里的getFields()方法会返回当前查询条件的map集合,然后创建Conditions类,它包含查询需要的两个字段,注释有说明。

getField()方法如下:
在这里插入图片描述
Conditions类代码如下:
在这里插入图片描述

3、改

在这里插入图片描述
主要执行db.update()方法。

4、删

在这里插入图片描述
主要执行db.delete()方法。

以上就完成了数据库基本框架的搭建,提供了基础的四个方法。

完整代码:

代码传送门

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值