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()));
相关推荐
handsome_sai5 小时前
【Java 线程池】记录
java
咖啡の猫5 小时前
Python字典推导式
开发语言·python
大学生资源网5 小时前
基于springboot的唐史文化管理系统的设计与实现源码(java毕业设计源码+文档)
java·spring boot·课程设计
leiming66 小时前
C++ vector容器
开发语言·c++·算法
guslegend6 小时前
SpringSecurity源码剖析
java
SystickInt6 小时前
C语言 strcpy和memcpy 异同/区别
c语言·开发语言
CS Beginner6 小时前
【C语言】windows下编译mingw版本的glew库
c语言·开发语言·windows
FJW0208146 小时前
Python_work4
开发语言·python
roman_日积跬步-终至千里6 小时前
【人工智能导论】02-搜索-高级搜索策略探索篇:从约束满足到博弈搜索
java·前端·人工智能
大学生资源网7 小时前
java毕业设计之儿童福利院管理系统的设计与实现(源码+)
java·开发语言·spring boot·mysql·毕业设计·源码·课程设计