获取泛型map工具类
一个人如果抛弃他忠实的朋友,就等于抛弃他最珍贵的声明。——索福克勒斯 代码如下: 1234567891011121314151617181920212223242526public static Map<String, Type> getGenericMap(Type paramType) { Type type = resolveType(paramType); if (type instanceof ParameterizedTypeImpl) { ParameterizedTypeImpl ty = (ParameterizedTypeImpl) type; final Class<?> rawType = ty.getRawType(); return Steam.of(rawType.getTypeParameters()).map(Type::getTypeName) .zip(Steam.of(ty.getActualTypeArgum...
低仿lusaxweb鼠标
幸福的婚姻生活,往往会被卑鄙的勾当、阴险的猜忌所破坏。——莎士比亚 这是 http://lusaxweb.net/ 它的鼠标很有意思,是一个圈,能够反色,我们低仿一个 代码如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263<!DOCTYPE html><html><head> <style> * { margin: 0; padding: 0; cursor: none; } .img { height: 80vh; width: 80vw; overflow: hidden; } .img:ho...
promise转await时小技巧
正如自然忌讳真空一样,人类是讨厌平等的。——《我是猫》 又是一个从技术推文找到的小技巧 此处将Promise函数传入,通过解构,获取到响应成功结果以及错误结果两个变量,语法简洁且便利
如何关掉Parsed mapper file日志打印
时间一直走,没有尽头,只有路口。——《摆渡人》 先说结论: 将yml配置里的mybatis-plus配置 1log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 改为 1log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl 在yml配置里新增一条 1234logging: level: root: DEBUG com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean: INFO 完整配置放在最后结尾处 为什么这样配?你是如何找到的? 首先我们搜索Parsed mapper file(因为这个日志大概率是硬编码存在于源码之中的,除非是做了日志本地化,会在配置文件里) 这里排除掉一个纯依赖模块,一个注解模块,挨个到com包搜索,在最后一个extension模块搜到了 那我们将这个类的日志级别设为INFO应该就搞定了,但是没有生效 我们打个断点,看看什么情况,等断点停到...
开源ocr库tesseract
强者容易坚强,正如弱者容易软弱。——爱默生 分享一个开源的OCR库 文档链接:https://tesseract-ocr.github.io/ 源码地址:https://github.com/tesseract-ocr/tesseract 其包含了多种编程语言
order by field
勿以己才而笑不才——房玄龄 分享一个函数field 首先在mysql内置函数的文档地址能找到这个函数: https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html 这里告诉我们,这个函数可以这么用,寻找第一个参数所在的下标位置,找不到为0: 1234mysql> SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 2mysql> SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 0 因为此处支持传入表字段 然后我们可以在查询时使用ORDER BY FIELD(字段,已存在的排好序的字段值)
idea debug小技巧
同道者相爱,同艺者相嫉——庚桑子 分享一个idea的debug小技巧 一般我们可以在断点停下时,按下ALT+F8即可打开Evaluate窗口执行表达式 但我们还可以直接按下ALT,将鼠标移动到需要执行的代码片段(会出现一个黄框) 点一下即可执行
Comparable泛型踩坑
善疑人者,人亦疑之;善防人者,人亦防之。——刘基 之前写的Comparable解决泛型限定问题 遇到了这种情况: 这是因为LocalDate没有实现Comparable<LocalDate> 而是由其实现的接口ChronoLocalDate去继承的Comparable<ChronoLocalDate> 并且LocalDate去实现的Serializable,而不是ChronoLocalDate 我们这里直接用的T extends Comparable<T>,此处传了LocalDate就是extends Comparable<LocalDate> 和实现Serializable的不是同一层级,所以我们需要指定为Comparable<? super T>,这个意思就是说允许Comparable里的类型是它的父类或者接口,具体super和extends区别可以看泛型的super和extends 改成Comparable<? super T>后,编译通过
realm.io
千万不要与同一个敌人交战过频,否则,他会把你的战术都学会的。——爱默生 分享一个数据库:https://realm.io/ java版本的github:https://github.com/realm/realm-java 这是一个旨在取代Core Data和SQLite的高性能移动数据库
CompletableFuture事务处理
男人的盟誓是女人的陷阱——莎士比亚 使用CompletableFuture进行异步任务编排时,可能会有事务的支持需求,我们这里可以使用之前我写的手动回滚、提交事务进行处理 代码案例如下,所用框架stream-query: 首先是不加事务的 123456789101112131415161718192021222324252627282930313233package io.github.vampireachao.stream.plugin.mybatisplus;import io.github.vampireachao.stream.plugin.mybatisplus.pojo.po.UserInfo;import org.junit.jupiter.api.Assertions;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringB...
