//String按固定长度值MAX_LENGTH=3切割转List
private List<String> context2List(String clauseContext){
List<String> list=new ArrayList<>();
if(StrUtil.isEmpty(clauseContext)){
return list;
}
int size=clauseContext.length()/MAX_LENGTH;
int rest=clauseContext.length()%MAX_LENGTH;
if(rest>0){
size+=1;
}
System.out.println(size);
for(int i=0;i<size;i++){
String substring ="";
if(i==size-1){
substring = clauseContext.substring(i * MAX_LENGTH, clauseContext.length());
}else {
substring = clauseContext.substring(i * MAX_LENGTH, (i + 1) * MAX_LENGTH);
}
list.add(substring);
}
return list;
}
//List转Json
List<User> user= new ArrayList();
String str = JSON.toJSONString(user);
//Json 转List方法
List<User> user= JSON.parseArray(json,User.class);
//XML里模糊匹配数据库JSON字段中的对象某个属性值
and case when JSON_VALID ( tags ) then JSON_CONTAINS ( tags, JSON_OBJECT ( 'plant_no', #{plantNo} ) ) else null end
//XML里查询并合并去重某个字段用、连接
GROUP_CONCAT( DISTINCT f.plant_no SEPARATOR '、' ) as plantNo
//XML里in的写法(foreach循环遍历数组或集合)
<if test="countryCode != null and countryCode.length > 0">
AND f.country_code IN
<foreach item="code" collection="countryCode" index="index" open="(" separator="," close=")">
#{code}
</foreach>
</if>
//String转Long:
long l = Long.valueOf("123").longValue();
//根据某个实体属性去重
List<NewsTagsResponse> collect1 = n.stream().filter(distinctByKey((p) -> (p.getPlantName()))).collect(Collectors.toList());
System.out.println(collect1);
//根据多个实体属性去重
List<NewsTagsResponse> collect2 = n.stream().filter(distinctByKey((p) -> (p.getPlantName()))).filter(distinctByKey((p)-> (p.getArea()))).collect(Collectors.toList());
System.out.println(collect2);
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
System.out.println("这个函数将应用到每一个item");
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
//mysql获取JSON字段
SELECT
SUBSTR(JSON_EXTRACT( tags, "$[0].area" ) FROM 2 FOR (LENGTH( JSON_EXTRACT( tags, "$[0].area" )- 1 ))),id
FROM
t_article
WHERE
tags IS NOT NULL;
//验证字符串是否全为正整数
Pattern pattern1 = Pattern.compile("^\\+?[1-9][0-9]*$");
//验证字符串为可含4位小数的数字
Pattern pattern2 = Pattern.compile("^[0-9]+(.[0-9]{0,4})?$");
例子:g.getQty() != null && pattern1.matcher(g.getQty().toString()).matches() == false
//设置时区
spring:
# 设置时区
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
//批量修改某个值
objects.forEach( o -> {o.setMoney(BigDecimal.ZERO);});
//将对象集合中的某个属性值用";"拼接,并且自动去除null,空字符串和纯空格并且去重:
String cid = tbReceiptgs.stream().map(TbReceiptg::getCid).distinct().filter(p->p!=null&&!p.trim().equalsIgnoreCase("")).collect(Collectors.joining(";"));
//将对象集合根据某个字段排序
list = list.stream().sorted(Comparator.comparingInt(Person::getAge)).collect(toList());
//List根据某个字段求和
preSalesTaskVos=preSalesTaskVos.stream().filter(e->e.getPlanWorkTime()!=null).collect(Collectors.toList());
BigDecimal planTotalWorkTime = preSalesTaskVos.stream()
// 将user对象的age取出来map为Bigdecimal
.map(PreSalesTaskVo::getPlanWorkTime)
// 使用reduce()聚合函数,实现累加器
.reduce(BigDecimal.ZERO,BigDecimal::add);
//将对象List的某个数字类型的字段全部相加
BigDecimal reduce = refundDeductList.stream().filter(e -> e.getRefundFcy() != null).map(TbRefundDeduct::getRefundFcy).reduce(BigDecimal.ZERO, BigDecimal::add);
//实用excel注解
@Excel(name = "状态", readConverterExp = "0=正常,1=停用",dictType="sys_normal_disable")
@ApiModelProperty(value = "部门对象 SysDept")
@Excels({@Excel(name = "部门", targetAttr = "deptName", type = Type.EXPORT)})
private SysDept dept;
//List对象将某个属性作为KEY,另一个属性作为value转换成Map集合
deductMap = deductList.stream().collect(Collectors.toMap(TbRefundDeduct::getOrdcode, TbRefundDeduct::getRefundFcy));
//List对象将某个属性作为KEY,整个对象作为value转换成Map集合
Map<String, TbPaygAct> paygActMap = list.stream().collect(Collectors.toMap(TbPaygAct::getPaygId, c -> c);
//假设KEY值有重复,后面的value覆盖前面的value
list.stream().collect(Collectors.toMap(TbPaygAct::getPaygId, c -> c, (c1, c2) -> c1));
//假设KEY值有重复将前面的value 和后面的value拼接起来
list.stream().collect(Collectors.toMap(TbPaygAct::getPaygId, c -> c, (c1, c2) -> c1+","+c2));
//map转list
List<String> list = map.values().stream().collect(Collectors.toList());
//mybatis-plus设置打印执行的SQL语句在日志中
//同时修改多个表字段
alter table t_factory_access
modify COLUMN access_type VARCHAR(16) DEFAULT '' COMMENT '准入产品类型 ',
MODIFY COLUMN country_name VARCHAR(128) DEFAULT '' COMMENT '国家名称',
字段注解:
@NotNull(message = “用户不能为空”)
@Null 被注释的元素必须为null
@NotNull 被注释的元素不能为null
@AssertTrue 被注释的元素必须为true
@AssertFalse 被注释的元素必须为false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max,min) 被注释的元素的大小必须在指定的范围内。
@Digits(integer,fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式。
@Email 被注释的元素必须是电子邮件地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串必须非空
BigDecimal
加法 add()函数 减法subtract()函数 乘法multiply()函数 除法divide()函数
绝对值abs()函数
//判断BigDecimal类型数据不等于0
paygFcy.signum() != 0;
paygFcy.compareTo(BigDecimal.ZERO)!=0;
//BigDecimal除法保留2位小数,并向上进位
BigDecimal usedIcedweight = usedQty.multiply(leftNum.getIcedweight()).divide(salQty, 2, BigDecimal.ROUND_HALF_UP);
//实体类字段注解::插入数据库的时间自动生成
@TableField(fill = FieldFill.INSERT)
@TableField(fill = FieldFill.INSERT_UPDATE)
//数据库日期类型字段设置实时修改更新为当前时间(设置默认值)
CURRENT_TIMESTAMP
//抛出含变量的异常:
%d 数字
%s 字符串
例子:throw new CustomException(String.format("该采购单已做付款申请金额,所以商品明细的原币总金额必须大于 %d ",paygFcy));
//QueryWrapper同时模糊匹配两个字段写法:
queryWrapper.and(queryUpdateInformRequest.getContent()!=null,wrapper->wrapper
.like("content",queryUpdateInformRequest.getContent())
.or()
.like("content_eng",queryUpdateInformRequest.getContent()));
//分页查询写法
Page<BaseCountry> baseCountryPage = page(new Page<>(page, limit), cnQueryWrapper);
//返回空白分页数据
return PageInfo.emptyReturn();
//返回分页查询结果
return PageInfo.returnPage(baseCountryPage.getTotal(), baseCountryPage.getRecords());
//根据当前日期加10位随机数生成随机单号
String refundCode = orderCodePrefix + DateUtils.dateTimeNow() + new Random().nextInt(10);
//查询表的所有字段
Select column_name from columns Where table_name='tb_purorder'
//查询整个库的某个字段所在的表名
Select DISTINCT(TABLE_NAME) from columns Where COLUMN_NAME='production_range'
//Pattern正则表达式判断字符串
//正整数
Pattern pattern1 = Pattern.compile("^\\+?[1-9][0-9]*$");
pattern1.matcher(校验的变量.toString()).matches() == false/true
//保留4位小数的正数
Pattern pattern2 = Pattern.compile("^[0-9]+(.[0-9]{0,4})?$");
pattern2.matcher(校验的变量.toString()).matches() == false/true
//项目.yml配置
# MyBatis Plus配置
mybatis-plus:
# 搜索指定包别名
typeAliasesPackage: com.ssht.**.domain
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
# PageHelper分页插件
pagehelper:
helperDialect: mysql
supportMethodsArguments: true
params: count=countSql
# Swagger配置
swagger:
# 是否开启swagger
enabled: true
# 请求前缀
pathMapping: /dev-api
# 防止XSS攻击
xss:
# 过滤开关
enabled: true
# 排除链接(多个用逗号分隔)
excludes: /system/notice
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
//Excel表数据导入(解析数据)
public AjaxResult<TbPayg> importPaygData(MultipartFile file){
ExcelUtil<TbPayg> util = new ExcelUtil<>(TbPayg.class);
List<TbPayg> dataList = util.importExcel(file.getInputStream());
List<TbPayg> filterData = dataList.stream().filter(data -> data !=null).collect(Collectors.toList());
}
//StringBuilder的用法
//追加数据
builder.append("just");
//向指定位置插入数据
builder.insert(0, "you");
//删除指定位置的数据
builder.deleteCharAt(index);
//删除指定范围的数据左闭右开
builder.delete(beginIndex, endIndex);
//将对象中的数据以字符串的形式返回
builder.toString();
//将对象中的数据反转
builder.reverse();
//代码里获取YML配置文件中的值
//第一种@Value
@Value("${token.expireTime}")
private String expireTime;
System.out.println(expireTime);
//第二种@Autowired
@Autowired
private Environment env;
String loginType="";//自定义变量
String expireTime= env.getProperty("token.expireTime"+loginType);
System.out.println(expireTime);
实体类序列化
private static final long serialVersionUID = 1L;