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()));
相关推荐
eLIN TECE6 分钟前
Go基础之环境搭建
开发语言·后端·golang
念何架构之路7 分钟前
Go反射应用技巧
开发语言·后端·golang
shjita8 分钟前
java根据键值对中值的大小进行排序的手法。
java·开发语言·servlet
Rabitebla27 分钟前
vector 的骨架:三根指针、模板陷阱与迭代器失效的第一现场
开发语言·数据结构·c++·算法
时空系28 分钟前
第7篇:功能——打造你的工具箱 Rust中文编程
开发语言·网络·rust
薪火铺子28 分钟前
Spring Security 6.x 实战指南
java·后端·spring
csbysj202036 分钟前
CSS !important:深度解析与最佳实践
开发语言
善恶怪客40 分钟前
Java-数据类型
java
初心未改HD41 分钟前
Go语言测试与Benchmark:测试驱动开发的实践指南
开发语言·golang
学习3人组1 小时前
Mes全连路架构图
java·erp