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()));
相关推荐
阿屿25 分钟前
从零手搓 AI 伴侣(二):好感度通胀危机,与它的「货币政策」
java·人工智能
灿飞32 分钟前
Kotlin与Java虚拟机十一:类与属性:构造顺序、backing field 与显式 backing field
java·后端·kotlin
aiks_yuan35 分钟前
40亿个QQ号 1G内存怎么去重:Java BitSet 装不下,long 数组位图 512MB 实测 46 秒(JDK 17)
java
ShineWinsu1 小时前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
文丑颜不良啊1 小时前
LeetCode2521~2540题目解析
java·leetcode
杨凯凡1 小时前
Spring Framework 7 HTTP Interface 实战:声明式 RestClient、超时与测试
java·spring·http
吴名氏.1 小时前
Java转AI Agent教程(第十二周)检索与切分
java·开发语言·人工智能·ai·ai agent
瑞雪兆丰年兮2 小时前
JavaWeb-day10-SpringBootWeb案例
java·开发语言·javaweb·web
Elastic 中国社区官方博客2 小时前
更少的位数,相同的召回率:DiskBBQ 更保守的自动校准扫描
大数据·运维·开发语言·人工智能·elasticsearch·搜索引擎
Rain的Java大神之路2 小时前
你背的Spring答案,全是5.x时代的:7.0.8源码一翻,80%的博客都过时了
java·后端·面试