看谷仓项目笔记

1.List<类> idcards= user.stream().map(User::getIdcard).collect(Collectors.toList())

效果等于for循环性能更好从某集合里循环得到id。

List<Integer> collect1 = num.stream().map(n -> n * 2).collect(Collectors.toList());

效果等于for循环,把某集合里每个内容*2。

List<String> collect =list.stream().map(String::toUpperCase).collect(Collectors.toList());

效果等于for循环,把某集合里每个内容变成大写。

2.(busiBase1 != null && busiBase1.getAgreementStatus() != null) ? busiBase1.getAgreementStatus() :0

如果你不希望得到null值,用三元表达式设置默认值

3.LocalDateTime.now()

得到当前日期时间,如 2007-12-03T10:15:30 。

DateTimeFormatter.ofPattern("yyyyMMddHHmmss")

得到日期格式转换器

4.new Random().nextInt(int n)

该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

5.DoubleUtils

提供加减乘除的方法,是自己用到BigDecimal(java.math包)写的。

6.

@PathVariable Long isId

路径传递参数。

@RequestBody Vo vo

用json传递参数,多用于类的传递

@RequestParam(value = "locationCode", required = false, defaultValue = "0") Integer locationCode

url传递参数,多用于传递单个字段。

7.实战心得

建表:建表时考虑一对一(建字段在表中),一对多(新建表,加字段),多对多(建中间表,字段为两表主键)的情况。

写接口:每个接口都是可以单独被调用的,考虑问题时要考虑被多次调用的情况。

写sql:写查询条件时要考虑到是否是必填字段,如果不是,要进行判断。

要在xml配置文件里加上

<if test="类字段名 != null">

AND 表的字段名 = #{类字段名}

</if>

8.ExcelCreateUtil包。

用到反射。A.isAnnotationPresent(B.class);意思就是:注释B是否在此A上。如果在则返回true;不在则返回false。

9.

