@JsonAutoDetect
背叛就是脱离自己的位置,背叛,就是摆脱原位,投向未知。——米兰·昆德拉
我们在使用jackson时可能会用到这样一个注解
@JsonAutoDetect
例如我们这里一个Student类
@Data@Builder@NoArgsConstructor@AllArgsConstructor@JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY, setterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY, creatorVisibility = JsonAutoDetect.Visibility.NON_PRIVATE, fieldVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY)private static class Stud ...
mp数据源加密
不宝金玉,而忠信以为宝。——《礼记》
在开发中,我们难免可能会担心数据库账号密码泄露
我们可以使用mybatis-plus自带的数据安全保护进行加密
public static void main(String[] args) throws Throwable { // 生成 16 位随机 AES 密钥 String randomKey = AES.generateRandomKey(); // 随机密钥加密 String url = AES.encrypt("jdbc:mysql://localhost:3306/ruben?autoReconnect=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useUnicode=true&characterEncoding=utf-8&useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai&allowMultiQuer ...
mysql随机查询
明者见危于无形,智者见祸于未萌。——《三国志》
我们如果需要使用mysql进行随机取N条这样的操作
我们可以这样写
-- 2.然后查询主表,与我们的tmp_table进行INNER JOIN[内连]SELECT * FROM `film` AS main_table JOIN -- 1.取出主表主键的最大值,与RAND()相乘[RAND()生成0到1的随机数],然后使用ROUND函数取整获得一个tmp_id(SELECT ROUND(RAND() * (SELECT MAX(`film_id`) FROM `film`)) AS tmp_id) AS tmp_table-- 3.条件为主表主键大于等于tmp_table.tmp_idWHERE main_table.`film_id` >= tmp_table.tmp_id-- 4.排序,限制条数,这里的可以任选ORDER BY main_table.`film_id` LIMIT 5;
这个是我认为效率比较高的随机查询了
阿里云镜像快速构建springboot
智者弃短取长,以致其功。——《后汉书·王符传》
我们创建springboot项目时如果使用原来的https://start.spring.io构建会很慢
这里我们可以使用阿里云的脚手架地址
https://start.aliyun.com
我们照常输入项目组和名称
下一步后我们发现除了自带的starter我们还可以选阿里巴巴的
非常实用
localStorage
蚍蜉撼大树,可笑不自量。——韩愈《调张籍》
我们可以使用LocalStorage在页面上存点东西,限制是5MB
window.localStorage.setItem("ruben","Hello")
我们再取出来
window.localStorage.getItem("ruben")
如果我们要移除
window.localStorage.removeItem("ruben")
要移除全部
window.localStorage.clear()
全局日期请求转换处理
大部分人在二三十岁上就死去了,因为过了这个年龄,他们只是自己的影子,此后的余生则是在模仿自己中度过,日复一日,更机械,更装腔作势地重复他们在有生之年的所作所为,所思所想,所爱所恨。——《约翰 • 克利斯朵夫》
我们在开发中对于日期,如果是协商好,请求发送指定格式的日期字符串
我们这边再转换成对应日期格式,如果每个都一个一个来转,非常麻烦,不方便
这里介绍一种全局的mvc转换方式
使用@InitBinder注解以及Jackson2ObjectMapperBuilderCustomizer
如果我们使用application/x-www-form-urlencoded接参,则@InitBinder上场了
只需要在Controller中写下如下代码
public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";public static final String DATE_PATTERN = "yyyy-MM-dd";public static final DateTime ...
mybatis-plus逻辑删除简单实现
1
人生不是一支短短的烛炬,而是一只由我们暂时拿着的火把;我们一要把它燃得十分光明辉煌,然后交给下一代的人们。——(英)萧伯纳
mybatis-plus配置逻辑删除
我们可以在配置文件中配置
mybatis-plus: global-config: db-config: logic-delete-value: 1 # 逻辑已删除值(默认为 1) logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
然后在pojo的删除字段属性加一个@TableLogic注解
然后我们启动测试类
@Testpublic void deleteTest() { List<Film> films = filmMapper.selectList(Wrappers.lambdaQuery(Film.builder().build()).last("LIMIT 1")); films.stream().findFirst().map(Film::getFilmId).ifPresent(fi ...
el-input-number阻止外层button的冒泡
取法于上,仅得为中;取法于中,故为其下。一一李世民《帝范》
我这里有这样一个按钮
<el-button @click="randomChoose" type="success" size="small"> 选择<el-input-number controls-position="right"></el-input-number>个</el-button>
效果如下
我们发现点击右边上下去增加减少中间个数的时候,也执行了我们上边按钮绑定的randomChoose 函数
但我们想要加上阻止冒泡却加不上
这里其实。。需要在外层再加上一个span或者div标签,再到这个span标签上加上阻止冒泡才可以生效
<el-button @click="randomChoose" type="success" size="small"> 选择 <span @click.stop> ...
多模块install时报包不存在
想升高,有两样东西,那就是必须作鹰,或者作爬行动物——巴尔扎克
今天发现一个坑
就是明明项目能正常运行,install一直报错说包找不到不存在
我一看这个包是依赖的另一个common模块,它是一个springboot工程
我就算install了common模块没报错,我这里仍然报错找不到包,看target目录里确实又存在
思来想去摸不着头脑,于是查阅百度,最后找到了解决方案
在common模块中的pom.xml找到spring-boot-maven-plugin配置的地方
如果没有,则自己新建一个
标签层级为**project=>build=>plugins=>plugin**
找到artifactId为spring-boot-maven-plugin的这层
加上配置<classifier>exec</classifier>即可
<project> <build> <plugins>
<plugin> <groupId>org.springframework. ...
单表和连表?如何选择?
快乐,使生命得以延续。快乐,是精神和肉体的朝气,是希望和信念,是对自己的现在和来来的信心,是一切都该如此进行的信心。——果戈理
今天做了个小测试啊
我自己造了一百万多条(1029708条)数据
这里测试呢我们首先是编写了一个LEFT JOIN
连表SQL如下
SELECT *FROM `film` LEFT JOIN `language` ON `film`.language_id = `language`.language_id
我们查询一百万多条后耗时为33457.8317 ms,大约30来秒,这是没有加索引的情况下
我们使用单表查询,然后再拼装
long startTime = System.nanoTime();List<Film> films = filmMapper.selectList(Wrappers.lambdaQuery());List<Integer> languageIds = films.parallelStream().map(Film::getLanguageId).distinct().collect(C ...