- 博客(46)
- 收藏
- 关注
原创 Spring事务控制
说明:JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层的事务处理解决方案。Spring框架为我们提供了一组事务控制的接口。具体在后面的小节介绍。这组接口是在spring-tx.RELEASE.jar中。spring的事务控制都是基于AOP的,它既可以使用编程的方式实现,也可以使用配置的方式实现。我们学习的重点是使用配置的方式实现。
2024-01-09 20:38:04
1306
原创 静态代理和动态代理
静态代理是指代理类的代码在编译时就已经确定,也就是说,代理类的实现是由程序员手动编写的。静态代理的优点在于实现简单,易于理解和维护。但是,由于代理类的代码在编译时就确定,因此无法在运行时动态地改变代理类的行为。在Java中,静态代理的实现方式通常是通过接口实现的。首先定义一个接口,然后编写一个实现了该接口的类,最后编写一个代理类,该代理类调用实现了接口的类的相应方法。这样,就可以通过代理类来调用实现了接口的类的方法,而不需要修改原始代码。
2024-01-08 21:09:48
1634
原创 Spring AOP(详解)
AOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对程序进行增强:权限校验,日志记录,性能监控,事务控制.
2024-01-08 20:49:23
1160
原创 基于注解的IOC配置
学习基于注解的IOC配置,大家脑海里首先得有一个认知,即注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。
2024-01-05 20:22:42
1053
原创 Spring中的工厂类ApplicationContext和BeanFactory
ApplicationContext:是IOC容器另一个重要接口, 它继承了BeanFactory的基本功能, 同时也继承了容器的高级功能,如:MessageSource(国际化资源接口)、ResourceLoader(资源加载接口)、ApplicationEventPublisher(应用事件发布接口)等。在BeanFactory中,很多功能需要以编程的方式实现,而在ApplicationContext中则可以通过配置实现。ApplicationContext的实现类,如下图。
2024-01-05 19:31:09
946
原创 Spring的IOC解决程序耦合
DI(Dependency Injection)依赖注入,在Spring创建对象的同时,为其属性赋值,称之为依赖注入。
2024-01-04 21:09:38
1057
原创 IOC解决程序耦合
IOC (Inverse of Control)即控制反转:由ioc容器来创建依赖对象,程序只需要从IOC容器获取创建好的对象。我们在获取对象时,都是采用new的方式。是主动的。我们获取对象时,同时跟工厂要,有工厂为我们查找或者创建对象。是被动的。这种被动接收的方式获取对象的思想就是控制反转,它是spring框架的核心之一。
2024-01-04 20:39:58
424
原创 程序的耦合
程序的耦合是指程序中各个模块之间的依赖关系。如果一个模块对其他模块有很强的依赖关系,那么这个模块的修改、替换或测试就可能会影响到其他模块。因此,耦合是评估软件设计好坏的一个重要指标。
2024-01-02 21:15:27
1434
原创 什么是反射?(详解)
反射是计算机编程中的一个重要概念,它指的是在运行时动态地获取对象的状态信息并对其进行操作的能力。在面向对象编程中,反射通常用于在程序运行时动态地创建对象、调用方法和修改属性等操作。反射的实现通常依赖于语言提供的特定机制或库。例如,Java提供了反射API,可以在运行时动态地加载类、创建对象、调用方法和获取属性值等。在.NET中,反射则通过System.Reflection命名空间下的类实现,可以实现类似的功能。
2024-01-02 17:16:18
2469
原创 Mybatis框架详细总结
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs (Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。MyBatis是一个优秀的持久层框架,它通过配置文件和注解方式将接口与SQL语句绑定,简化了JDBC的使用,提高了开发效率。
2023-12-29 21:22:01
950
原创 servlet总结
Servlet是线程安全的,这意味着多个请求可以在同一实例上并发执行。为了保持线程安全,Servlet不应该持有任何线程特定的状态信息,并且其方法(如service()、doGet()和doPost())应该是无状态的。
2023-12-28 16:57:44
614
原创 web三层架构
三层架构就是把整个软件系统分为三个层次表现层(Presentation layer)业务逻辑层(Business Logic Layer)数据访问层(Data access layer)三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。
2023-12-28 14:20:42
4346
原创 过滤器和监听器的使用
监听器可以监听ServletContext,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
2023-12-27 20:37:55
873
原创 Cookie和Session
http协议是一个无状态的协议,你每一个跳转到下一个页面的时候都是需要先登录才能使用,这样就很麻烦比如淘宝,没有cookie和session的话,用户在首页已经登录上去了,但是需要再次登录才能选择商品,需要再次登录才能放到购物车,需要再次登录才能然后购买,这样用户的体验是相当差的.
2023-12-27 20:01:38
924
原创 Request对象和Response对象
客户端发送请求,而请求是以HTTP请求数据格式进行发送,因而Servlet就创建了一个Request类来封装这些接收数据。
2023-12-26 21:48:59
961
原创 ServletConfig和ServletContext对象
ServletContext 是针对整个web 应用而言的,在web 应用启动时被容器创建,用来存储应用级别的信息,例如应用名称、上下文路径等。ServletContext不像ServletConfig接口在Servlet标签里配置,而是针对于整个应用的配置,也叫全局的初始化参数;ServletContext是javax.servlet包下的一个接口,又称上下文对象,是配置对象也是一个域对象;ServletContext是javax.servlet包下的一个接口,又称上下文对象,是配置对象也是一个域对象;
2023-12-26 21:23:36
892
原创 重定向和转发(完整理解及总结)
请求重定向(Redirect):请求重定向指的是服务器端接收到客户端的请求之后,会给客户端返回了一个临时响应头,这个临时响应头中记录了,客户端需要再次发送请求(重定向)的 URL 地址,客户端再收到了地址之后,会将请求发送到新的地址上,这就是请求重定向请求转发(Forward):发生在服务端程序内部,当服务器端收到一个客户端的请求之后,会先将请求,转发给目标地址,再将目标地址返回的结果转发给客户端。而客户端对于这一切毫无感知的。
2023-12-26 20:18:04
2903
原创 Servlet获取前端请求的参数和中文乱码的解决方案
学好Servlet必须紧紧围绕着请求和响应这两个概念。下面开始写在请求的时候前端带数据到servlet里面,我们servlet要接收前端给我们的这个数据。
2023-12-26 19:37:48
514
原创 Servlet入门
Servlet的生命周期就是servlet类对象什么时候创建?什么时候调用对应的方法,什么时候销毁。//创建对象// 使用对象// 使用对象// 销毁对象也就是说自定义对象的生命周期由我们程序员自己手动控制。但是!!!Servlet它不是一个普通的java类。是一个被tomcat服务器调用的。所以Servlet是生命周期是被tomcat服务器去控制的。
2023-12-25 21:20:14
1244
原创 Http协议
HTTP,全称是 HyperText Transfer Protocol,中文叫做超文本传输协议。简单来说,Http协议是浏览器和服务器之间进行数据传输需要遵循的格式规范。它是一个应用层协议,承载于TCP协议之上。
2023-12-25 19:52:41
876
原创 MyBatis的动态SQL
MyBatis的映射文件中支持在基础SQL上添加一些逻辑操作,并动态拼接成完整的SQL之后再执行,以达到SQL复用、简化编程的效果。Mybatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能。
2023-12-23 20:25:15
948
原创 MyBatis的缓存
为什么使用缓存?首次访问时,查询数据库,并将数据存储到内存中;再次访问时直接访问缓存,减少IO、硬盘读写次数、提高效率Mybatis中的一级缓存和二级缓存一级缓存:它指的是mybatis中的SqlSession对象的缓存。当我们执行完查询之后,查询的结果会同时存在在SqlSession为我们提供的一块区域中。当我们再次查询同样的数据,mybatis会先去SqlSession中查询是否有,有的话直接拿出来使用。当SqlSession对象消失时,Mybatis的一级缓存也就消失了。
2023-12-23 17:33:05
1106
2
原创 MyBatis的延迟加载
前面一篇文章,介绍了多表查询,在实际使用中,我们会经常性的涉及到多表联合查询,但是有时候,并不会立即用到所有的查询结果。针对这样一种情况,延迟加载这一种机制就出现了,延迟加载(懒加载)顾名思义,就是对某种信息推迟加载,这样的技术也就帮助我们实现了 “按需查询” 的机制,在一对多,或者多对多的情况下。
2023-12-22 22:02:46
318
原创 MyBatis的关联查询
实体间的关系(拥有 has、属于 belong)OneToOne:一对一关系(account ←→ user)OneToMany:一对多关系(user ←→ account)ManyToMany:多对多关系(user ←→ role)什么是关联查询当访问关系的一方时,如果需要查看与之关联的另一方数据,则必须使用表链接查询,将查询到的另一方数据,保存在本方的属性中关联查询的语法指定“一方”关系时(对象),使用指定“多方”关系时(集合),使用下面以案例的形式展现给大家。
2023-12-22 21:14:05
1497
原创 MyBatis的配置文件
mybatis-config.xml 文件中的元素节点是有一定顺序的,节点位置必须按以上位置排序,否则会编译错误。主要用于配置数据连接和MyBatis运行时所需的各种特性:包含了影响MyBatis行为甚深的设置(settings)和属性(properties)mybatis-config.xml是Mybatis的全局配置文件,名称可以是任意,但是一般命名都为(mybatis-config)
2023-12-20 21:20:31
1731
1
原创 MyBatis的ORM映射
ORM,Object-Relationl Mapping,对象关系映射,它的作用是在关系型数据库和对 象之间作一个映射处理.在MyBatis中,ORM映射的配置主要包括两个部分:数据库表和之间的映射关系配置,以及SQL语句与Java方法之间的映射关系配置。MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系,二者不同时无法自动ORM.
2023-12-20 19:54:35
444
1
原创 String、StringBuilder、StringBuffer的区别
String:适用于少量的字符串操作的情况StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。
2023-07-18 21:00:00
103
1
原创 JAVA猜数字游戏进阶版
此次在上次的基础上增加了游戏分数的设置和对异常的处理。还增加了游戏难度的随机性,扩充了猜数的种类范围,在10, 50, 100, 200, 500, 1000中随机选择一种。增加了try{}catch{}语句。增加了分数的设置,猜的次数越多,分数越少。
2023-07-18 20:05:20
287
1
原创 final、finally与finalize的区别
类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。这里需要提醒大家注意的是,不可改变的只是这个变量所保存的引用,并不是这个引用所指向的对象。变量可以在定义时初始化,也可以在静态初始化块中初始化,不可以在初始化块中初始化。修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即它是个常量;的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。类中定义的,因此所的类都继承 了它。修饰的是一个对象,就表示这个变量被赋予的引用是不可变的。
2023-07-18 19:48:13
238
1
原创 idea下载插件自动生成get、set方法
很多时候,我们设置一个参数或者new一个对象的时候,需要一个一个的去写set、get等方法,我们安装了generateallsetter插件就可以一键生成了。我们新建一个类,比如引入刚刚新建的Book类,new一个Book,此时光标放在book上,按住Alt+Enter键就可以选择想要生成的东西。虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度。新建一个类,定义一个属性,会自动生成这些方法。让代码变得简洁,不用过多的去关注相应的方法。
2023-07-13 20:00:56
4247
1
原创 随机双色球的生成
033[31m 数 、033[0m 是用来改变颜色的31m-39m是用来控制字颜色的,31m为红色。该代码利用for循环生成五组随机数组,引入Random类,产生随机数,把随机数控制在1-32。rand.nextInt(1, 33)代码产生的随机数就是1到32,不包括33。因为双色球号码不能重复,所以要遍历数组用if语句来判断是否有相同的数。利用数组,随机生成五组 双色球 候选号红(
2023-07-12 19:10:41
2030
1
原创 java中break和coutinue的使用方法与区别
无论是while循环还是for循环,有两个特别的语句可以使用,就是break语句和continue语句。
2023-07-11 21:25:26
259
原创 插入排序原理及代码实现(Java代码)
插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
2023-07-11 18:56:50
119
原创 几个简单的java时间函数作业
计算两个日期之间的天数(两种方法均可以)00 - now(三种方法均可以)这里以5天前和10天后为例。生成指定范围的随机日期对象。编写程序输出是星期几。编写程序实现分时问候。
2023-07-10 21:14:19
76
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人