https://www.wolai.com/jfjyU1aMeRMqVEUe5KxWgF
http://localhost:8000/swagger-ui.html
把borrowerVO赋值到borrower
BeanUtils.copyProperties(borrowerVO,borrower);
分页
IPage<Borrower> borrowerPage = new Page<>();
//当前页
borrowerPage.setCurrent(page);
//每页条数
borrowerPage.setSize(limit);
// 模糊查询条件
QueryWrapper<Borrower> borrowerQueryWrapper = new QueryWrapper<>();
borrowerQueryWrapper.like(!StringUtils.isEmpty(keyword),"name",keyword)
.or()
.like(!StringUtils.isEmpty(keyword),"mobile",keyword)
.or()
.like(!StringUtils.isEmpty(keyword),"id_card",keyword);
//执行
IPage<Borrower> borrowerIPage = baseMapper.selectPage(borrowerPage, borrowerQueryWrapper);
//字符串精确
BigDecimal bigDecimal = new BigDecimal("0");
X除以100
X.divide(new BigDecimal("100"))
转long
Long.parseLong(userId)
但是MySQL数据库是没有Boolean类型的,
也就是说 mysql把boolean=tinyInt(1) 了。
MYSQL保存boolean值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1)。
不传is_字段默认为0
所以,知道是去除is前缀的就可以,我们MySQL不使用这个属性
————————————————
版权声明:本文为CSDN博主「一天不写代码难受」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/python113/article/details/118515172
时间 睡眠一秒
TimeUnit.SECONDS.sleep(1);
运行时异常抛出
// 如果实际开发时我们无法声明抛出异常,但是又不想掩盖问题
// 那么就可以把当前捕获的异常对象封装为一个运行时异常抛出
throw new RuntimeException(e);
原子类方法
private AtomicInteger number = new AtomicInteger(0);
//++
number.incrementAndGet();
UUID
//转化 大写 小写
String key = UUID.randomUUID().toString().substring(0, 5).toUpperCase();
String value = UUID.randomUUID().toString().substring(0,5).toLowerCase();
comparable和comparator
java.lang.comparable
comparable 用于比较两个对象的大小,对于引用数据类型(自然排序)
int result=s1.comparaTo(s2)
s1>s2 返回1
s1=s2 返回0
s1<s2 返回-1
java.util.comparator
comparator 用于比较两个对象的比较器 (定制排序)
public class ddd {
public static void main(String[] args) {
String s1="1";
String s2="1";
int i = s1.compareTo(s2);
System.out.println(i);
System.out.println("------------------");
StudentComparator studentComparator = new StudentComparator();
int compare = studentComparator.compare(s1, s2);
System.out.println(compare);
}
}
class StudentComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
String s1 = (String) o1;
String s2 = (String) o2;
int i = s1.compareTo(s2);
return i;
}
}
取字符串常量池
lockKey.intern()
忽略属性不识别 实体类上加
@JsonIgnoreProperties(ignoreUnknown = true)
操作redis缓存
//redisTemplate需要设置数据类型序列化。工具类
//查数据 对string类型操作
redisTemplate.opsForValue().get(cacheKey);
//存数据 参数:缓存key 数据库中数据 过期时间 时间单位
redisTemplate.opsForValue().set(cacheKey, skuInfoDb, RedisConst.SKUKEY_TIMEOUT, TimeUnit.SECONDS);
//存数据 对hash类型操作 kfv
redisTemplate.opsForHash().put(userCartKey,skuId.toString(),existCartInfo);
//存数据 对hash类型操作 k-fv
redisTemplate.boundHashOps(userCartKey).put(skuId.toString(),existCartInfo);
//查小key
redisTemplate.boundHashOps("HashKey").keys();
//查value
redisTemplate.boundHashOps("HashKey").values();
//expire 设置到期时间
redisTemplate.expire(userCartKey,RedisConst.USER_CART_EXPIRE, TimeUnit.SECONDS);
//判断在userCartKey中有无skuId.toString()
redisTemplate.boundHashOps(userCartKey).hasKey(skuId.toString())
利用redis的setnx命令分布式锁
//参数 setnx的key value 过期时间 单位
redisTemplate.opsForValue().setIfAbsent(lockKey, token,30, TimeUnit.MINUTES);
加redisson分布式同步锁
//redissonClient 需要设置SSL连接。工具类
//获取锁
RLock lock = redissonClient.getLock(lockKey);
//加锁
lock.lock();
//释放锁
lock.unlock();
以流的形式对集合进行遍历 (无返回值)
productList.stream().forEach((product)->{
System.out.println(product);
});
以流的形式对商品进行分类 (有返回值)
productList.stream().collect(Collectors.groupingBy(Product::getCategory));
以流的形式遍历同时转为大写 (有返回值)
遍历然后做一些处理收集成一个集合
ArrayList<String> characterList = Lists.newArrayList("a", "b", "c", "d");
List<String> collect = characterList.stream().map(character -> {
return character.toUpperCase();//到此结果为stream类型,所以需要转为list
}).collect(Collectors.toList()); //collect转化为list
System.out.println(collect);
@SneakyThrows
//将当前方法抛出的异常,包装成RuntimeException,骗过编译器,使得调用点可以不用显示处理异常信息
@SneakyThrows
split用法
1.最普通的用法
String str1 = "aa,bb";
String[] split1 = str1.split(",");
System.out.println(split1.length);
//这个结果是2,都知道的
获取request的Parameter 两种方法
@RequestParam String originalUrl
String originalUrl = request.getParameter("originalUrl");
indexOf方法
// 返回指定 子字符串filterWhite 在此 字符串path 中第一个匹配项的索引。如果没有匹配项,则返回-1。
if (path.indexOf(filterWhite)!=-1){}
对象属性赋值 copy
//把parentOrderInfo对象的属性 传给childOrderInfo
BeanUtils.copyProperties(parentOrderInfo,childOrderInfo);
ifnull
ifnull(e1,e2) e1为null返回e2 e1不为null返回e1
SQL行锁 sql后面加
for update
字符串用gson转list集合
Gson gson = new Gson();
List<PurchaseListGoods> purchaseListGoods = gson.fromJson(purchaseListGoodsStr, new TypeToken<List<PurchaseListGoods>>(){}.getType());
ServerHttpRequest request
List<String> hederValueList = request.getHeaders().get("token");
HttpServletRequest request
String userId = request.getHeader("userId");
request参数丢失问题 网关中解决
//4.把用户信息userId 保存到header中传给shop-web那边的request mutate变化
if(!StringUtils.isEmpty(userId)||!StringUtils.isEmpty(userTempId)){
if (!StringUtils.isEmpty(userId)){
request.mutate().header("userId",userId).build();
}
if (!StringUtils.isEmpty(userTempId)){
request.mutate().header("userTempId",userTempId).build();
}
//放开拦截器 让下游继续执行(传递了参数)
return chain.filter(exchange.mutate().request(request).build());
}
openfeign远程调用参数丢失问题 创建远程调用拦截器
package com.atguigu.interceptor;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
* 解决openfeign远程调用 丢失参数问题
* 用来对发起feign请求的拦截器
* 在这里我们用它来把一个微服务的(用户id信息)传给另一个微服务
*/
@Component
public class FeignInterceptor implements RequestInterceptor {
public void apply(RequestTemplate requestTemplate){
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(requestAttributes!=null){
HttpServletRequest request = requestAttributes.getRequest();
requestTemplate.header("userTempId", request.getHeader("userTempId"));
requestTemplate.header("userId", request.getHeader("userId"));
}
}
}