自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 ORM 对象-关系映射、$#的区别

{}是预编译处理,$是字符替换。在使用#{}时,MyBatis会将SQL中的#替换成"?”,配合PreparedStatement的 set方法赋值,这样可以有效的防止SQL注入,保证程序的运行安全。ORM(Object-relational mapping),即对象关系映射,是一种为了解决。存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

2024-08-05 19:52:58 79

原创 搭建Mybatis,实现数据库增删改

创建一个controller包,EasyController类。最后运行启动类 EasySpringApplication类。Staff_Mapper.xml中的代码。--在这里写SQL语句-->--Lombok引入-->

2024-08-05 19:52:18 501

原创 Spring MVC核心、注解

处理器适配器,Handler 执行业务方法之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到 JavaBean 等,这些操作都是由 HandlerApater 来完成,开发者只需将注意力集中业务逻辑的处理上,DispatcherServlet 通过 HandlerAdapter 执行不同的 Handler。:前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。@RequestParam 用于将请求参数绑定到方法参数。

2024-08-03 00:00:00 523

原创 代理模式 结构型设计模式

代理模式是一种结构型设计模式,它允许你提供一个代理对象来控制对另一个对象的访问。代理对象可以在访问目标对象之前或之后执行一些额外的操作。动态代理是在运行时通过反射机制动态生成代理类。Java 提供了两种动态代理的实现方式:JDK 动态代理和 CGLIB 动态代理。静态代理是在编译时由程序员创建或工具自动生成代理类。代理类和目标类实现相同的接口。CGLIB 动态代理通过继承实现代理,因此被代理的类不能是 final 类。JDK 动态代理要求被代理对象必须实现一个接口。

2024-08-02 19:53:42 301

原创 AOP面向切面编程

①、JDK 动态代理是基于接口的代理,只能代理实现了接口的类。使用 JDK 动态代理时,Spring AOP 会创建一个代理对象,该代理对象实现了目标对象所实现的接口,并在方法调用前后插入横切逻辑。(Join Point):被拦截到的点,因为 Spring 只支持方法类型的连接点,所以在 Spring 中,连接点指的是被拦截到的方法,实际上连接点还可以是字段或者构造方法。②、CGLIB 动态代理是基于继承的代理,可以代理没有实现接口的类。(Weabing):织入是将增强添加到目标类的具体连接点上的过程。

2024-08-02 19:52:45 757

原创 Spring Bean的生命周期

10)如果在 <bean> 中指定了该 Bean 的作用范围为 scope="singleton",则将该 Bean 放入 Spring IoC 的缓存池中,将触发 Spring 对该 Bean 的生命周期管理;如果在 <bean> 中指定了该 Bean 的作用范围为 scope="prototype",则将该 Bean 交给调用者,调用者管理该 Bean 的生命周期,Spring 不再管理该 Bean。8)如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。

2024-08-01 20:27:28 235

原创 Spring Bean的作用域

在Spring框架中,Bean的作用域定义了在容器中创建和管理Bean实例的方式。每个HTTP请求都会创建一个新的Bean实例,仅在Web应用中有效。默认的作用域,容器中只存在一个Bean实例。每次请求该Bean时,都返回同一个实例。每个HTTP会话(即用户会话)创建一个新的Bean实例,仅在Web应用中有效。:web项目中请求作用域 每次请求都会创建一个新的对象。每次请求时,容器都会创建一个新的Bean实例。方法时,都会返回一个新的对象。:每次会话都会创建一个新的对象。:每次需要都来一个新的对象。

2024-08-01 20:26:28 222

原创 Sping框架中常用注解

@Controller@RestController@Service@Repository@Component@Bean@Configuration简单的 Spring 项目结构

2024-08-01 20:25:08 180

原创 IOC(控制反转)、DI(依赖注入)

