- 博客(47)
- 收藏
- 关注
原创 mysql 根据父id 递归查询所有的子类
方法一、mysql中建立递归查询的方法-- DROP FUNCTION `getChildrenOrg` CREATE FUNCTION `getChildrenOrg`(uuid INT) RETURNS text CHARSET utf8BEGIN DECLARE sTemp text; DECLARE sTempChd text; SET sTemp = '$'; SET sTempChd =cast(uuid as CHAR);WHILE sTempChd is not null
2022-04-07 05:28:53
1004
原创 springBoot整合druid
第一步:引入依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com
2022-01-06 10:16:55
233
原创 springIOC和AOP
概述Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应
2021-12-31 11:32:52
607
原创 redis五大数据类型应用场景
字符串stringset key value 实现单值缓存setnx product:10001 true 实现分布式锁,返回1表示获取锁成功,返回0表示获取锁失败,这个值已经被设置过incr acticle:readcount{文章id} 实现计数器,每执行一次加一incrby orderId 1000 实现分布式系统全局序列号,一次性拿1000个序列号,在redis里面加一,批量生成序列号提升性能因为string 类型是二进制安全的,可以用来存放图片,视频等内容,另外由于Redis的高性
2021-12-31 11:21:58
131
原创 vue使用Element-plus
用法1.下载资源文件npm install element-plus --save2.引入完整引入如果你对打包后的文件大小不是很在乎,那么使用完整导入会更方便。main.tsimport { createApp } from 'vue'import ElementPlus from 'element-plus'import 'element-plus/dist/index.css'import App from './App.vue'const app = createApp(Ap
2021-12-28 15:12:10
991
原创 雪花算法生成主键id
雪花算法SnowFlake 算法,是 Twitter(一家美国社交网络及微博客服务的公司,致力于服务公众对话) 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的。第一个部分,是 1 个 bit:0,这个是无意义的。第二个部分是 41 个 bit:表示的是时间戳。第三个部分是 5 个 bit:表示的是机房 id,10001。第四个部分是 5 个 bit:表示的是机器
2021-12-28 09:18:26
4931
2
原创 Mybatis联表查询:多对多(注解实现)
1、数据库表结构2、返回结果类封装CommentWithTag .java@Getter@Setter@ToString@Builder@AllArgsConstructor@NoArgsConstructor@JsonIgnoreProperties(value = {"handler"})public class CommentWithTag implements Serializable { /** * 编号 */ @ApiModelPrope
2021-12-23 19:55:44
1040
原创 Redis缓存工具类
添加依赖<!--redis默认使用的Lettuce客户端--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-
2021-12-23 19:44:41
588
原创 数据库索引
1、索引的概念索引就是为了提高数据的检索速度。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。2、索引的优点1.创建唯一性索引,保证数据库表中每一行数据的唯一性2.大大加快数据的检索速度,这也是创建索引的最主要的原因3.减少磁盘IO(向字典一样可以直接定位)3、索引的缺点1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加2.索引需要占用额外的物理空间
2021-12-23 14:32:14
156
原创 MySQL中的触发器
什么是触发器?触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的特性:1、有begin end体,begin end;之间的语句可以写的简单或者复杂 2、什么条件会触发:I、D、U 3、什么时候触发:在增删改前或者后 4、触发频率:针对每一行执行 5、触发器定义在表上,附着在表上。也就是由事件来触发某个操作,事件包括INSERT语句,UPDATE语句和DELETE语句;可以协助应用在数据库端确保数据的完整性。注意:cannot assoc
2021-12-23 14:23:51
342
原创 MySQL 中的行级锁、表级锁和页级锁
在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。在数据库的锁机制中,咱们介绍过在 DBMS 中,可以按照锁的粒度把数据库锁分为行级锁(InnoDB 引擎)、表级锁(MyISAM 引擎)和页级锁(BDB 引擎)。行级锁行级锁是 MySQL 中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突,其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁和排他锁。特点开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁
2021-12-23 14:13:35
2270
原创 log4j2日志漏洞解决
日志的作用日志记录主要用来监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。因此,对于程序员来说,日志记录非常重要。log4j2Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。此次漏洞的出现,正
2021-12-22 18:52:05
4031
原创 Spring环境、注解及配置文件
Spring------Spring Framework两大核心主要核心 IOC(控制反转)和 AOP(面向切面编程)Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。IOC(控制反转)控制反转:创建对象的权力从程序员的手中交给了Spring 硬编码,耦合度相当高 UserService---->new UserDaoImpl1 ResultService---->new UserDaoImpl1 工厂:根据需要返回不同的实例对象 Sp
2021-11-01 17:37:52
241
原创 Java反射----获取属性、获取方法
获取属性getField(fieldName)根据字段名获取某个public的field(包括父类)getDeclaredField(fieldName)根据字段名获取当前类的某个field(不包括父类)getFields()获取所有 public 的 field属性getDeclaredFields()获取当前类的所有field (不包含父类)Field 常见的方法getName() : 获取属性名getType() : 获取属性类型getModifiers() : 返回修饰
2021-09-09 08:53:34
1710
原创 Java网络编程----TCP和UDP
TCP和UDP的完整区别TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、
2021-09-06 19:28:47
154
原创 Java网络编程----邮件发送----简单邮件
邮件发送邮件 properties 配置mail.smtp.host(接受邮件主机名(smtp.qq.com))mail.smtp.port(接受邮件端口号(587))mail.smtp.auth(是否需要用户认证(true))mail.smtp.starttls.enable(是否启用TLS加密(true))session 会话Session.getDefaultInstance(props, Authentication)创建Session 会话session.setDebug(
2021-09-06 19:07:43
455
原创 Java - 网络编程----TCP
ServerSocket服务器端ServerSocket ss = new ServerSocket()创建服务器 Socket端口socket.bind(new InetSocketAddress(“localhost”, 8888), 50)设置 服务器 IP 和端口, 配置监听 客户端数量Socket socket = ss.accpet()阻塞式等待客户端的连接给每一个客户端开启一个线程socket.getInputStream()获取输入流、接收客户端数据1
2021-09-06 16:26:14
176
原创 Java集合框架----泛型
泛型泛型不允许直接 new泛型特点:泛型就是编写模板代码来适应任意类型使用时不必对类型进行强制转换通过编译器对类型进行检查使用泛型的类型支持向上转型泛型实现方式是擦拭法泛型通常适用于集合中泛型主要应用于集合中泛型的定义class Person<T, E>{}支持类定义多个泛型PS: 静态方法定义的泛型和类上的泛型没有任何关系泛型的实例public class Person<T>{ public T field ; public
2021-09-06 12:56:25
164
原创 Java正则表达式----Pattern和Matcher
Pattern修饰符CASE_INSENSITIVE忽略大小写MULTILINE多行模式DOTALLdotAll 模式UNICODE_CASEunicode模式compile(regex)使用正则构建 Pattern对象compile(regex, flags)flags : 设置修饰符,多个修饰符用 | 分割matcher(str)返回Matcher对象Matchermatches()返回是否匹配、适用于匹配一次的判断find()是否有找到匹配的元
2021-09-05 10:09:18
188
原创 Java异常和日志----Log日志
commons-logging日志接口APILog4j日志实现API优先级(高)Fatal -> Error -> Warn -> Info -> Debug -> Trace(低)优先级 越低、输出的日志信息会越多日志输出目的地Appender日志输出目的地ConsoleAppenderFileAppenderRollingFileAppenderlog4j2.xml 配置<?xml version="1.0" encodin
2021-09-05 09:59:41
224
原创 Java异常-----异常的处理
异常的处理try - catch处理异常e.printStackTrace();异常的打印TryCatch与Throw结合使用public static void test() throws Exception { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try { //可能产生异常 Date parse = df.parse("19
2021-09-05 09:44:26
151
原创 Java异常----自定义异常和Junit异常的测试
自定义异常constructor(message)用来设置异常错误信息getMessage()获取错误信息printStackTrace()将异常栈打印到控制台中printStackTrace(printWriter)printStackTrace(printStream)printStackTrace(printStreamOrWriter)将异常栈写入到 文件中Junit异常的测试语法:assert boolean : msg断言失败、抛出错误信息-ena
2021-09-05 09:44:00
222
原创 Java核心类----日期类JDK1.8新特性
JDK1.8 新API(java.time包)ZoneId 时区ZoneId.systemDefault()获取系统默认的时区ZoneId.of(“Asia/Shanghai”)获取中国时区ZoneId.getAvailableZoneIds()获取可用的所有时区集合 //创建一个系统自带的默认时区 ZoneId zoneId = ZoneId.systemDefault();本地日期和时间LocalDateTime/LocalDate/Local
2021-09-04 00:11:06
211
原创 Java核心类----日期类
枚举类枚举类用关键字 enum 来进行定义,本质上用户定义的枚举类是 Enum 类的字类 枚举类拥有 name ,ordinal 属性 name 用来获取枚举值对应的字符串表示形式 ordinal 用来获取定义枚举值的索引顺序,默认从零开始,不推荐使用(原因是索引值会随着用户定义值的位置而发生改变)...
2021-09-03 16:38:01
90
原创 Java核心类----Comparator 接口排序规则 、枚举类
Comparatorcompare(T o1,T o2)传两个参数o1 > o2 返回正数o1 < o2 返回负数o1 = o2 返回0Comparator 接口主要用来做排序 Integer[] array = {23,34,12,5,25,56}; Arrays.sort(array,(a,b) ->{ //return 1 永远认为 a 比 b da // 认为数组中的后一个元素永远比 前一个元素大
2021-09-03 12:14:26
506
原创 Java核心类----包装类
包装类包装类----Number及封装拆箱* byte Byte * short Short * int Integer * long Long * float Float * double Double * char Character * boolean Boolean * * 数字 代表 数字的包装类
2021-09-03 09:36:28
83
原创 Java核心类----Math(数学)类、random(随机数)类
Math类Math包含用于执行基本的数字运算等基本指数、对数、平方根法、三角函数。常用方法random()生成一个 [0, 1) 之间的随机数这里是引用max(a, b) / min(a, b)比较两个数的大小pow(a, b)获取 a 的 b 次方sqrt(a)求a的平方根ceil(a) / floor(a)向上/下 取整,返回doubleround(a)四舍五入取整abs(a)获取绝对值...
2021-09-02 14:29:51
145
原创 Java反射----注解Annotation
注解定义@interfacepublic @interface Report { int type() default 0; String level() default "info"; String value() default "";}注解的成员支持基本数据类型String 类型枚举/枚举数组注解/注解数组PS : 大部分注解会有一个名为value的配置参数,对此参数赋值,可以只写常量,相当于省略了value参数注解中的value成员,在使用的时
2021-09-02 09:15:18
214
原创 Java反射----构造方法
获取构造方法 Class<User> cla = User.class; //获取 user 类的所有构造方法 Constructor<?>[] constructors = cla.getConstructors(); Constructor<?> constructor = constructors[0]; //通过构造方法创建对象 User user = (User) con
2021-08-30 18:45:32
255
原创 Java反射----类和对象
反射 /** * 类的对象 类对象 * 类加载:JVM第一次读取一个类的时候,将字节码class 文件读取到内存中的过程 * 类对象:类加载的产物,一个类的类对象永远相同,类对象的表示:用CLASS表示 * * 类对象的获取方式有三种: * 1.类.class * 2.对象.getClass * 3.class.forName("类全名") 类全名:包名 + 类名 */.
2021-08-30 18:16:45
103
原创 session的单例模式
/** * 单例模式: * 1.私有化构造方法(为了保证使用者不通过 new 来构造对象) * 2.提供一个私有的静态属性(要构建的对象类型) * 3.提供一个公开的静态方法,返回需要的单例对象 * 有可能需要做简单的逻辑判断 * 单例模式:懒汉式和饿汉式 两种设计方式 * * 懒汉式:程序向对方要数据的时候,才尝试去创建该对象 * 以时间换取空间
2021-08-30 11:43:01
415
原创 Java核心类----StringJoiner
StringJoinerextends Object自身是final 类型,不允许被继承特点:善于处理 以 指定分隔符 拼接字符串joiner = new StringJoiner(sep)joiner.add(str)创建 sep 分隔符 Joiner对象new StringJoiner(sep, prefix, suffle)joiner.add(str)创建 sep 分隔符、且 设置前缀和 后缀的 Joiner对象toString()返回处理后的字符串merge
2021-08-27 14:51:44
141
原创 Java核心类----StringBuilder
StringBuilder(字符串的构造器)StringBuilder:字符串的构造器,作用专门构建字符串的,可以构建一个长度可变的字符串字符串拼接通过 + 号进行,但是如果进行大量字符串拼接,则会导致性能特别差comparable (可比较的)底层构造方法中长度默认16如下: public static void main(String[] args) { //获取当前系统时间的 时间戳(毫秒数 距离1970-01-01 0:0:0 ) String str
2021-08-26 19:38:13
236
原创 项目包的介绍
项目设计建包entity | model(实体层):类的特点,主要关心的属性,和数据库表息息相关dao (持久层):数据的 持久化,和数据库的操作(增删改查)息息相关service (业务层):主要处理业务逻辑(核心层)action | controller (控制层):是连接前后端的桥梁utils (工具包):主要是项目使用的工具类config(配置包):存放项目需要使用的配置类...
2021-08-26 18:20:34
1506
原创 Java 泛型
泛型/** * 泛型的定义:在类的后面加尖括号表示要定义一个泛型 * 使用泛型定义一个属性的时候,它的类型是由创建对象的时候,才能确定它的类型 * 泛型代表的是不确定的类型,所以在定义对象的时候,无法进行赋值操作,无法构建对象 * 泛型的声明,代码块都不能进行泛型对应的属性赋值 * 构造方法,set方法可以对泛型对应的属性进行赋值 */public interface Array<T> extends Iterable<T>public void sertData(
2021-08-26 18:11:49
83
原创 Java面向对象——接口
接口接口的作用是制定标准的接口具有可扩展性解耦合:降低程序之间的耦合度接口与接口之间采用多继承接口与类之间采用多实现实现接口,就必须实现接口中的所有抽象方法如果不想实现某些抽象方法,那么就必须将该类做成抽象类public interface Shape { //接口的创建关键字 interface(接口)特点:所有的方法都是公开抽象方法所有的属性都是公开的,静态的,常量(final),都是public static final 修饰的接口中 没有 构造方法,所以不能
2021-08-25 09:40:06
195
原创 Java异常-----Throwable异常分类
Throwable异常分类Error(错误)----系统级错误OutOfMemoryError: 内存溢出错误NoClassDefFoundError : 无法加载某个类StackOverflowError : 栈溢出ExceptionInInitializerError : 静态初始化异常ExceptionRuntimeException : 运行时异常 ; 未检查异常-运行时异常,可以处理,也可以不处理ArithmeticException :
2021-08-11 17:04:12
167
原创 Java面向对象——继承
Java面向对象——继承继承继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展。通过继承创建的新类称为「子类」或「派生类」,被继承的类称为「基类」、「父类」或「超类」extends 继承Java : 采用单继承,使用树状结构进行类的管理Java中 Object 是所有类的 父类C++、Python:采用多继承,形成的是网状结构字类可以继承父类中定义的 公开的 或者 受保护的 属性 和 方法public class Ca
2021-07-29 15:30:15
137
原创 Java面向对象——封装
Java面向对象1. 面向对象vs面向过程2.封装类类是自然界中描述具有相同 特征 (属性)和 行为 (方法)的事务的统称类是抽象的对象万物皆为对象对象是具体的类和对象的关系类是 对象的 模板,模板的作用就是构建对象的对象是类的具体实现,一个类,可以有无数个对象...
2021-07-27 17:08:41
277
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人