自己本地模拟内存数据库增删改查

目录

    • 学习初衷
    • 准备
    • 代码实现
    • 结果
    • 感谢阅读

学习初衷

  • 用于满足自己的测试要求,不连接数据库,也不在意数据丢失

准备

  1. maven依赖

    org.springframework.boot
    spring-boot-starter-test
    test

代码实现

  1. 内存数据库(InMemoryDatabase)
  • 使用了单例模式,程序启动就创建
package com.kwan.springbootkwan.test.lykj;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class InMemoryDatabase {private static InMemoryDatabase instance;public final Map<String, HashMap<String, String>> database;private InMemoryDatabase() {this.database = new HashMap<>();}public static synchronized InMemoryDatabase getInstance() {if (instance == null) {instance = new InMemoryDatabase();}return instance;}public void insert(String tableName, String primaryKey, String data) throws JsonProcessingException {if (!database.containsKey(tableName)) {database.put(tableName, new HashMap<String,String>());}database.get(tableName).put(primaryKey, data);}public Object query(String tableName, String primaryKey, Class<?> clazz) throws JsonProcessingException {Set<String> tableSet = database.keySet();if (!tableSet.contains(tableName)) {return null;}String jsonData = database.get(tableName).get(primaryKey);if (jsonData == null) {return null;}ObjectMapper mapper = new ObjectMapper();return mapper.readValue(jsonData, clazz);}public String delete(String tableName, String primaryKey) {return database.get(tableName).remove(primaryKey);}public void update(String tableName, String primaryKey, String updatedJsonData) {Map<String, String> table = database.get(tableName);if (table != null) {table.put(primaryKey, updatedJsonData);} else {throw new IllegalArgumentException("Table " + tableName + " does not exist.");}}
}
  1. 测试增删改查方法
package com.kwan.springbootkwan.test.lykj.memorydb;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class InMemoryDatabase {private static InMemoryDatabase instance;public final Map<String, HashMap<String, String>> database;private InMemoryDatabase() {this.database = new HashMap<>();}public static synchronized InMemoryDatabase getInstance() {if (instance == null) {instance = new InMemoryDatabase();}return instance;}public void insert(String tableName, String primaryKey, String data) throws JsonProcessingException {if (!database.containsKey(tableName)) {database.put(tableName, new HashMap<String,String>());}database.get(tableName).put(primaryKey, data);}public Object query(String tableName, String primaryKey, Class<?> clazz) throws JsonProcessingException {Set<String> tableSet = database.keySet();if (!tableSet.contains(tableName)) {return null;}String jsonData = database.get(tableName).get(primaryKey);if (jsonData == null) {return null;}ObjectMapper mapper = new ObjectMapper();return mapper.readValue(jsonData, clazz);}public String delete(String tableName, String primaryKey) {return database.get(tableName).remove(primaryKey);}public void update(String tableName, String primaryKey, String updatedJsonData) {Map<String, String> table = database.get(tableName);if (table != null) {table.put(primaryKey, updatedJsonData);} else {throw new IllegalArgumentException("Table " + tableName + " does not exist.");}}
}

结果

在这里插入图片描述

感谢阅读

感谢您阅读 这篇文章,我们探索了自己本地模拟内存数据库增删改查
谢谢您的陪伴! 如果您有任何问题、建议或想要了解的特定主题,请随时在评论中告诉我们。我们期待与您共同探索java,共同提升我们的Java开发技能!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/508449.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的List

List集合的特有方法 方法介绍 方法名描述void add(int index,E element)在此集合中的指定位置插入指定的元素E remove(int index)删除指定索引处的元素&#xff0c;返回被删除的元素E set(int index,E element)修改指定索引处的元素&#xff0c;返回被修改的元素E get(int inde…

【OpenGL编程手册-04】详细解释着色器

着色器 目录 一、说明二、着色器语言GLSL2.1 典型的着色器代码2.2 数据类型2.2.1 向量 2.3 输入与输出2.3.1 顶点着色器2.3.2 片段着色器 2.4 Uniform2.5 函数后缀含义2 .6 更多属性&#xff01; 三、我们自己的着色器类四、从文件读取五、 编译着色器练习 一、说明 在Hello T…

故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab) 模型描述 XGBoost通过集成多个决策树来建立一个强大的预测模型。它采用了一种特殊的梯度提升技术,称为极限梯度提升(Extreme Gradient Boosting),以提高模型的性能和鲁棒性。 极限梯度…

足球青训俱乐部|基于Springboot的足球青训俱乐部管理系统设计与实现(源码+数据库+文档)

足球青训俱乐部管理系统目录 目录 基于Springboot的足球青训俱乐部管理系统设计与实现 一、前言 二、系统设计 1、系统架构设计 三、系统功能设计 1、管理员登录界面 2、公告信息管理界面 3、学员管理界面 4、商品信息管理界面 5、课程安排管理界面 四、数据库设计…

Hackthebox - Authority

#ansible #Certify 赛博雨天&#xff1a;https://yutianqaq.github.io/ Recon smb smbmap -H 10.10.11.222 -u 挂载 smb 到 kali mount -t cifs //10.10.11.222/Development ./smb -o usernamesmb 在 cat smb/Automation/Ansible/PWM/defaults/main.yml 得到 ansible 的加…

java012 - Java集合基础

1、集合基础 1.1 集合概述 引用数据类型包括&#xff1a;类、接口、数组[] 1.2 ArrayList构造和添加方法 代码&#xff1a; 空集合对象&#xff1a;[] add() add(int index,E element): 1.3 ArrayList集合常用方法

前端开发 VSCode 插件推荐

1、Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code VS Code 的中文&#xff08;简体&#xff09;语言包&#xff0c;此中文&#xff08;简体&#xff09;语言包为 VS Code 提供本地化界面。 下载地址&#xff1a;Chinese (Simplified) (简体中文) La…

六、矩阵问题

73、矩阵置零&#xff08;中等&#xff09; 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a…

使用query请求数据出现500的报错

我在写项目的时候遇到了一个问题&#xff0c;就是在存商品id的时候我将它使用了JSON.stringify的格式转换了&#xff01;&#xff01;&#xff01;于是便爆出了500这个错误&#xff01;&#xff01;&#xff01; 我将JSON.stringify的格式去除之后&#xff0c;它就正常显示了&…

可视化管理的kanban插件 | Obsidian实践

继上一篇文章之后&#xff0c;有朋友提问说&#xff1a; 刚好&#xff0c;关于kanban插件的素材&#xff0c;是之前一早就准备好的&#xff0c;便快速整理成文&#xff0c;简单分享一下个人实践。 Prompt&#xff1a;项目流程管理看板&#xff0c;色彩鲜艳。by 通义万象 看板管…

计算机网络-第2章 物理层

本章内容&#xff1a;物理层和数据通信的概念、传输媒体特点&#xff08;不属于物理层&#xff09;、信道复用、数字传输系统、宽带接入 2.1-2.2 物理层和数据通信的概念 物理层解决的问题&#xff1a;如何在传输媒体上传输数据比特流&#xff0c;屏蔽掉传输媒体和通信手段的差…

pywin32,一个超强的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超强的 Python 库 - pywin32。 Github地址&#xff1a;https://github.com/mhammond/pywin32 在Python的世界里&#xff0c;有许多优秀的第三方库可以帮助开发者更轻松地处理各种任务。其中&a…