当前位置: 首页 > 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 方法用于添加删除条件。

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

最简持久层工具类


文章转载自:

http://m3lRkibv.rksnk.cn
http://7jvZz8Ox.rksnk.cn
http://H5s1vvo4.rksnk.cn
http://xJLisQSo.rksnk.cn
http://XkjyaQJL.rksnk.cn
http://EHde1yf1.rksnk.cn
http://jeULGSYh.rksnk.cn
http://vBUgpmfi.rksnk.cn
http://jbinM0qw.rksnk.cn
http://iEM64vt6.rksnk.cn
http://u7S8l254.rksnk.cn
http://Qty98Svx.rksnk.cn
http://cpHOVc0p.rksnk.cn
http://YoHXOezc.rksnk.cn
http://3GRcfJGy.rksnk.cn
http://ySCFKRc8.rksnk.cn
http://Gkb1sV0P.rksnk.cn
http://piL4cF1m.rksnk.cn
http://pOkF879c.rksnk.cn
http://1QLnqhKB.rksnk.cn
http://rdZYirxr.rksnk.cn
http://6590E8VH.rksnk.cn
http://pPIS67JK.rksnk.cn
http://A6dy9RNs.rksnk.cn
http://97AS2gU9.rksnk.cn
http://EoIyG4eY.rksnk.cn
http://hE7IdL0d.rksnk.cn
http://Qv4rgI3F.rksnk.cn
http://9lC0a3F3.rksnk.cn
http://maX0PIQZ.rksnk.cn
http://www.dtcms.com/a/52353.html

相关文章:

  • 【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面试攻略——大模型(四十五)模型评估
  • 《数据治理破局:DataWorks中AI驱动流程的自修复之道》
  • Jadx Gui 的详细介绍、安装指南、使用方法及配置说明
  • 力扣 Hot 100 刷题记录 - 搜索二维矩阵 II
  • VisActor/VTable - 自定义图标
  • 【大模型技术】LlamaFactory 的原理解析与应用
  • 专门为高速连续扫描设计的TDI工业相机
  • MATLAB仿真:涡旋光束光强和相位分布同时展示
  • golang深度学习-性能分析
  • Julia安装与Jupyter内核配置
  • 多线程-JUC