SpringBoot整合MyBatis多数据源
SpringBoot整合MyBatis多数据源
一、介绍
在平常的项目中,我们有连接数据库的需求。一般都是一个项目一个数据库,但也有例外需要连接多个数据库的。
那么该如何配置,可以达到多数据源的需求呢。
本次为SpringBoot与MyBatis的整合,其实掌握了需要配置什么,也很容易进行复刻。
二、配置
1)数据库准备
首先,我们先准备三个数据库吧,这边都使用MySQL了,实际可以是不同的数据库
test数据库
1234567891011create database `test` character set utf8mb4 collate utf8mb4_general_ci;CREATE TABLE `sys_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(32) NOT NULL COMMENT '用户名', `password` varchar(128) NOT NULL COMMENT '密码', PRIMARY KEY (`id`)) EN ...
SpringBoot使用矩阵传参
SpringBoot使用矩阵传参
一、介绍
在平时,我们在进行请求接口时,我们一个请求url的样子往往是下面这样子的
1http://localhost:8080/user/get?name=半月&age=18
对于上面的请求url,我们只需要使用@RequestParam注解就可以将其获取,十分简单。
那么,对于下面的这个矩阵传参的url,我们该如何进行获取呢?
123http://localhost:8080/user/get;name=半月;age=18http://localhost:8080/user/delete;id=11,12,13;status=1
这时候,我们就该使用到@MatrixVariable这个注解了,具体使用如下。
二、使用
1)基本使用
在springBoot中,默认是去掉了url分号后的内容。如此一来,我们在使用矩阵传参时,需要对其进行开启。
1234567891011121314151617package com.banmoon.test.config;import org.springframework.context.annotation ...
Java的函数式接口以及Lambda表达式
Java的函数式接口以及Lambda表达式
一、介绍
在java中,大家肯定使用过lambda表达式吧,这是适用于函数式接口的一种便捷写法。
那么什么是函数式接口,简单点来说,一个接口中有且只有一个需要实现的方法,那么这个接口就是函数式接口。
如果一个接口,你想定义为函数式接口,建议加上注解@Functionionallnterface,标注这个接口成为函数式接口,用来进行提示。
例如,多线程的Runnable接口就是一个函数式接口,如下
1234567package java.lang;@FunctionalInterfacepublic interface Runnable { public abstract void run();}
所以,我们在使用多线程时,可以使用lambda表达式进行简化
1234567891011121314151617181920212223242526package com.banmoon.test;import org.junit.jupiter.api.Test;public class SomethingTest ...
SpringBoot使用AOP详解
SpringBoot使用AOP详解
一、介绍
AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
好吧,以上来自百度百科
我知道,大家肯定是一头雾水。我们直接进入使用,用实践来进行理解。
二、使用
1)初识术语
本来很想直接上代码,但是不行,需要先过一遍AOP的概念术语,相关的专业名词。
先来看看下面这个需求,现在有一堆接口,需要统计他们耗时的一个需求,我们应该怎么做?
笨方法,在每个接口方法前后,放置起止时间进行计算。为什么说这是笨方法,自然是笨啦
一个两个还行,方法多了该怎么办
起止时间的计算是一种系统功能,原本方法中的功能是业务功能。两种不同的功能混杂在一起,非常难受
对架构,对维护不友好
那么上述的问题,可以使用AOP来解决,我 ...
Redis实现消息队列及延迟队列
Redis实现消息队列及延迟队列
一、介绍
在选择消息中间件的问题上,我们有很多解决方案,具体选择哪一种还是要根据实际的情况来进行确认。
如果直接有成熟的第三方消息中间件,能用就直接用,如rabbitMq、kafka等。
再如果,推送的消息比较简单,又恰好有个redis,那么就选择redis吧。
下面,将进行介绍,如果使用redis作为消息队列,我们该如何编写这段程序。
二、消息队列
前置工作,本次使用的工程框架直接是springBoot,其他maven依赖就不贴出来了,主要是要有这个redis的依赖
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>
有了依赖,记得在application.yml配置文件中加入对应redis的配置信息
12345spring: redis: databas ...
MySQL自定义函数和存储过程
MySQL自定义函数和存储过程
一、介绍
MySQL函数是一些具有特定功能的方法,在编写sql时,可以进行使用,从而完成对数据的处理。
存储过程的话,更像是一些特定功能的sql组合而成的sql语句集合,由于它的事先编译,通过传入参数来执行这个过程,可以使得,在某些场景下利用存储过程的情况,达到一些快捷方便的功能。
一起来看看他们的定义和写法把。首先,加一下基础的表格
1234567891011-- 用户表CREATE TABLE `tb_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL COMMENT '姓名', `sex` varchar(2) DEFAULT NULL COMMENT '性别', `age` tinyint(4) DEFAULT NULL COMMENT '年龄', `birthday` datetime DEFAULT NULL COMMENT '生日', PRIMAR ...
盘点MySQL中常用的函数
盘点MySQL中常用的函数
一、介绍
在平常使用MySQL的过程中,我们常常会使用到其中的函数。有些函数常用,就会非常熟悉,但有些不经常使用就会十分生疏。
避免使用到的时候,到处去翻博客,干脆自己总结,记录一下,顺便也加深一下自己的印象。
二、函数
1)聚合函数
聚合函数又称为组函数,一般结合分组进行使用,用来统计和计算。
聚合函数在平常的sql中十分常用,不需要查阅文档就应该保证熟练使用
12345678910111213141516171819-- avg 计算平均值select avg(age) from tb_user;-- count,计算行数select count(1) from tb_user;select count(*) from tb_user;select count(name) from tb_user;-- max,最大数select max(age) from tb_user;-- min,最小数select min(age) from tb_user;-- sum,求和select sum(age) from tb_user;-- group_conca ...
SpringBoot中读取配置的几种方式
SpringBoot中读取配置的几种方式
一、介绍
在SpringBoot项目中,我们使用application.yml或者application.properties文件,那么在如何读取其中的配置参数呢?
有以下这么几种
使用@Value注解
使用@ConfigurationProperties注解
使用@PropertySource+@Value注解
使用@PropertySource+@ConfigurationProperties注解
使用Environment.getProperty()
前面两种大家都很熟悉,也在常常使用,剩下这几个就比较陌生了,一起来看看吧。
二、方法
1)@Value注解
假如我们有这样的一个application.yml配置文件
12server: port: 8888
对于这样单条的配置,我们可以采用@Value去进行获取
1234567891011121314151617181920package com.banmoon.test.job;import lombok.extern.slf4j.Slf4j;import or ...
使用axios下载文件
使用axios下载文件
一、介绍
在前后端分离的开发项目中,我们常常有下载文件或者报表的需求。
如果只是简单的下载,我们可以简单使用a标签请求后端就可以了,不过一旦涉及到后端报错的回调、等待动画、进度条这种的,就没有任何办法了。
所以,这里可以使用axios进行请求,获取到后端的文件流后,自己进行生成文件。这样就可以完成上面的那三种情况了。
二、使用
1)下载Excel文件
我们点击下载按钮,将表单内容传入,返回一个对应的excel文件。
前端界面的话,如下所示
定义一下UserDTO.java,用来进行传参
1234567891011121314151617package com.example.demo.dto;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructorpublic class UserDTO { private String name; privat ...
力扣算法题:阶乘后的零
阶乘后的零
一、介绍
此题出自力扣网题库第172题,我刚开始没有想到,后面看了题解才明白的。
先看看题目,讲得很简单
还有入参的限制,0 <= n <= 104
12345class Solution { public int trailingZeroes(int n) { // TODO ... }}
放一个计算器,一会自己可以看看规律
输入数字n:
计算
结果:1
二、解题思路
1)暴力破解
暴力破解,算出答案,再转字符串,计算出末尾零的个数。
这种方法想都不要想,这可是阶乘,数字量很大的,很容易溢出。不然上面用计算器来试试。
2)优化
不知道你用计算器试过了没有,也不知道你有没有得到规律,我们先一步一步来分析
首先要看这道题想要的结果是什么,是零的个数
再看题目,阶乘阶乘,里面都是乘法计算,所以想要得到零,必须要乘上10,那么这个10就是因子
思路到这,第一步就清除了,查询n中有多少个10或者10的倍数,就有多少个零
然而,当你用计算器去试了一下,结果发现,5 ...