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

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

学习初衷

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

准备

  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开发技能!

相关文章
|
2月前
|
前端开发 Java 数据库连接
javamvc配置,增删改查,文件上传下载。
【10月更文挑战第4天】javamvc配置,增删改查,文件上传下载。
39 1
|
2月前
|
存储 NoSQL API
使用Py2neo进行Neo4j图数据库的增删改查操作
使用Py2neo进行Neo4j图数据库的增删改查操作
94 5
|
2月前
|
数据可视化 API PHP
低代码开发工具-学生管理系统-老师管理增删改查实现
低代码开发工具-学生管理系统-老师管理增删改查实现
39 5
|
3月前
|
SQL 关系型数据库 MySQL
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
课程分类查询、课程新增、统一异常处理、统一封装结果类、JSR303校验、修改课程、查询课程计划、新增/修改课程计划
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
|
2月前
|
JavaScript 前端开发 测试技术
[新手入门]todolist增删改查:vue3+ts版本!
【10月更文挑战第15天】[新手入门]todolist增删改查:vue3+ts版本!
|
3月前
|
SQL 关系型数据库 MySQL
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
|
2月前
|
Java API 数据库
Data jpa 增删改查的方法分别有哪些
Data jpa 增删改查的方法分别有哪些
|
4月前
|
SQL 数据库连接 API
ThinkPHP6实现增删改查接口
ThinkPHP6实现增删改查接口
50 1
|
4月前
|
XML 数据库 数据格式
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
这篇文章是Spring5框架的实战教程的终结篇,介绍了如何使用注解而非XML配置文件来实现JdbcTemplate的数据库操作,包括增删改查和批量操作,通过创建配置类来注入数据库连接池和JdbcTemplate对象,并展示了完全注解开发形式的项目结构和代码实现。
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
|
4月前
|
SQL XML Java
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
这篇文章是Spring5框架的实战教程,详细讲解了如何使用JdbcTemplate进行数据库的增删改查操作,包括在项目中引入依赖、配置数据库连接池、创建实体类、定义DAO接口及其实现,并提供了具体的代码示例和测试结果,最后还提供了完整的XML配置文件和测试代码。
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】