当前位置: 首页 > news >正文

【Spring Boot 应用开发】-04-02 自动配置-数据源-手撸一个最简持久层工具类

设计概述

有时候我们不需要太重的持久层,就像要一个最简的、轻量的持久层,便于维护和扩展,代码掌握在自己手里,那么我们可以基于springboot的自动配置,快速的构建一个自己的持久层轻量框架,不说废话,直接上代码,可以根据自己的需要扩展

类图

uses
uses
DbUtils
+insert(String sql, Object... args)
+insert(String sql, Map params)
+update(String sql, Object... args)
+update(String sql, Map params)
+delete(String sql, Object... args)
+delete(String sql, Map params)
+queryForObject(String sql, RowMapper rowMapper, Object... args)
+queryForObject(String sql, Map params)
+query(String sql, RowMapper rowMapper, Object... args)
+query(String sql, Map params)
SqlBuilder
-StringBuilder sql
+SqlBuilder()
+abstract String build()
+append(String part)
+appendWithSpace(String part)
SelectBuilder
+columns(String... columns)
+from(String table)
+where(String condition)
+and(String condition)
+or(String condition)
+limit(int limit)
InsertBuilder
+columns(String... columns)
+values(List values)
+values(Map values)
UpdateBuilder
+set(Map updates)
+where(String condition)
+and(String condition)
+or(String condition)
DeleteBuilder
+where(String condition)
+and(String condition)
+or(String condition)
JdbcTemplate
NamedParameterJdbcTemplate

工程结构

在这里插入图片描述

代码说明

DbUtils.java

这个类是一个工具类,实现了 ApplicationContextAware 接口,用于获取 Spring 应用上下文。它提供了一系列静态方法,用于执行插入、更新、删除和查询操作。这些方法支持两种参数类型:可变参数数组和 Map

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
public class DbUtils implements ApplicationContextAware {

    private static ApplicationContext context;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }

    private static JdbcTemplate getJdbcTemplate() {
        return context.getBean(JdbcTemplate.class);
    }

    private static NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
        return new NamedParameterJdbcTemplate(getJdbcTemplate());
    }

    // 插入数据
    public static void insert(String sql, Object... args) {
        getJdbcTemplate().update(sql, args);
    }

    // 更新数据
    public static void update(String sql, Object... args) {
        getJdbcTemplate().update(sql, args);
    }

    // 删除数据
    public static void delete(String sql, Object... args) {
        getJdbcTemplate().update(sql, args);
    }

    // 查询单个对象
    public static <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args) {
        return getJdbcTemplate().queryForObject(sql, rowMapper, args);
    }

    // 查询多个对象
    public static <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args) {
        return getJdbcTemplate().query(sql, rowMapper, args);
    }

    // 插入数据
    public static void insert(String sql, Map<String, Object> params) {
        getNamedParameterJdbcTemplate().update(sql, params);
    }

    // 更新数据
    public static void update(String sql, Map<String, Object> params) {
        getNamedParameterJdbcTemplate().update(sql, params);
    }

    // 删除数据
    public static void delete(String sql, Map<String, Object> params) {
        getNamedParameterJdbcTemplate().update(sql, params);
    }

    // 查询单个对象
    public static Map<String, Object> queryForObject(String sql, Map<String, Object> params) {
        return getNamedParameterJdbcTemplate().queryForMap(sql, params);
    }

    // 查询多个对象
    public static List<Map<String, Object>> query(String sql, Map<String, Object> params) {
        return getNamedParameterJdbcTemplate().queryForList(sql, params);
    }


}
  • getJdbcTemplate()getNamedParameterJdbcTemplate() 方法用于获取 JdbcTemplateNamedParameterJdbcTemplate 实例。
  • insert, update, delete 方法用于执行相应的数据库操作。
  • queryForObjectquery 方法用于查询单个对象和多个对象。

sql 子文件夹

SqlBuilder.java

这是一个抽象类,用于构建 SQL 语句。它包含一个 StringBuilder 对象,用于拼接 SQL 语句的各个部分。

// ... existing code ...
protected void append(String part) {
    sql.append(part);
}
// ... existing code ...
  • append 方法用于直接拼接字符串。
  • appendWithSpace 方法用于在拼接字符串之前添加一个空格。
  • build 方法是一个抽象方法,由子类实现,用于返回最终的 SQL 语句。
SelectBuilder.java

这个类继承自 SqlBuilder,用于构建 SELECT 语句。

// ... existing code ...
public SelectBuilder columns(String... columns) {
    appendWithSpace(String.join(", ", columns));
    return this;
}
// ... existing code ...
  • columns 方法用于指定要查询的列。
  • from 方法用于指定查询的表。
  • where, and, or 方法用于添加查询条件。
  • limit 方法用于限制查询结果的数量。
InsertBuilder.java

这个类继承自 SqlBuilder,用于构建 INSERT 语句。

// ... existing code ...
public InsertBuilder columns(String... columns) {
    appendWithSpace("(");
    appendWithSpace(String.join(", ", columns));
    append(")");
    return this;
}
// ... existing code ...
  • columns 方法用于指定要插入的列。
  • values 方法用于指定要插入的值。支持 ListMap 两种参数类型。
UpdateBuilder.java

这个类继承自 SqlBuilder,用于构建 UPDATE 语句。

// ... existing code ...
public UpdateBuilder set(Map<String, Object> updates) {
    appendWithSpace("SET");
    appendWithSpace(updates.keySet().stream()
            .map(key -> key + " = ?")
            .collect(joining(", ")));
    return this;
}
// ... existing code ...
  • set 方法用于指定要更新的列和值。
  • where, and, or 方法用于添加更新条件。
DeleteBuilder.java

这个类继承自 SqlBuilder,用于构建 DELETE 语句。

// ... existing code ...
public DeleteBuilder where(String condition) {
    appendWithSpace("WHERE");
    appendWithSpace(condition);
    return this;
}
// ... existing code ...
  • where, and, or 方法用于添加删除条件。

完整工程链接(无需积分直接下)

最简持久层工具类

相关文章:

  • 【CF记录】贪心——A. Scrambled Scrabble
  • 计算机毕业设计SpringBoot+Vue.js教师工作量管理系统(源码+文档+PPT+讲解)
  • PHP之变量
  • 前端模拟数据调试的方法
  • io学习----->文件io
  • 什么是索引下推?
  • 机器视觉开发教程——封装Halcon通用模板匹配工具【含免费教程源码】
  • java 查找两个集合的交集部分数据
  • K8s 1.27.1 实战系列(一)准备工作
  • 【零基础到精通Java合集】第二十九集:SQL常用优化手段
  • 双链路提升网络传输的可靠性扩展可用带宽
  • 【Oracle学习笔记】1.数据库组成对象
  • 前端开发10大框架深度解析
  • 前端基础之组件
  • CentOS 7 安装 Redis6.2.6
  • Docker的常用镜像
  • Linxu几种登陆方式介绍
  • 基于SSM+MySQL的二手书籍交易系统
  • 【零基础到精通Java合集】第二十集:Java内存模型-堆、栈、方法区
  • 【AI Guide】AI面试攻略只用看这一篇就够了!力争做全网最全的AI面试攻略——大模型(四十五)模型评估
  • 网站建设预算/郑州网站排名优化公司
  • 学做ppt的网站有哪些内容/seo案例分享
  • 邢台织梦模板建站/台州百度推广优化
  • dw制作个人网站的具体步骤/东莞网站建设优化技术
  • 做自媒体有哪些网站/天津外贸seo推广
  • 短视频制作软件app/搜索引擎关键词seo优化公司