Spring的IOC容器是一个用来管理和装配Bean(Spring应用中的组件)的容器,它负责创建对象、管理对象的生命周期以及对象之间的依赖关系。通过IOC容器,可以实现依赖注入。适用于依赖关系较为复杂且依赖对象可以在对象创建之后设置的情况。是实现 IoC 的一种设计模式,它通过将依赖对象注入到组件中来实现组件之间的松耦合。适用于依赖关系明确且依赖对象必须在对象创建时就存在的情况。是一种设计原则,它将对象创建和依赖关系的管理从应用程序代码中移交给框架或容器。字段注入直接通过类的成员变量注入依赖对象。

2024-08-01 20:18:48 231

原创 配置maven搭建SpringBoot项目

链接:https://pan.baidu.com/s/1DcQb_EWtCFhKD4vRxqfacA?//项目启动类,运行该类就启动了整个SpringBoot应用程序。--来自百度网盘超级会员V3的分享。

2024-08-01 20:18:12 296

原创 IDEA 数据库架构

1、点击idea的数据库2、建立mysql3、注意端口号、用户名、密码是自己设置的4、选择架构,选择所有或者选择 单选一个需要用的数据库5、这样就可以了

2024-07-31 20:45:43 366 1

原创 IDEA 添加jar包的方式

不会IDEA添加数据库的可以看下一篇1、新建一个lib目录2、找到你的jar包复制到lib里3、打开文件的项目结构 或者快捷键 ctrl+alt+shift+s4、找到模块 ——> 依赖5、点击加号+ 添加依赖,选择 JAR或目录6、选择新建的lib,lib中放的是刚才复制的jar包,点击确定7、勾选✔ lib,点击应用,最后确定即可

2024-07-31 20:44:47 132 1

原创 JDBC连接数据库的6个步骤

通过连接对象Connection创建Statement对象,这个对象用于执行SQL查询。: 使用Statement对象执行SQL查询,并获取结果。: 最后,关闭所有打开的资源,以释放数据库连接、Statement对象和ResultSet对象。: 在Java程序中使用数据库之前,首先需要加载相应的数据库驱动程序。: 使用DriverManager类的getConnection()方法来创建数据库连接。需要提供数据库URL、用户名和密码。: 如果执行的是查询操作,需要处理ResultSet对象,提取数据。

2024-07-31 20:30:31 289 1

原创 MySQL学习:连接查询、数据类型、视图、触发器、函数、存储过程、三范式、事物

(Durability):事务一旦执行成功,数据库会保证事务处理一定会持久化到数据库中。(Atomicity):事务内的操作是一个整体, 要么执行成功, 要么执行失败。mediumint(3字节) int(4字节) bigint(8字节)varchar(20) 变长的 存入abcd 占了4个字符位。tiny(1字节) smallint(2字节)1、结构varchar类型的第一个字节不存储数据。char(20) 存入abcd,占了20个字符位。2、每一列的数据完全依赖主键(不可以部份依赖)

2024-07-31 20:17:51 321

原创 MySQL学习

- mysql utf8 mb3(三个字节)、mb4(四个字节) maxbyte。-- auto_increment 在插入数据时,该列的值可以不指定。-- 主键 表中数据唯一的标识 不可重复 不可为null。-- 在起名字时 表名时常会用到一些关键字 name。-- 中文、韩文、日文、东南亚地区字符占三个字节。-- 数字、字母、欧洲的语言字符占一个字节。-- 不同的字符占用的空间是不一样的。-- 中东、阿拉伯语言字符占两个字节。

2024-07-29 19:59:05 262

原创 反射 反射的API 反射的核心 内省

反射:在程序运行期间,可以动态获取类中定义的属性和方法以及构造方法的机制(思想)的实现。Java是面向对象的,有对象之前先有类,static来修饰类的属性和方法。反射的核心是Class类,程序中使用的类,每一个都有一个唯一的对应的Class对象。Java中每一个类都有一个内存,这每一个内存都是一个对象。fName 变量只想的对象就是Easy类中的name属性。在Java中存储了类的内容,这个内容也应该是一个对象。Java中用来记录 类的属性的 类叫做field。反射会破坏类的封装性,通过场景说明。

