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()));
相关推荐
AI_56781 小时前
MES+物联网传感器重塑设备管理体系
开发语言·php
o***74171 小时前
新手如何快速搭建一个Springboot项目
java·spring boot·后端
杀死那个蝈坦1 小时前
Redis 多级缓存:架构设计、核心问题与落地实践
开发语言·spring·青少年编程·golang·kotlin·maven·lua
R***z1011 小时前
Spring Boot中使用Server-Sent Events (SSE) 实现实时数据推送教程
java·spring boot·后端
扶苏-su1 小时前
Java---Map 接口
java·开发语言
qq_266348731 小时前
aspose处理模板,并去掉水印 jdk17
java·开发语言
繁华似锦respect1 小时前
C++ 设计模式之单例模式详细介绍
服务器·开发语言·c++·windows·visualstudio·单例模式·设计模式
小年糕是糕手1 小时前
【C++】类和对象(三) -- 拷贝构造函数、赋值运算符重载
开发语言·c++·程序人生·考研·github·个人开发·改行学it