Java程序猿搬砖笔记(十二)

@PostConstruct注解

示例代码:

@Configuration
@ComponentScan({"com.aspirecn.external.reward"})
@MapperScan("com.aspirecn.external.reward.mapper")
@Slf4j
public class ExternalRewardConfiguration {
   @PostConstruct
    private void init() {
        log.info("自动装配ExternalRewardConfiguration");
    }
}

参考链接

Mybatis的mapper-locations配置

  • 当mapper接口和mapper接口对应的配置文件在命名上相同、所在的路径相同时,则mapper-locations可以不用配置,配置也不会生效。
  • 当mapper接口和mapper接口对应的配置文件在命名上不相同、或者所在的路径不相同时,需要配置mapper-locations才能实现接口的绑定

YML文件配置参考:

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml,classpath*:com/reward/promotion/mapper/*.xml

mapper和xml对应不上会报错:

Invalid bound statement (not found): com.reward.promotion.mapper.CompanyRecordMapper.queryRecordList

@JsonFormat实现原理

参考链接

IDEA String Manipulation插件使用及设置快捷键

设置步骤演示:
1、快捷键"ALT+M" -> Switch Case -> Open Settings -> 增加"小写下划线转驼峰"操作
在这里插入图片描述
2、打开IDEA设置 -> 点击Keymap -> 搜索"小写下划线转驼峰" -> 将快捷键设置为"ALT+SHIFT+U"
在这里插入图片描述
注意:版本9以后才实现了"小写下划线snake_case"功能
参考链接

在Windows中测试服务器端口是否开放

命令语法:telnet 服务器id 服务器端口
示例命令:telnet 10.12.7.181 9098

Centos开放端口

1、开启防火墙
systemctl start firewalld
2、开放某个端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
其中zone表示作用域,参数permanent表示永久生效
3、重启防火墙
firewall-cmd --reload

Nginx常用配置详解

参考链接

Nginx里面的路径定位关键词root、alias

1、root:设置请求的根目录。是最上层目录的意思。
处理结果为:root路径+location路径
2、alias:用来更改location的路径。是目录别名的意思。
处理结果为:使用alias路径替换location路径
3、如果location路径是以/结尾,则alias也必须是以/结尾,root没有要求。
参考图片
参考链接

zuul里面的prefix 和 strip-prefix学习

1、strip-prefix
true 移除前缀 false 不移除(增加)前缀
2、strip-prefix可用于全局配置和zuul.prefix结合使用
strip-prefix可用于路由配置和zuul.routes.routeName.path结合使用

从2.8路由前缀开始看就好,前面的例子举得不太好。
参考链接

解决Mybatis嵌套的结果集不能被安全地转为自定义ResultHandler

报错信息:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Mapped Statements with nested result mappings cannot be safely used with a custom ResultHandler. Use safeResultHandlerEnabled=false setting to bypass this check.

意思:不允许自定义ResultHand处理器

解决方法:

# 增加配置:safe-result-handler-enabled: false
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  configuration:
    call-setters-on-nulls: true
    safe-result-handler-enabled: false

参考链接

Mybatis中文文档

参考链接

TortoiseGit+TortoiseGit中文语言包详细安装使用教程(windows版)

官方下载链接详细安装使用教程

Java文件类型校验之Apache Tika

Java文件类型校验之Apache TikaJava实现流和文件的转换 将InoutStream转为File输出到磁盘

Jackson解析器接收JSON实体,需要这个实体有无参构造方法,否则会报错

奖励平台动态登录时,LoginParam没有无参构造方法(@NoArgsConstructor)会报org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com…entity错误

Excel中数字变成E+的原因分析及两种解决方法

原因:
Excel中默认数字在超过11位后,就用科学计数法的显示方式。

解决方法:
方法一:单元格格式设置为数值,小数位数改为0
单元格格式设置为数值
这种方式适用于数据库导出Excel后,某些字段自动转为了科学计数法的情况。
保存时会提示格式不兼容,本质是文件的实际是TXT格式,需要另存为xlsx,设置的格式才有效果

方法二: 自定义单元格格式,类型设置为0
自定义单元格格式
这种方法适用输入的数字长度超过11位但是不超过15位,超过15位后的数字会自动变为0。

方法三:单元格格式设置为文本
这种方式数字超过15位也可以正常显示,但是做数值运算会有问题。

参考链接

Excel快速对当前列下面的空单元格填充

方法一:双击单元格右下角也可以实现快速填充,填充的范围为遇到非空值。
效果如下:
在这里插入图片描述

该方式适合整列都为空的情况。

方法二:ctrl+g快捷键实现快速填充
步骤:选中当前列 -> ctrl+g快捷键,定位 -> 点击空值 -> 输入要填充的值 -> ctrl+回车
效果如下:
在这里插入图片描述

该方式功能更强大,支持筛选后的部分空值填充。
参考链接

方法三:复制单个单元格,然后拖动进度条到最后填充
步骤:
筛选出空白单元格 -> 输入要填充的值 -> ctrl+c,复制 -> 拖动进度条到最后 -> ctrl+v粘贴
效果如下:
在这里插入图片描述

MySQL统计每分钟的记录数

原理:
利用unix_timestamp和floor函数,把秒转换成整数(取整),然后对这个整数进行分组取数量。
核心代码:

floor(unix_timestamp(record.create_time) / 60)

参考代码:

-- 按分钟统计投票次数
SELECT
    t.create_time '投票时间',count(t.id) '投票次数'
FROM
    (
        SELECT
            record.id,
            record.create_time,
            floor(
                        UNIX_TIMESTAMP(record.create_time) / 60
                ) create_timestamp
        FROM
            `t_vote_user` record
    ) AS t
group BY t.create_timestamp
ORDER BY t.create_time;

SpringBoot项目中某些Maven依赖可以不加版本号的原因

因为spring-boot-dependencies是spring-boot-starter-parent的父依赖,spring-boot-dependencies-XXX.pom中的dependencyManagement有常用依赖包的默认版本号,有助于统一版本号。
所以当在Springboot项目中引入了spring-boot-starter-parent或spring-boot-dependencies,则可以不用引入依赖包版本号。
如果非要想自己填写版本号也是可以的,这样会覆盖官方版本号(不建议随便修改依赖包版本号,免得版本号不兼容)。
参考链接

在线SQL转Java实体工具

参考链接

EasyExcel模板填充

通用导出方法:

public class ExportExcelUtil<T> {
    /**
     * 给模板填充数据导出浏览器
     *
     * @param: list
     * @param: path
     * @param: fileName
     * @return void
     * @author liquanhong
     * @date 2023/3/9/
     */
    public void exportWithTemplate(List<T> list, String path, String fileName, HttpServletResponse response) throws Exception{
        // 1、加载导入模板
        Resource resource = new ClassPathResource(path);
        // 2、设置浏览器响应信息
        String newFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        dealResponse(response,newFileName);
        // 3、开始导出
        ExcelWriter excelWriter = EasyExcel
                .write(response.getOutputStream())
                .withTemplate(resource.getInputStream())
                .build();
        WriteSheet writeSheet = EasyExcel.writerSheet(0).build();
        excelWriter.write(list, writeSheet);
        excelWriter.finish();
    }
}

参考链接参考链接官方文档

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值