【Spring Boot 应用开发】-04-02 自动配置-数据源-手撸一个最简持久层工具类
设计概述
有时候我们不需要太重的持久层,就像要一个最简的、轻量的持久层,便于维护和扩展,代码掌握在自己手里,那么我们可以基于springboot的自动配置,快速的构建一个自己的持久层轻量框架,不说废话,直接上代码,可以根据自己的需要扩展
类图
工程结构
代码说明
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()
方法用于获取JdbcTemplate
和NamedParameterJdbcTemplate
实例。insert
,update
,delete
方法用于执行相应的数据库操作。queryForObject
和query
方法用于查询单个对象和多个对象。
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
方法用于指定要插入的值。支持List
和Map
两种参数类型。
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
方法用于添加删除条件。
完整工程链接(无需积分直接下)
最简持久层工具类