# dlz-spring
**Repository Path**: dk1983/dlz-spring
## Basic Information
- **Project Name**: dlz-spring
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-27
- **Last Updated**: 2026-04-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# DLZ.Spring - Spring 增强工具集
[](https://github.com/yourusername/dlz.spring)
[](https://www.oracle.com/java/)
[](https://spring.io/projects/spring-boot)
**一个让 Spring 开发更简单、更高效的工具集**
**代码量减少 85% | 开发效率提升 5 倍 | 深层穿透 | 自动类型转换**
[快速开始](#快速开始) | [核心功能](#核心功能与亮点) | [文档导航](#文档导航) | [性能对比](#性能对比)
---
## 🌟 核心卖点
### ⚡ 代码量减少 85%
```java
// 传统方式:20+ 行代码
// DLZ.Spring:3 行代码
JSONMap response = new JSONMap(HttpEnum.POST.send(url, params));
String orderId = response.getStr("data.order.orderId");
```
### 🎯 深层穿透,一步到位
```java
// 无需层层判空,直接访问深层数据
String orderId = response.getStr("data.order.orderId");
String city = response.getStr("data.user.profile.address.city");
```
### 🔄 自动类型转换
```java
// "123" → Integer 123
// "true" → Boolean true
// "99.9" → Double 99.9
Integer age = response.getInt("age");
```
### 🛡️ 空值安全
```java
// 路径不存在返回 null,不抛 NPE
String nickname = response.getStr("data.user.nickname");
```
### 📦 数组访问(支持负索引)
```java
String firstTag = response.getStr("tags[0]"); // 第一个
String lastTag = response.getStr("tags[-1]"); // 最后一个
```
---
## 📖 项目简介
DLZ.Spring 是一个基于 Spring Boot 的增强工具集,提供 HTTP 客户端、Redis 操作、缓存管理、树形结构处理等常用功能,旨在简化 Spring 应用开发,提升开发效率。
### 🎯 为什么选择 DLZ.Spring?
#### 传统方式的痛点
```java
// ❌ 调用第三方 API,需要 20+ 行代码
String response = restTemplate.postForObject(url, request, String.class);
Map map = JSON.parseObject(response);
Integer code = (Integer) map.get("code");
if (code == null || code != 0) {
throw new Exception("请求失败");
}
String orderId = null;
if (map.containsKey("data")) {
Map data = (Map) map.get("data");
if (data != null && data.containsKey("order")) {
Map order = (Map) data.get("order");
if (order != null) {
orderId = (String) order.get("orderId");
}
}
}
// 层层判空,代码冗长,容易出错
```
#### DLZ.Spring 的方式
```java
// ✅ 只需 3 行代码,代码量减少 85%
JSONMap response = new JSONMap(HttpEnum.POST.send(url, params));
if (response.getInt("code") != 0) throw new Exception("请求失败");
String orderId = response.getStr("data.order.orderId"); // 深层穿透,一步到位
```
### 核心理念
- **极致效率** - 代码量减少 85%,开发效率提升 5 倍
- **优雅设计** - 深层穿透、自动类型转换、空值安全
- **功能完善** - HTTP、Redis、缓存、树形结构、加密等常用场景
- **完美组合** - HttpUtil + JSONMap 黄金组合,一个模式解决 80% 的场景
---
## ✨ 核心功能与亮点
### 1️⃣ HttpUtil + JSONMap 黄金组合(最大卖点)
**代码量减少 85%,开发效率提升 5 倍**
#### 亮点 1:深层穿透,一步到位
```java
// ❌ 传统方式:层层判空,20+ 行代码
Map data = (Map) map.get("data");
if (data != null && data.containsKey("order")) {
Map order = (Map) data.get("order");
if (order != null) {
orderId = (String) order.get("orderId");
}
}
// ✅ DLZ.Spring:深层穿透,1 行代码
String orderId = response.getStr("data.order.orderId");
```
#### 亮点 2:自动类型转换
```java
// API 返回的数据类型混乱
{
"age": "25", // 字符串
"price": "99.9", // 字符串
"active": "true", // 字符串
"count": 3.0 // 浮点数
}
// ✅ 自动类型转换,无需手动处理
Integer age = response.getInt("age"); // "25" → 25
Double price = response.getDouble("price"); // "99.9" → 99.9
Boolean active = response.getBoolean("active"); // "true" → true
Integer count = response.getInt("count"); // 3.0 → 3
```
#### 亮点 3:数组访问(支持负索引)
```java
// 访问数组元素
String firstTag = response.getStr("tags[0]"); // 第一个
String lastTag = response.getStr("tags[-1]"); // 最后一个(负索引)
```
#### 亮点 4:空值安全
```java
// 路径不存在返回 null,不抛 NPE
String nickname = response.getStr("data.user.nickname"); // 安全
String nickname = response.getStr("data.user.nickname", "匿名"); // 带默认值
```
**核心特性**:
- ⚡ 代码量减少 85%
- 🎯 深层穿透:`data.order.orderId` 一步到位
- 🔄 自动类型转换:`"123"` → `Integer 123`
- 🛡️ 空值安全:路径不存在返回 null
- 📦 数组访问:支持 `arr[0]` 和 `arr[-1]`
- 🔗 支持 GET/POST/PUT/DELETE 等方法
- 📄 支持 Form/JSON/Text 多种数据格式
### 2️⃣ Redis 对象自动序列化(开发效率提升)
**无需手动序列化,一行代码搞定对象缓存**
```java
// ❌ 传统方式:需要手动序列化
String json = JSON.toJSONString(user);
redisTemplate.opsForValue().set("user:1", json);
String cached = redisTemplate.opsForValue().get("user:1");
User user = JSON.parseObject(cached, User.class);
// ✅ DLZ.Spring:自动序列化
User user = new User("张三", 25);
RedisUtil.setObj("user:1", user, 3600);
User cached = RedisUtil.getObj("user:1", User.class);
```
**核心特性**:
- ⚡ 对象自动序列化为 JSON
- 🔄 取出时自动反序列化
- 🛡️ 类型安全
- 🔗 完整的数据结构支持:String、Hash、List、Set
- 🏊 连接池管理,线程安全
**其他操作**:
```java
// 字符串
RedisUtil.set("key", "value", 3600); // 带过期时间
String value = RedisUtil.get("key");
// Hash
RedisUtil.hset("user:1", "name", "张三");
String name = RedisUtil.hget("user:1", "name");
// List
RedisUtil.lpush("list", "value1", "value2");
List list = RedisUtil.lrange("list", 0, -1);
// Set
RedisUtil.sadd("set", "member1", "member2");
Set members = RedisUtil.smembers("set");
```
### 3️⃣ 注解式缓存管理(AOP 增强)
**方法结果自动缓存,更新时自动清除**
```java
@Service
public class UserService {
// 自动缓存方法结果
@CacheAnno(key = "user:#{userId}", ttl = 3600)
public User getUserById(Long userId) {
return userMapper.selectById(userId);
}
// 更新时自动清除缓存
@CacheEvictAnno(key = "user:#{user.id}")
public void updateUser(User user) {
userMapper.updateById(user);
}
}
```
**核心特性**:
- ⚡ 注解式缓存,无需手动管理
- 🔄 自动清除缓存
- 🎯 灵活的 Key 生成:支持 SpEL 表达式
- 🏗️ 多级缓存支持:Ehcache、Redis 可选
- 🔧 可自定义 KeyMaker
### 4️⃣ 树形结构一键转换(算法优化)
**一行代码搞定树形结构,支持任意多级**
```java
// ❌ 传统方式:需要递归函数,20+ 行代码
public List