2024-07-26 20:26:18 390

原创 线程、线程安全、线程同步、锁、线程池

当对象被反序列化时,这些变量的值不会恢复,而是被初始化为其默认值(例如,数字类型为 0,对象类型为 null,布尔类型为 false)在 Java 中,volatile 关键字用于修饰变量,确保对该变量的读写操作都是直接从主存中进行的,而不是从而不是线程的工作内存中。这是一个动态的过程:有自身的产生、存在和消亡的过程,这也是进程的生命周期。线程池中的线程达到(超过)核心线程数,超出的数量会根据存活时间,进行销毁,直到数量达到核心线程数,如果线程的数量少于核心线程数,不会消亡。

2024-07-25 20:02:34 634

原创 序列化 反序列化 Serializable接口

当类的 serialVersionUID 修改为不同的值(如从 1L 改为 2L),然后再试图反序列化之前序列化的对象,将会抛出 InvalidClassException,说明类的版本不匹配,不能进行反序列化。Java 序列化是一种将对象转换为字节流的过程,以便可以将对象保存到磁盘上,将其传输到网络上,或者将其存储在内存中,以后再进行反序列化,将字节流重新转换为对象。它没有定义任何方法,仅用作标记,以便 Java 的序列化机制知道这个类的对象是可以序列化的。: 将字节流转换回对象,恢复对象的状态。

2024-07-25 19:57:13 362

原创 文件File、流Stream

Java 序列化是一种将对象转换为字节流的过程,以便可以将对象保存到磁盘上,将其传输到网络上,或者将其存储在内存中,以后再进行反序列化,将字节流重新转换为对象。序列化在 Java 中是通过 java.io.Serializable 接口来实现的,该接口没有任何方法,只是一个标记接口,用于标识类可以被序列化。反序列化则是打开这个文件,读取序列化的数据,然后将其还原为对象,以便在程序中使用。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。如果文件已经存在,它会被覆盖。

2024-07-25 19:56:19 393

原创 泛型、异常

这些异常在编译时不强制要求处理,通常是由程序中的错误引起的,例如 NullPointerException、ArrayIndexOutOfBoundsException 等,这类异常可以选择处理,但并非强制要求。最具代表的检查性异常是用户错误或问题引起的异常,这些异常在编译时强制要求程序员处理。当方法内部抛出指定类型的异常时,该异常会被传递给调用该方法的代码,并在该代码中处理异常。这类异常通常使用 try-catch 块来捕获并处理异常,或者在方法声明中使用 throws 子句声明方法可能抛出的异常。

2024-07-25 19:53:57 607

原创 Map储存键值对

/一支树上的元素低于6个这个树就会退化成链。//如果数组的树化阈值没有达到64则优先树化。TreeMap的底层实现是TreeSet。HashMap的底层实现是HashSet。//容量阈值达到容量的0.75就开始扩容。key不能为null, key是唯一的。key和value都不可以为null。key可以为空的但只能有一个为空。//一个链达到8就对该链进行树化。value值可以为null。//数组的默认容量是16,//每次扩容两倍向左移一位。"删除的value值:"//最小树化容量阈值64。

2024-07-25 19:47:27 219

原创 集合collection

有点类似于我们之前说的 `Linked`HashMap 其内部是基于 HashMap 实现一样,不过还是有一点点区别的,可以按照添加顺序遍历。静态内部类可以使用 static 关键字定义,静态内部类我们不需要创建外部类来访问,遍历的方式: 先序遍历 中序遍历 后序遍历:访问根节点的顺序。同一个TreeSet 对象中存储的内容都应该是可以比较的。:一个类的静态代码块只会执行一次 加载类对象时执行。有序和无序的区别:取出的顺序和添加的顺序是一样的。"父类------带参数构造方法"

