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

打印 上一主题 下一主题

主题 1001|帖子 1001|积分 3005

计划概述

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

     工程结构


代码说明

DbUtils.java

这个类是一个工具类,实现了 ApplicationContextAware 接口,用于获取 Spring 应用上下文。它提供了一系列静态方法,用于实行插入、更新、删除和查询操作。这些方法支持两种参数范例:可变参数数组和 Map。
  1. import org.springframework.beans.BeansException;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.ApplicationContextAware;
  4. import org.springframework.jdbc.core.JdbcTemplate;
  5. import org.springframework.jdbc.core.RowMapper;
  6. import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
  7. import org.springframework.stereotype.Component;
  8. import java.util.List;
  9. import java.util.Map;
  10. @Component
  11. public class DbUtils implements ApplicationContextAware {
  12.     private static ApplicationContext context;
  13.     @Override
  14.     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  15.         context = applicationContext;
  16.     }
  17.     private static JdbcTemplate getJdbcTemplate() {
  18.         return context.getBean(JdbcTemplate.class);
  19.     }
  20.     private static NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
  21.         return new NamedParameterJdbcTemplate(getJdbcTemplate());
  22.     }
  23.     // 插入数据
  24.     public static void insert(String sql, Object... args) {
  25.         getJdbcTemplate().update(sql, args);
  26.     }
  27.     // 更新数据
  28.     public static void update(String sql, Object... args) {
  29.         getJdbcTemplate().update(sql, args);
  30.     }
  31.     // 删除数据
  32.     public static void delete(String sql, Object... args) {
  33.         getJdbcTemplate().update(sql, args);
  34.     }
  35.     // 查询单个对象
  36.     public static <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args) {
  37.         return getJdbcTemplate().queryForObject(sql, rowMapper, args);
  38.     }
  39.     // 查询多个对象
  40.     public static <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args) {
  41.         return getJdbcTemplate().query(sql, rowMapper, args);
  42.     }
  43.     // 插入数据
  44.     public static void insert(String sql, Map<String, Object> params) {
  45.         getNamedParameterJdbcTemplate().update(sql, params);
  46.     }
  47.     // 更新数据
  48.     public static void update(String sql, Map<String, Object> params) {
  49.         getNamedParameterJdbcTemplate().update(sql, params);
  50.     }
  51.     // 删除数据
  52.     public static void delete(String sql, Map<String, Object> params) {
  53.         getNamedParameterJdbcTemplate().update(sql, params);
  54.     }
  55.     // 查询单个对象
  56.     public static Map<String, Object> queryForObject(String sql, Map<String, Object> params) {
  57.         return getNamedParameterJdbcTemplate().queryForMap(sql, params);
  58.     }
  59.     // 查询多个对象
  60.     public static List<Map<String, Object>> query(String sql, Map<String, Object> params) {
  61.         return getNamedParameterJdbcTemplate().queryForList(sql, params);
  62.     }
  63. }
复制代码


  • getJdbcTemplate() 和 getNamedParameterJdbcTemplate() 方法用于获取 JdbcTemplate 和 NamedParameterJdbcTemplate 实例。
  • insert, update, delete 方法用于实行相应的数据库操作。
  • queryForObject 和 query 方法用于查询单个对象和多个对象。
sql 子文件夹

SqlBuilder.java

这是一个抽象类,用于构建 SQL 语句。它包罗一个 StringBuilder 对象,用于拼接 SQL 语句的各个部分。
  1. // ... existing code ...
  2. protected void append(String part) {
  3.     sql.append(part);
  4. }
  5. // ... existing code ...
复制代码


  • append 方法用于直接拼接字符串。
  • appendWithSpace 方法用于在拼接字符串之前添加一个空格。
  • build 方法是一个抽象方法,由子类实现,用于返回最终的 SQL 语句。
SelectBuilder.java

这个类继承自 SqlBuilder,用于构建 SELECT 语句。
  1. // ... existing code ...
  2. public SelectBuilder columns(String... columns) {
  3.     appendWithSpace(String.join(", ", columns));
  4.     return this;
  5. }
  6. // ... existing code ...
复制代码


  • columns 方法用于指定要查询的列。
  • from 方法用于指定查询的表。
  • where, and, or 方法用于添加查询条件。
  • limit 方法用于限制查询效果的数量。
InsertBuilder.java

这个类继承自 SqlBuilder,用于构建 INSERT 语句。
  1. // ... existing code ...
  2. public InsertBuilder columns(String... columns) {
  3.     appendWithSpace("(");
  4.     appendWithSpace(String.join(", ", columns));
  5.     append(")");
  6.     return this;
  7. }
  8. // ... existing code ...
复制代码


  • columns 方法用于指定要插入的列。
  • values 方法用于指定要插入的值。支持 List 和 Map 两种参数范例。
UpdateBuilder.java

这个类继承自 SqlBuilder,用于构建 UPDATE 语句。
  1. // ... existing code ...
  2. public UpdateBuilder set(Map<String, Object> updates) {
  3.     appendWithSpace("SET");
  4.     appendWithSpace(updates.keySet().stream()
  5.             .map(key -> key + " = ?")
  6.             .collect(joining(", ")));
  7.     return this;
  8. }
  9. // ... existing code ...
复制代码


  • set 方法用于指定要更新的列和值。
  • where, and, or 方法用于添加更新条件。
DeleteBuilder.java

这个类继承自 SqlBuilder,用于构建 DELETE 语句。
  1. // ... existing code ...
  2. public DeleteBuilder where(String condition) {
  3.     appendWithSpace("WHERE");
  4.     appendWithSpace(condition);
  5.     return this;
  6. }
  7. // ... existing code ...
复制代码


  • where, and, or 方法用于添加删除条件。
完整工程链接(无需积分直接下)

最简持久层工具类

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南七星之家

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表