• 看谷仓项目笔记


    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);
  • 相关阅读:
    同步锁笔记
    android 编译错误
    多线程、Handler机制、ThreadLocal
    [MySQL]MySQL8.0的一些注意事项以及解决方案
    [SuperSocket2.0]SuperSocket 2.0从入门到懵逼
    mavlink协议CRC校验
    String类字节码编译查看
    iOS获取设备名称
    URL编码和解码
    iOS编译SDK自动化脚本(.framework+.a)
  • 原文地址:https://www.cnblogs.com/zhuxiang1029/p/14977033.html
Copyright © 2020-2023  润新知