2024-07-25 19:47:00 667

原创 final 最终的

fianl最终的;最后的publicstaticvoidmainStringargsfinalinta=22;System.out.printlna;finalint[]arr=newint123;arr24;System.out.printlnArrays.toStringarr;}finalintheight;publicEasyFinal()height200;finalclass。

2024-07-20 00:15:00 118

原创 Math Random 随机数

doubleran=Math.random()10;//[0,10)System.out.printlnran;//ran*82+8;num=Math.roundran;System.out.printlnnum;//3num=Math.round0.4;System.out.printlnnum;//0num=Math.round0.5;System.out.printlnnum;//0.5往上取num=Math.

2024-07-19 17:30:00 382

原创 Date类 日期时间

/月份返回值0~11之间 小时和分钟秒毫秒也是0~....//HH:24小时制 hh:12小时制 SSS:毫秒。//Asia/Shanghai 打印现在的时区。获取当前时间--执行时。

2024-07-19 10:00:00 120

原创 StringBuilder StringBuffer

在拼接字符串中时不要产生中间串 StringBuilder StringBuffer。调用append往StringBuilder数组中追加字符。StringBuilder默认容量是16个字符。需要线程安全则使用StringBuffer。追加字符时容量不够需要扩容(value)添加过程中中没有产生任何的字符串对象。StringBuffer线程安全的。StringBuilder扩容。

2024-07-19 07:30:00 102

原创 String类 常量池 常量优化

程序中第一次使用量的形式定义“123”,会将这个字符串对象存入到<字符串常量池中>字符串怎样加入常量池中-----使用量的方式声明的字符串就会加入到常量池中。否则,将此String对象添加到池中,并返回对此String对象的引用。这两行代码只会创建一个对象,就是字符串常量池中的那个。之后使用量的形式使用该对象,就执行使用常量池中的对象。返回 str对象在字符串常量池中的副本对象。函数方法调用需要运行的则不不执行常量池中的对象。如果池中有相等的字符串则返回池中的字符串。"abd123您好!

2024-07-19 06:00:00 905

原创 接口 interface

接口中可以定义属性------都是常量常量名大写用下划线区分。Java中使用implements声明一个类实现接口。函数式接口:如果一个接口中只有一个为实现的方法。接口中的方法是抽象方法--没有具体实现的方法。接口中可以定义default修饰的实体方法。接口中定义的方法 抽象方法,接口中定义常量必须要定义一个常量。接口中只能定义方法,没有方法体。接口使用extends继承接口。查看这个接口是否是函数式接口。接口中定义的属性都是常量,一个类可以实现多个接口。

2024-07-19 05:45:00 138

原创 static 静态的

本类的对象也可以调用静态的属性和方法,调用的方式还是静态方式。可以使用类名 直接调用static修饰的属性和方法。//static 静态的 类。static 修饰的属性属于类。静态属性对所有的对象是共享的。不加static修饰。

2024-07-19 00:45:00 158

原创 包装类(缓存机制)

/报错引用数据类型不相同不能比较。//基本数据类型和封装类型比较,拆箱进行比较,==数据类型比较的数值。基本数据类型的封装类型可以和基本数据类型直接转换。//Long类型赋值后面必须加L。//Long类型赋值后面必须加L。//Long类型赋值后面必须加L。//Long类型赋值后面必须加L。基本数据类型的封装类型的缓存。基本数据类型对应的封装类型。//Long类型数值后加L。//返回的是基本数据类型。//返回的是封装类型。

2024-07-19 00:30:00 404

原创 抽象类abstract

抽象方法:使用abstract修饰的方法,没有方法体,可以有方法参数。抽象类继承抽象类 可以实现抽象方法 也可以不实现抽象方法。抽象类可以继承实体类。

2024-07-18 20:16:26 145

原创 浅拷贝 深拷贝 clone

