- 博客(91)
- 收藏
- 关注
原创 Java异常处理
异常的分类编译时异常和运行时异常异常的5个关键字trycatchfinallythrowsthrow异常的捕获顺序,先捕获小的,再捕获大的自定义异常:继承Exception,throw new的时候必须得throws抛出给调用者,相当于提示调用者必须捕获继承throw new的时候不是必须throws抛出给调用者建议:自定义异常尽量继承Exception,提示调用者必须处理异常,但是最终还是根据项目需求来6.方法覆盖和异常的关系。
2023-11-26 20:29:18
53
原创 SpringBoot事务处理
修饰方法时:表示当前的方法开启事务,需要注意只能应用在 public 方法上。修饰类时:表示当前该类下面的所有被 public 修饰的方法都开启事务。默认会回滚运RuntimeException 及其子类Spring 事务传播机制定义了多个包含了事务的方法在相互调用时,事务是如何在这些方法之间进行传递的。
2023-11-26 20:05:45
114
原创 Lombok新版超全面使用教程
Lombok是一个Java库,可以通过注解来简化Java类的编写,减少冗余的样板代码。它提供了一系列的注解,用于自动生成常见的代码,如getter和setter方法、构造函数、equals和hashCode方法、toString方法等。通过使用Lombok,开发者可以更加专注于业务逻辑的实现,减少了繁琐的重复劳动。
2023-11-25 19:31:03
75
原创 Java枚举详解
枚举类型是一种特殊的数据类型,用于定义一组固定的命名常量。枚举类型提供了一种更强大、更安全和更易读的方式来表示一组相关的常量。在Java中,枚举类型是通过使用enum关键字来定义的。枚举类型可以包含一个或多个枚举常量,每个常量都是枚举类型的实例。枚举常量是在枚举类型中预先定义的,它们是唯一的、已命名的对象。在Java中,枚举类型是一组固定常量值的集合,每个常量值代表一个特定的数据类型。枚举在Java中被视为数据类型,你可以使用它们来创建枚举类型的变量、数组、参数等。
2023-11-24 20:21:24
61
原创 一文掌握 Spring Boot 常用注解,保姆级整理,建议收藏!
依赖注入,自动导入标注的对象到当前类中,比如我们的 Controller 类通常要导入 Service 类(需要注意这里 Service 类要被 Spring 容器管理)。我们一般使用@Resource注解让 Spring 容器帮我们自动装配 bean。要想把类标识成可用于@Resource注解自动装配的 bean 就需要我们使用这几个注解了,它们表示对应的类将被 Spring 容器管理。@Component:通用的注解,可标注任意类为Spring组件。如果一个 Bean 不知道属于哪个层,可以使用。
2023-11-23 16:00:27
126
原创 SpringBoot自定义注解+数据脱敏(一看就懂)
自定义注解需要使用@interface关键字进行定义,并且需要指定该注解的作用目标(如类、方法、字段等)和需要包含的元数据信息(如属性及其默认值等)。一般我们可以通过注解来实现一些重复的逻辑,就像封装了的一个方法,可以用在一些权限校验、字段校验、字段属性注入、保存日志、缓存@Inherited。
2023-11-23 15:08:04
53
原创 SpringBoot定时任务(一看就会)
定时任务是spring boot框架提供的基础能力之一,所以其依赖是在spring-boot-starter里面,但是一般开发的时候我们直接引入web依赖即可,web依赖中包含了spring-boot-starter。要注意的是Spring Boot 从版本1.3.0开始提供对定时任务的支持,本文用的依赖默认是支持定时任务的版本。
2023-11-22 15:12:52
30
原创 Java日期时间类(超级全面)
java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数。将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象。获得月份天数(1-31) /获得年份天数(1-366)向当前对象添加几天、几周、几个月、几年、几小时。从当前对象减去几月、几周、几天、几年、几小时。将当前日期时间设置为校对器指定的日期时间。将指定格式的字符串解析为日期、时间。获得当前对象对应的小时、分钟、秒。
2023-11-20 17:13:43
34
原创 Maven依赖管理项目构建工具(保姆级教学---上篇)
指示将项目打包为什么类型的文件,idea根据packaging值,识别maven项目类型!packaging 属性为 jar(默认值),代表普通的Java工程,打包以后是.jar结尾的文件。packaging 属性为 war,代表Java的web工程,打包以后.war结尾的文件。packaging 属性为 pom,代表不会打包,用来做继承的父工程。
2023-11-17 16:54:22
113
原创 Debug知识点解析!超实用教程
一、Debug简介二、IDEA中的Debug步骤2.1步过调试按钮(F8)2.2步入调试按钮(F7)2.3强制步入调试按钮(Alt + Shift + EZ)2.4步出调试按钮(Shift + F8)2.5 回退断点2.6 运行到光标处(F9)2.7计算表达式按钮(Alt + F8)三、条件断点
2023-11-14 16:31:41
52
原创 Lambda表达式&Stream流-函数式编程-java8函数式编程(Lambda表达式,Optional,Stream流)从入门到精通-最通俗易懂
函数式编程强调将程序分解成独立的、无状态的函数,避免使用可变的状态和共享的数据。Lambda可以对某些匿名内部类的写法进行简化,Lambda表达式只支持函数式接口。5. 引用透明:函数式编程中的函数调用可以被视为对表达式的求值,因此引用透明性是一个重要的特点,即可以替换函数调用的结果而不影响程序的行为。1. 纯函数:函数式编程中的函数是纯函数,即给定相同的输入,总是产生相同的输出,不会对外部状态产生任何影响。2. 不可变数据:函数式编程中的数据一旦创建就不会被修改,任何改变都是通过创建新的数据来实现。
2023-11-07 16:52:47
67
原创 【Java基础】内部类
在一个类的里面,再定义一个类。(在一个类的内部定义的类,称为内部类)举例:在A类的内部定义B类,B类就被称为内部类写在成员位置的,属于外部类的成员。(类中,方法外)匿名内部类匿名内部类是 Java 编程语言中一种特殊的类,它没有显式地定义类名,而是在创建对象时通过传递实现了某个接口或继承了某个类的代码块来定义类。通常,我们使用它来简化代码、减少类的数量和更高效地编写事件处理程序等。
2023-11-05 20:46:43
119
原创 Git保姆级教学(超详细版)
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git 易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于SubversionCVSPerforce和ClearCase等版本控制工具。
2023-11-02 16:10:49
194
原创 Mybatisplus-多数据源
官网链接----->适用于多种场景:纯粹多库、 读写分离、 一主多从、 混合模式等 目前我们就来模拟一个纯粹多库的一个场景,其他场景类似场景说明:我们创建两个库,分别为:mybatis_plus(以前的库不动)与mybatis_plus_1(新建),将 mybatis_plus库的product表移动到mybatis_plus_1库,这样每个库一张表,通过一个测试用例 分别获取用户数据与商品数据,如果获取到说明多库模拟成功。
2023-09-28 09:53:33
86
原创 MyBatis-Plus分页插件的配置和使用&&自定义分页功能
这些方法可以帮助你获取当前页、每页显示的记录数和总页数等分页相关信息。这个方法返回的是满足查询条件的总记录数,方便你进行分页展示。3. 使用其他分页的相关方法,如。方法:getTotal()是否有下一页:false。是否有上一页true。
2023-09-26 15:01:28
168
原创 Mybatisplus条件构造器
Wrapper :条件构造抽象类,最顶端父类AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件QueryWrapper : 查询条件封装UpdateWrapper : Update 条件封装AbstractLambdaWrapper : 使用Lambda 语法LambdaQueryWrapper :用于Lambda语法使用的查询WrapperLambdaUpdateWrapper : Lambda 更新封装Wrapper。
2023-09-26 09:41:51
116
原创 MyBatis-Plus的常用注解
在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表,由此得出结论,MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决定,且默认操作的表名和实体类型的类名一致。通过@TableId注解,您可以更方便地定义实体类的主键字段,并且可以配置主键生成策略和类型,框架会根据注解的配置进行相应的处理。,而默认操作的表名和实体类型的类名一致,即。
2023-09-21 17:01:45
202
原创 Mybatis的分页插件
hasPreviousPage/hasNextPage:是否存在上一页/下一页。navigatepageNums:导航分页的页码,[1,2,3,4,5]isFirstPage/isLastPage:是否为第一页/最后一页。navigatePages:导航分页的页码数。pageSize:每页显示的条数。size:当前页显示的真实条数。nextPage:下一页的页码。pageNum:当前页的页码。prePage:上一页的页码。total:总记录数。
2023-09-20 14:28:04
486
原创 MyBatis缓存
一级缓存是指在同一个SqlSession内,对于相同的查询语句和参数,MyBatis会将查询结果缓存在内存中。一级缓存的生命周期与SqlSession对象相同,当SqlSession被关闭或提交后,一级缓存也会被清空。这意味着一级缓存在同一个连接中是共享的,对于不同的连接,缓存是独立的。如果需要在多个SqlSession之间共享缓存,可以考虑使用MyBatis的二级缓存,通过配置开启并配置缓存策略来实现。要注意的是,一级缓存只对相同的查询语句和参数有效,使二级缓存失效的情况。
2023-09-20 09:42:15
74
原创 Mybatis中的动态SQL
where元素主要是用于简化查询语句中where部分的条件判断,where元素可以再元素所在位置输出一个where关键字,而且还可以将后面条件多余的and或or关键字去掉,与其他元素搭配使用。
2023-09-19 09:28:17
105
原创 MyBatis字段名和属性名不一样的解决方案
这样设置之后,MyBatis就会将数据库中的下划线分隔的字段名转换为Java中的驼峰式命名。例如,如果数据库中的字段名为。开启驼峰匹配后,会将_自动映射为驼峰,如emp_name将会被映射为empName.如上面的SQL语句将emp_name取别名为empName对应实体类的属性名。在Spring Boot中,使用MyBatis时,可以通过在。resultMap:设置自定义映射。,则在Java中将会被映射为。
2023-09-14 16:28:20
301
原创 MyBatis特殊SQL的执行(模糊查询、批量删除、动态设置表名、添加功能获取自增的主键)
如果使用#{},则解析后的sql语句为delete from t_user where id in ('1,2,3'),这样是将1,2,3看做是一个整体,只有id为1,2,3的数据会被删除。正确的语句应该是delete from t_user where id in (1,2,3),或者delete from t_user where id in ('1','2','3')此处不能使用#{xxx},#{xxx}的本质是占位符赋值,'%#{xxx}%'会被数据库解析为'%?2.获取新添加的班级的id。
2023-09-14 15:22:33
304
原创 MyBatis获取参数值的两种方式#{}和${} 以及 获取参数值的各种情况
在 SQL 语句中使用 #{},MyBatis 会自动将参数值进行预编译处理,防止 SQL 注入攻击,并且可以处理各种类型的参数(如字符串、数字、日期等)。但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号。使用arg或者param都行,要注意的是,arg是从arg0开始的,param是从param1开始的。因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号。MyBatis获取参数值的两种方式:${}和#{}
2023-09-13 17:35:42
502
1
原创 MySQL 锁
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。
2023-09-10 11:33:47
211
原创 MySQL触发器使用指南大全
触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发(比如说 一条语句影响了 5 行 则会被触发 5 次),不支持语句级触发(比如说 一条语句影响了 5 行 则会被触发 1 次)。触发器类型NEW 和 OLDINSERT。
2023-09-09 21:58:50
699
原创 数据库(MySQL)的存储过程和存储函数
存储过程是事先经过编译并存储在数据库中的一段SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库SQL 语言层面的代码封装与重用。特点封装,复用可以接收参数,也可以返回数据减少网络交互,效率提升。
2023-09-02 17:59:58
798
原创 MySQL视图
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
2023-08-22 19:34:25
947
原创 Java反射机制 (秒懂百科)
调用Constructor类的相关方法:对于每个构造方法,可以通过Constructor类的方法进行操作,比如getName()获取构造方法名、getModifiers()获取修饰符、getParameterTypes()获取参数类型等。1.使用Class.forName()方法:这种方式适用于只知道类的全限定名字符串时使用,可以动态地加载类并获取对应的Class对象。3.使用对象的getClass()方法:这种方式适用于已经存在对象并且需要获取其对应的Class对象。方法来获取成员变量对象。
2023-08-19 16:34:23
96
原创 IO流 详细介绍(秒懂百科)
voidclose()关闭此输入流并释放与该流关联的所有系统资源。read()从输入流读取下一个数据字节。(多次调用会按顺序依次读取)返回-1表示读取完毕int从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。int将输入流中最多 len 个数据字节读入字节数组。
2023-08-17 19:59:59
232
原创 File类 详细介绍(秒懂百科)
File 类不仅可以获取已知文件的属性信息,还可以在指定路径创建文件,以及删除一个文件。在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果希望在程序中操作文件和目录,则都可以通过 File 类来完成。File它是文件和目录路径名的抽象表示,文件和目录是可以通过File封装成对象的,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。如果删除路径是一个目录,不能够直接删除目录,需要先删除该目录中所有内容,最后在删除目录。
2023-08-17 14:45:32
277
原创 SQL优化
通过创建覆盖索引,可以避免对主表的访问,直接从索引中获取所需的列数据,提高查询速度。在分页查询中,可以先执行一个子查询来获取满足条件的主键或唯一标识符,并将其作为条件用于主查询,以获取特定的页码数据。如果order by字段全部使用升序排序或者降序排序,则都会走索引,但是如果一个字段升序排序,另一个字段降序排序,则不会走索引,explain的extra信息显示的是。列出现在了索引的最左边,并且查询和排序都是从最左边的列开始的,所以这个查询语句可以利用该索引进行优化。”,所以顺序插入的效率高。
2023-08-13 17:14:17
170
原创 MySQL 索引 详解(保姆级教程)
索引是帮助 MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。索引结构描述B+Tree最常见的索引类型,大部分引擎都支持B+树索引(默认)Hash底层数据结构是用哈希表实现,只有精确匹配索引列的查询才有效,不支持范围查询R-Tree(空间索引)空间索引是 MyISAM 引擎的一个特殊索引类型,主要用于地理空间数据类型(通常使用较少)
2023-08-10 19:34:12
393
原创 MySQL存储引擎
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。MySQL默认的存储引擎是InnoDB。--查询建表语句show create table 表名;--建表时指定存储引擎CREATE TABLE 表名(...-- 查看当前数据库支持的存储引擎。
2023-08-07 19:02:15
209
原创 深入理解数据库事务(超详细)
事务是一组操作的集合,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
2023-08-06 17:09:51
231
原创 MySQL多表查询 (超详细)
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率。实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)(开发中一般取消外键的设定,即在多的一方建立字段指向一的一方的主键即可)(开发中一般取消外键的设定,即在任意一方加入字段关联另外一方的主键即可)(开发中一般取消外键的设定,即在中间表建立两个字段指向两方的主键即可)关系:一个部门对应多个员工,一个员工对应一个部门。实现:在多的一方建立外键,指向一的一方的主键。
2023-08-05 17:07:24
1510
原创 数据库的约束 详解
1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。2.目的:保证数据库中数据的正确、有效性和完整性。约束描述关键字非空约束限制该字段的数据不能为nullNOT NULL唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE主键约束主键是一行数据的唯一标识,要求非空且唯一默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT检查约束(8.0.1版本后)保证字段值满足某一个条件CHECK外键约束。
2023-08-05 16:38:06
905
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人