# zer0q-framework
**Repository Path**: T-T33code/zer0q-framework
## Basic Information
- **Project Name**: zer0q-framework
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-06-24
- **Last Updated**: 2024-07-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 初始化
### 1. 创建基本的项目结构

### 2. 完成各层次的依赖关系
父POM:
```xml
3.8.7
UTF-8
UTF-8
1.8
3.1.1
5.3.33
1.2.20
1.21
3.0.0
2.3.3
1.4.7
2.0.43
6.5.0
2.13.0
4.1.2
2.3
0.9.1
```
```xml
org.springframework
spring-framework-bom
${spring-framework.version}
pom
import
org.springframework.boot
spring-boot-dependencies
2.5.15
pom
import
com.alibaba
druid-spring-boot-starter
${druid.version}
eu.bitwalker
UserAgentUtils
${bitwalker.version}
com.github.pagehelper
pagehelper-spring-boot-starter
${pagehelper.boot.version}
com.github.oshi
oshi-core
${oshi.version}
io.springfox
springfox-boot-starter
${swagger.version}
io.swagger
swagger-models
commons-io
commons-io
${commons.io.version}
org.apache.poi
poi-ooxml
${poi.version}
org.apache.velocity
velocity-engine-core
${velocity.version}
com.alibaba.fastjson2
fastjson2
${fastjson.version}
io.jsonwebtoken
jjwt
${jwt.version}
pro.fessional
kaptcha
${kaptcha.version}
com.weyoung
zeroq-application
1.0-SNAPSHOT
com.weyoung
zeroq-interface
1.0-SNAPSHOT
com.weyoung
zeroq-domain
1.0-SNAPSHOT
com.weyoung
zeroq-infrastructure
1.0-SNAPSHOT
```
其他;
Interface的pom.xml 引入 application
```xml
com.weyoung
zeroq-application
```
application的pom.xml引入infrastructure
```xml
com.weyoung
zeroq-infrastructure
```
infrastructure的pom.xml引入domain
```xml
com.weyoung
zeroq-domain
```
### 3. 引入springboot 的项目依赖(domain)
```xml
org.springframework.boot
spring-boot-starter-web
```
### 4. 书写启动类
```java
/**
* @author 33 meiko_ooo@163.com
* @description 启动类
* @create 2024/6/22 09:23
*/
@SpringBootApplication
public class ApplicationService {
public static void main(String[] args) {
SpringApplication.run(ApplicationService.class, args);
}
}
```
注意:启动类包的位置(SpringBoot的知识)
访问:

正常哦!!!
## Redis配置
### 1. 先构建仓储层的一个基本的结构

分别为:缓存,对象转换器,仓鼠实现,工具包
### 2. 引入Redis的依赖配置(在infrastructure)
```xml
org.springframework.boot
spring-boot-starter-data-redis
```
### 3. 在cache中新增一个类RedisCache
```java
package com.weyoung.infrastructure.cache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* @author 33 meiko_ooo@163.com
* @description Redis 常用工具类
* @create 2024/6/22 09:20
*/
@SuppressWarnings(value = { "unchecked", "rawtypes" })
@Component
public class RedisCache
{
@Autowired
public RedisTemplate redisTemplate;
/**
* 缓存基本的对象,Integer、String、实体类等
*
* @param key 缓存的键值
* @param value 缓存的值
*/
public void setCacheObject(final String key, final T value)
{
redisTemplate.opsForValue().set(key, value);
}
/**
* 缓存基本的对象,Integer、String、实体类等
*
* @param key 缓存的键值
* @param value 缓存的值
* @param timeout 时间
* @param timeUnit 时间颗粒度
*/
public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
{
redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
}
/**
* 设置有效时间
*
* @param key Redis键
* @param timeout 超时时间
* @return true=设置成功;false=设置失败
*/
public boolean expire(final String key, final long timeout)
{
return expire(key, timeout, TimeUnit.SECONDS);
}
/**
* 设置有效时间
*
* @param key Redis键
* @param timeout 超时时间
* @param unit 时间单位
* @return true=设置成功;false=设置失败
*/
public boolean expire(final String key, final long timeout, final TimeUnit unit)
{
return redisTemplate.expire(key, timeout, unit);
}
/**
* 获取有效时间
*
* @param key Redis键
* @return 有效时间
*/
public long getExpire(final String key)
{
return redisTemplate.getExpire(key);
}
/**
* 判断 key是否存在
*
* @param key 键
* @return true 存在 false不存在
*/
public Boolean hasKey(String key)
{
return redisTemplate.hasKey(key);
}
/**
* 获得缓存的基本对象。
*
* @param key 缓存键值
* @return 缓存键值对应的数据
*/
public T getCacheObject(final String key)
{
ValueOperations operation = redisTemplate.opsForValue();
return operation.get(key);
}
/**
* 删除单个对象
*
* @param key
*/
public boolean deleteObject(final String key)
{
return redisTemplate.delete(key);
}
/**
* 删除集合对象
*
* @param collection 多个对象
* @return
*/
public boolean deleteObject(final Collection collection)
{
return redisTemplate.delete(collection) > 0;
}
/**
* 缓存List数据
*
* @param key 缓存的键值
* @param dataList 待缓存的List数据
* @return 缓存的对象
*/
public long setCacheList(final String key, final List dataList)
{
Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
return count == null ? 0 : count;
}
/**
* 获得缓存的list对象
*
* @param key 缓存的键值
* @return 缓存键值对应的数据
*/
public List getCacheList(final String key)
{
return redisTemplate.opsForList().range(key, 0, -1);
}
/**
* 缓存Set
*
* @param key 缓存键值
* @param dataSet 缓存的数据
* @return 缓存数据的对象
*/
public BoundSetOperations setCacheSet(final String key, final Set dataSet)
{
BoundSetOperations setOperation = redisTemplate.boundSetOps(key);
Iterator it = dataSet.iterator();
while (it.hasNext())
{
setOperation.add(it.next());
}
return setOperation;
}
/**
* 获得缓存的set
*
* @param key
* @return
*/
public Set getCacheSet(final String key)
{
return redisTemplate.opsForSet().members(key);
}
/**
* 缓存Map
*
* @param key
* @param dataMap
*/
public void setCacheMap(final String key, final Map dataMap)
{
if (dataMap != null) {
redisTemplate.opsForHash().putAll(key, dataMap);
}
}
/**
* 获得缓存的Map
*
* @param key
* @return
*/
public Map getCacheMap(final String key)
{
return redisTemplate.opsForHash().entries(key);
}
/**
* 往Hash中存入数据
*
* @param key Redis键
* @param hKey Hash键
* @param value 值
*/
public void setCacheMapValue(final String key, final String hKey, final T value)
{
redisTemplate.opsForHash().put(key, hKey, value);
}
/**
* 获取Hash中的数据
*
* @param key Redis键
* @param hKey Hash键
* @return Hash中的对象
*/
public T getCacheMapValue(final String key, final String hKey)
{
HashOperations opsForHash = redisTemplate.opsForHash();
return opsForHash.get(key, hKey);
}
/**
* 获取多个Hash中的数据
*
* @param key Redis键
* @param hKeys Hash键集合
* @return Hash对象集合
*/
public List getMultiCacheMapValue(final String key, final Collection