浅拷贝,对象内属性引用的对象只会拷贝引用地址,而不会将引用的对象重新分配内存。//Student{teacher=Teacher{name='唐僧'}}//Student{teacher=Teacher{name='唐僧'}}//Student{teacher=Teacher{name='唐僧'}}//Student{teacher=Teacher{name='阿旺'}}Object clone() 方法用于创建并返回一个对象的拷贝。//将当前对象的teacher的属性克隆一遍。//将当前对象克隆一份。

2024-07-18 20:14:38 360

原创 Object类

finalize方法是一个对象的最后执行的代码。对象要被销毁时执行的代码。

2024-07-18 20:14:03 199

原创 Java面向对象

一个类可以拥有多个方法,在上面的例子中:eat()、run()、sleep() 和 name() 都是 Dog 类的方法。在引用对象的范围、用途和语法上有一些共同点,但它们主要是用于不同的场景,分别处理同类中和父子类中的对象引用。:重写造成的,只有在直行到该行代码,才能确定执行的是那个类中的方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。:隐藏类中的细节(属性方法),不能让其他类随意的访问。:重载造成的,在类编译时就可以确定调用的是哪一个方法。:类是一个模板,它描述一类对象的行为和状态。

2024-07-16 19:15:36 542

原创 Java方法函数过程

形参:声明方法中的参数publicstaticintmax(inta,intb){}void方法中直接写 return;实参:调用方法中实际传入的参数max(a,b);定义一个sum方法接受两个int返回两数之和。返回值类型方法名(参数列表){ 方法体 }返回值类型该方法必须返回一个这个类型的对象。在同一个类中方法名相同参数列表不同即为重载。99阶乘9999*98*...*1。使用:将可变参数当做数组来使用。

2024-07-16 19:15:00 403

原创 Java数组

(int)(Math.random()*10)// 随机生成 [0,10)的整数。声明一个数组并赋值,将最大值和最小值交换位置,并打印结果。查找数组元素下标 返回第一个找到的下标 未找到返回-1。声明一个二位数组并赋值,求这个数组所有元素之和。声明一个数组并赋值,求这个数组所有元素之和。声明一个数组并赋值,打印出数组的最大值。() //随机生成 [0,1)的小数。打印出1000以内所有完数,质数。"数组元素之和为:"

2024-07-16 01:00:00 279

原创 循环语句 while do... while for

虽然所有循环结构都可以用 while 或者 do...while表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。while 循环中,程序立即跳转到布尔表达式的判断语句。增强 for 循环提供了一种简化的语法,可以直接遍历数组中的元素,无需使用索引。在 for 循环中,continue 语句使程序立即跳转到更新语句。break 跳出最里层的循环,并且继续执行该循环下面的语句。

2024-07-15 20:40:03 236

原创 条件语句 if else switch case

swithc 匹配某一个变量的值 匹配到case项 执行case。byte short int char String Enum(枚举)所有的case都没有匹配成功 执行default。break 代码块结束。//如果布尔表达式的值为false。//如果布尔表达式的值为true。//可以有任意数量的case语句。

2024-07-15 20:38:57 129

原创 运算符 算数运算符

/ 多个表达式运算时,前面的表达式已经可以明确了表达式的结果了。// && 逻辑与运算符 || 逻辑或运算符!// && 第一个为false 值为false。// || 第一个为true 值为true。// ++a --a 先自增自减再赋值。// % 取余正负号与前面数正负号相同。// a++ a-- 先赋值再自增自减。//后面的表达式则不需要运行了。// 比较基本数据类型的值是否一样。// 将a 当成普通变量。// 结果是boolean类型。// 结果是boolean类型。

2024-07-15 12:15:00 230

原创 基本数据类型及转换

/ 整数型:byte short int long。//取值范围小的类型可以自动转换成大的类型。// 浮点型:float double。隐式转换(程序自动完成的转换)// 布尔型:boolean。// Java基本数据类型。// 字符型:char。boolean类型不能和其他类型转换。

2024-07-15 07:45:00 136

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除