<if test="realName != null and realName != '' " >
AND bb.real_name like CONCAT("%", #{realName} ,"%")

</if>

数据库查询字符串拼接

<if test="expectedSalary != null and expectedSalary != '' " >
<![CDATA[
AND br.expected_salary_floor <= expectedSalary
and br.expected_salary_ceil >= expectedSalary
]]>

</if>

使用这个之后,里面的<,>,=就都不会转义

create_time < DATE_ADD(#{endTime},INTERVAL 1 DAY)

日期增加一天。

<if test="corpIdList != null and corpIdList.size() > 1" >

and  first_corp_id IN
<foreach collection="corpIdList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>

</if> 

collection:指定输入对象中集合属性

item:集合中元素迭代时的别名,该参数为必选。

index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选

open:foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选

separator:元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。

close: foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。

10.

@JsonIgnore

在给页面传值的类(dto)的字段上用,那个字段就不会被传。

@ApiModelProperty(hidden = true)

swagger包下,用在字段上,其作用是在接口调用,数据返回显示时,隐藏这个字段。

Vo vo = JSON.parseObject(string, Vo.class);

把页面上传来的string赋值到Vo类里。

 11.

CASE

WHEN 字段名 = 某值 THEN

值1 ELSE 值2

end 字段名

查询显示赋值。

12.

List<Dto> dtos = new ArrayList<>();

list.forEach(m->{

Dto dto = new Dto();

BeanUtils.copyProperties(m,dto);

dtos.add(dto);

})

就是for循环

13.

DateUtil.dateSubtract(new Date(), 要减的时间)

返回一个布尔值,>0为true。

14.

 Optional.ofNullable(user.getDept()).map(DeptSmallDTO::getDeptName).orElse(null)

ofNullable,把指定的值封装为Optional对象,如果指定的值为null,则创建一个空的Optional对象。

map,如果创建的Optional中的值存在,对该值执行提供的Function函数调用。

orElse,如果创建的Optional中有值存在,则返回此值,否则返回一个默认值。

//map方法执行传入的lambda表达式参数对Optional实例的值进行修改,修改后的返回值仍然是一个Optional对象
Optional<String> stringOptional = Optional.of("zhangsan");
System.out.println(stringOptional.map(e -> e.toUpperCase()).orElse("失败"));

stringOptional = Optional.empty();
System.out.println(stringOptional.map(e -> e.toUpperCase()).orElse("失败"));

15.

(string).trim()去空格

16.批量添加

 

下拉框自动选择。(数据回显)

 

 

然后数据回显

 

boolean result = obj instanceof Class

其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。

  注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

 隐藏身份证:

    String zx="360702199610290011";
String s1 = zx.substring(0, 1);
String mid = "****************";
String s2 = zx.substring(zx.length() - 1);
String zx2 = s1 + mid + s2;
System.out.println(zx2);

```java
//手动提交事务
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);// 事物隔离级别,开启新事务
TransactionStatus status = txManager.getTransaction(def); // 获得事务状态
try {
//更新邀请数据
if(missionInvitations.size()>0){
missionInvitationMapper.updateMissionInvitations(missionInvitations,"由管理员id:"+userId+"接受");
}

//创建订单数据
if(orderBases.size()>0){
orderBaseMapper.insertList(orderBases);
}
Example example = new Example(OrderBase.class);
example.createCriteria().andEqualTo("missionId",missionBase.getId()).andIn("busiId",busiIds);
List<OrderBase> newOrderBases = orderBaseMapper.selectByExample(example);
for (OrderBase orderBase:newOrderBases) {
queue.add(orderBase.getId());
}
txManager.commit(status);
}catch (Exception e){
log.error("exception:",e);
txManager.rollback(status);
}
//使用多线程生成转包协议
if(busiIds.size()>0){
log.info("开始执行多线程,有"+queue.size()+"条数据待生成");
generateSubcontractingAgreementThread.setQueue(queue);
executorService.execute(generateSubcontractingAgreementThread);
}

```

```java
@Override
public List<BankCardVo> bankList(Long userId) {
List<BankCardVo> bankCardVoList = busiBankCardMapper.bankList(userId);
for (BankCardVo bankCardVo : bankCardVoList) {
String cardNo = accountNumber(bankCardVo.getAccountNumber());
String regex = "(.{4})";
cardNo = cardNo.replaceAll(regex, "$1 ");
bankCardVo.setAccountNumber(cardNo);
}
return bankCardVoList;
}

private String accountNumber(String accountNumber) {
if (accountNumber == null || accountNumber.length() < 5) {
return accountNumber;
}
int len = accountNumber.length();
int last = len % 4 == 0 ? 4 : len % 4;

String lastNumber = accountNumber.substring(len - last);
String per = "";
for (int i = 0; i < len - last; i++) {
per = per + "*";
}
return per + lastNumber;
}
```
------------------------------------------------------
08/12
gucangApiController
得到请求者真实的ip地址。
反射

Method Class.getMethod(String name, Class<?>... parameterTypes)的作用是获得对象所声明的公开方法

该方法的第一个参数name是要获得方法的名字,第二个参数parameterTypes是按声明顺序标识该方法形参类型。

person.getClass().getMethod("Speak", null);

//获得person对象的Speak方法,因为Speak方法没有形参,所以parameterTypes为null

person.getClass().getMethod("run", String.class);

//获得person对象的run方法,因为run方法的形参是String类型的,所以parameterTypes为String.class

007

入参,string 内容,string 企业编号

把内容转换为一个list里面存了orderbaseapidto对象。

循环他们,判断出使用那种方式出款。1,记账本。2,支付宝传统支付

sql

AND date_format(create_time,'%Y%c') = date_format(now(),'%Y%c')

Java8的流处理

List<ParkInfoDto> dtoList = null;
List<ParkBase> parkBases = parkBaseMapper.selectBatchIds(parkList);
if (CollUtil.isNotEmpty(parkBases)) {
dtoList = parkBases.stream().map(m -> {
ParkInfoDto parkInfoDto = new ParkInfoDto();
BeanUtils.copyProperties(m, parkInfoDto);
return parkInfoDto;
}).collect(Collectors.toList());
}
嵌套循环
Set<String> menus = new HashSet<>();
Set<String> points = new HashSet<>();
Set<String> apis = new HashSet<>();
QueryWrapper<UserRole> roleQueryWrapper = new QueryWrapper<>();
roleQueryWrapper.eq("user_id",userId);
userRoleMapper.selectList(roleQueryWrapper).stream().map(UserRole::getRoleId).forEach(e -> {
roleService.findPermissionIds(e).stream().forEach(p -> {
if(p.getType() == 1){
menus.add(p.getCode());
}else if(p.getType() == 2){
points.add(p.getCode());
}else if(p.getType() == 3){
apis.add(p.getCode());
}
});
});

postman调用需要参数时,可以去正式环境里找入参,进行调用。

支付的回调:

        String jsonBody = JSON.toJSONString(noticeSettlementVo);
        log.info("调用外部接口参数为:"+jsonBody);
        String body = "{"flag":"false"}";
        try {
            body = HttpRequest.post(orderGrantNotifyAddress).body(jsonBody).execute().body();
        }catch (Exception e){
            log.info(e.getMessage());
            e.printStackTrace();
        }
        log.info("调用外部接口返回值为:"+body);
原文地址:https://www.cnblogs.com/zhuxiang1029/p/14977033.html