JAVA日常开发技术点总结

技术点:

一、redisTemplate的使用

二、redsiTemplate 分布式锁工具类

三、JAVA list 使用 stream的操作获取列表元素最大值

四、使用 Wrappers.lambdaUpdate数据库逻辑删除

一、redisTemplate

redis模版对象

springboot中通过

@Resource

private RedisTemplate<String, Object> redisTemplate;

进行注入使用

以redis分布式锁工具类为例

public class RedisLockUtils {

@Resource

private static RedisTemplate<String, Object> redisTemplate;

/**

* lockKey 锁 key

* value 身份标识(保证锁不会被其他人释放)

* expireTime 锁的有效时间

**/

public static Boolean lock(String lockKey, String value, long expireTime) {

try {

return redisTemplate.opsForValue().setIfAbsent(lockKey, value, expireTime, TimeUnit.SECONDS);

} catch (Exception e) {

throw new TrmException("redis获取分布式锁异常");

}

}

/**

* key 锁的key

* value 身份标识

* return 成功返回true 失败返回false

**/

public static Boolean unlock(String key, String value) {

// 获取当前锁的拥有者

Object currentValue = redisTemplate.opsForValue().get(key);

Boolean result = false;

// 判断value是否为锁的拥有者

if (StringUtils.isNotEmpty(String.valueOf(currentValue)) && currentValue.equals(value)) {

//删除锁

result = redisTemplate.opsForValue().getOperations().delete(key);

}

return result;

}

}

java 复制代码
import java.util.concurrent.TimeUnit;

import javax.annotation.Resource;

import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;

import cn.ctg.mobileApproval.exception.TrmException;

public class RedisLockUtils {
	@Resource
	private static  RedisTemplate<String, Object> redisTemplate;
	
 
	
	/**
	* lockKey 锁 key
	* value 身份标识(保证锁不会被其他人释放)
	* expireTime 锁的有效时间
	**/
	public static Boolean lock(String lockKey, String value, long expireTime) {
		try {
			return redisTemplate.opsForValue().setIfAbsent(lockKey, value, expireTime, TimeUnit.SECONDS);
		} catch (Exception e) {
			 throw new TrmException("redis获取分布式锁异常");
			 
		}
	}	
	
	/**
	* key 锁的key
	* value 身份标识
	* return 成功返回true 失败返回false
	**/
	public static Boolean unlock(String key, String value) {
		// 获取当前锁的拥有者
		Object currentValue = redisTemplate.opsForValue().get(key);
		Boolean result = false;
		// 判断value是否为锁的拥有者
		if (StringUtils.isNotEmpty(String.valueOf(currentValue)) && currentValue.equals(value)) {
			//删除锁
			result = redisTemplate.opsForValue().getOperations().delete(key);
		} 
	    return result;
			
	}
}

三、JAVA list 使用 stream的操作获取列表元素最大值示例

/**

* 获取一个列表中对象的最大值

* @param list

* @return

*/

private Map<String,Object> getListMaxValue(List<PaymentListQueryResult> list) {

PaymentListQueryResult max = list.stream().max(Comparator.comparing(PaymentListQueryResult::getSwdmbtr))

.orElse(null); // 如果列表为空,返回null

if (max != null) {

Map<String,Object> map = new HashMap<String,Object>();

map.put(max.getBukrsCode(), max.getSwdmbtr());

log.info("查询支付单列表返回结果最大金额公司代码:{},申请单号:{},金额:{}",max.getBukrsCode(),max.getApno(),max.getSwdmbtr());

//审批单渠道公司代码

redisTemplate.opsForValue().set("ID_FACE_CHANNEL::" +max.getApno(), max.getBukrsCode());

return map;

} else {

return null;

}

}

java 复制代码
    /**
     * 获取一个列表中对象的最大值
     * @param list
     * @return
     */
	private Map<String,Object> getListMaxValue(List<PaymentListQueryResult> list) {

		PaymentListQueryResult max = list.stream().max(Comparator.comparing(PaymentListQueryResult::getSwdmbtr))
				.orElse(null); // 如果列表为空,返回null
		if (max != null) {
			Map<String,Object> map = new HashMap<String,Object>();
			map.put(max.getBukrsCode(), max.getSwdmbtr());
		    log.info("查询支付单列表返回结果最大金额公司代码:{},申请单号:{},金额:{}",max.getBukrsCode(),max.getApno(),max.getSwdmbtr());
			//审批单渠道公司代码
			redisTemplate.opsForValue().set("ID_FACE_CHANNEL::" +max.getApno(), max.getBukrsCode());
			return map;
		} else {
			return null;
		}

	}

四、使用 Wrappers.lambdaUpdate数据库逻辑删除

java 复制代码
 ifaceCallChannelService.update(Wrappers.lambdaUpdate(FaceCallChannel.class)
                  .set(FaceCallChannel::getDelFlag, DelFlagEnum.DELETED.getValue())
                  .eq(FaceCallChannel::getDelFlag, DelFlagEnum.NOT_DELETE.getValue()));
相关推荐
森G3 分钟前
TypeScript 基础类型
开发语言·typescript
月落归舟28 分钟前
MyBatis缓存机制
java·缓存·mybatis
huipeng92639 分钟前
企业级微服务开发实战(一):项目启动与工程化设计
java·开发语言·spring boot·spring cloud·微服务·云原生·架构
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
java实现excel导入、下载模板方法
java·开发语言·excel
眠りたいです1 小时前
现代C++:C++14中的新语言特性和库特性
c语言·开发语言·c++
段ヤシ.2 小时前
回顾Java知识点,面试题汇总Day12(持续更新)
java·mybatis
java1234_小锋2 小时前
Spring AI 2.0 开发Java Agent智能体 - MCP(模型上下文协议)
java·人工智能·spring·spring ai
seven97_top2 小时前
两小时入门Sentinel
java·sentinel
叶小鸡2 小时前
Java 篇-项目实战-AI 天机学堂(从 0 到 1)-day1
java·开发语言
bigbearxyz2 小时前
Caused by: java.net.SocketException: Connection reset问题排查
java·keepalived·proxysql