- 博客(75)
- 收藏
- 关注
原创 【面试题1】128陷阱、==和equals的区别
Java中的128陷阱揭示了Integer包装类的自动装箱机制:在-128到127范围内会复用缓存对象,超出则创建新对象。这导致用==比较超出范围的Integer时,即使值相等也会返回false。根本原因是IntegerCache缓存池的存在,使得==比较的是对象地址而非值。正确做法是使用equals()方法比较包装类对象的值。类似缓存机制也存在于其他包装类中。==运算符比较基本类型的值或引用类型的地址,而equals()默认比较地址但可重写为比较内容。开发中比较包装类对象时应优先使用equals()。
2025-12-25 11:23:51
208
原创 【Springboot】数据层开发-集成MyBatis-Plus
MyBatis-Plus是MyBatis的增强工具,与SpringBoot集成可实现高效开发。它提供无侵入式增强、低性能损耗的CRUD操作,支持Lambda表达式、多种主键策略和代码生成器。集成步骤包括:1)创建数据库表;2)引入starter依赖;3)配置数据源;4)使用@MapperScan扫描Mapper;5)通过继承BaseMapper实现基础CRUD。测试时可直接调用selectList(null)查询所有数据,展现了快速开发优势。(150字)
2025-12-24 16:23:38
525
原创 【Springboot】数据层开发-JdbcTemplate和Mybatis整合
本文介绍了SpringBoot整合JdbcTemplate和MyBatis的两种方式。首先通过JdbcTemplateAutoConfiguration实现数据库操作,只需注入JdbcTemplate即可执行SQL查询。然后详细说明了MyBatis的注解方式集成,包括创建Mapper接口、使用@Select等注解编写SQL,以及通过@Options处理自增主键。同时介绍了MyBatis的XML配置方式,包括全局配置文件和映射文件的编写。文章还提到可以通过@MapperScan批量扫描Mapper接口,以及配
2025-12-23 17:27:50
601
原创 【Springboot】数据层开发-数据源自动管理
摘要:SpringBoot通过自动配置机制简化数据源管理,默认使用HikariCP连接池,支持Tomcat、DBCP2等类型。通过引入Druid依赖和配置类,可替换为阿里Druid连接池,并启用其监控功能。配置类需注册StatViewServlet和WebStatFilter,通过/druid路径访问监控界面,实现连接池状态、SQL执行等可视化监控。该方案既保持SpringBoot的约定优于配置特性,又扩展了企业级监控能力。
2025-12-23 15:42:22
643
原创 【Springboot】SpringBoot 整合 SpringMVC
SpringBoot通过spring-boot-starter-web实现SpringMVC的零配置整合,自动装配DispatcherServlet、视图解析器等核心组件,保留扩展能力。开发者可通过application.yml调整静态资源路径等配置,或实现WebMvcConfigurer接口定制拦截器、格式化器等。关键点包括:避免使用@EnableWebMvc以保留自动配置;通过Formatter解决日期类型转换;集成FastJson替换默认JSON处理器;拦截器需排除静态资源路径。SpringB
2025-12-21 10:08:42
899
原创 idea多模块项目运行设置
本文介绍了如何在IDE中配置前后端分离项目的模块。后端模块通过导入pom.xml或build.gradle文件添加,建议勾选"Create module groups"选项;前端模块需新建Static Web模块并指定路径。完成路径设置后,项目即可正常运行。操作路径均为File→Project Structure→Modules,通过+号添加相应模块。
2025-12-20 23:41:12
161
原创 【Spring框架】JDBC模板技术与事务管理
JDBC模板技术是Spring框架提供的简化数据库操作的封装机制,核心类JdbcTemplate基于模板设计模式,封装了JDBC的固定流程(连接获取、资源释放等),开发者只需关注SQL编写和结果处理。文章详细介绍了JdbcTemplate的配置方式(XML和注解)、基本CRUD操作、事务管理实现(包括声明式和注解式),以及结合Druid连接池的实践。通过模拟转账案例,展示了Service层与Dao层的协同工作模式,并对比了继承JdbcDaoSupport与直接注入JdbcTemplate两种实现方式的
2025-12-20 16:03:29
1331
原创 【Spring框架】AOP开发方式
AOP(面向切面编程)是一种补充OOP的编程范式,通过切面模块化处理横切关注点(如日志、事务等)。其核心优势包括减少重复代码、提升开发效率和降低维护成本。Spring AOP提供XML配置和注解开发两种方式,支持前置、后置、环绕等通知类型,底层采用JDK动态代理或CGLIB技术实现。配置时需定义切入点表达式匹配目标方法,并通过织入过程创建代理对象。AOP实现了业务逻辑与横切关注点的解耦,显著提升代码复用性和可维护性。
2025-12-20 14:39:37
707
原创 【Spring框架】通过JDK动态代理实现AOP
本文介绍了基于JDK动态代理实现事务管理的方案。通过PxUtils工具类统一管理数据库连接和事务,使用ThreadLocal确保同一事务中的SQL使用相同连接。采用动态代理技术,在不修改业务代码的前提下,由代理对象自动添加事务控制逻辑:在执行目标方法前开启事务,执行后提交事务,异常时回滚。持久层通过PxUtils获取连接,业务层实现核心逻辑,代理层处理事务控制,实现了关注点分离。该方案通过接口代理实现AOP思想,将事务管理这一横切关注点与业务逻辑解耦,确保操作原子性。
2025-12-19 21:19:53
694
原创 【Spring框架】IOC开发方式
本文介绍了Spring框架中IOC的两种开发方式:配置文件方式和注解方式。配置文件方式通过XML配置bean及其依赖关系,演示了业务层和持久层的实现过程,包括创建Maven工程、导入依赖、编写DAO和Service层代码。注解方式则通过@Component等注解简化配置,详细说明了常用注解的功能及使用场景。文章还介绍了纯注解开发模式,使用@Configuration和@ComponentScan替代XML配置,以及Spring整合JUnit单元测试的方法。最后对比了整合前后测试代码的差异,展示了Spring
2025-12-19 18:50:41
1136
原创 【Spring框架】IOC核心技术
摘要:Spring框架是一个轻量级的Java企业应用开发框架,通过控制反转(IoC)和面向切面编程(AOP)实现解耦。IoC容器负责管理Bean的生命周期和依赖注入,支持XML和注解两种配置方式。Spring提供三种Bean实例化方法:默认构造方法、静态工厂和动态工厂。依赖注入(DI)通过setter或构造器方式实现,支持基本类型、集合类型等复杂属性的注入。配置文件支持多文件管理,可通过import标签或直接加载多个文件。Spring框架简化了企业级开发,提高了代码的可维护性和可测试性。
2025-12-19 16:17:29
986
原创 JDBC以及工具类介绍
JDBC是Java操作关系型数据库的标准API,包含在java.sql和javax.sql包中。它通过统一接口规范屏蔽数据库差异,核心包括Connection、Statement、ResultSet等接口。工作流程包含驱动加载、建立连接、执行SQL、处理结果和释放资源。JDBC工具类从1.0到3.0逐步优化:1.0基础实现;2.0通过properties文件管理配置;3.0引入Druid连接池提升性能。针对SQL注入漏洞,推荐使用PreparedStatement进行参数化查询,通过预编译和参数占位符机制确
2025-12-18 23:11:46
869
1
原创 【SpringMVC】实现文件上传
本文介绍了SpringMVC实现文件上传的完整流程。通过Maven引入Spring核心包(5.0.2.RELEASE)和文件上传相关依赖(commons-fileupload 1.3.1),在配置文件中定义CommonsMultipartResolver组件并设置8MB上传限制。前端使用multipart/form-data表单提交文件,后端通过@Controller接收MultipartFile对象,利用UUID重命名文件后保存到指定目录(/uploads)。整个过程包括:配置解析器、创建上传表单、
2025-12-18 17:54:21
275
原创 【SpringMVC】异常处理和拦截器
本文介绍了SpringMVC中的异常处理和拦截器机制。异常处理部分讲解了Controller-Service-Dao层异常向上抛出的流程,以及通过自定义异常类SysException和异常处理器SysExceptionResolver实现统一异常处理的方法。拦截器部分对比了过滤器与拦截器的区别,详细说明了如何实现HandlerInterceptor接口创建自定义拦截器,并配置多个拦截器形成拦截链。重点分析了拦截器三个核心方法(preHandle、postHandle、afterCompletion)的执行时
2025-12-18 14:53:48
1110
原创 【SpringMVC】RequestMapping注解与请求参数绑定
摘要:本文介绍了B/S架构开发中的三层架构与MVC模式。三层架构包含表现层(采用MVC)、业务逻辑层和数据访问层,实现职责分离。MVC模式将应用分为Model(数据)、View(视图)和Controller(控制器)三个组件。详细讲解了SpringMVC的入门实现,包括配置DispatcherServlet、编写控制器类、视图解析器设置等核心流程,并阐述了请求参数绑定的多种方式(简单类型、对象、集合等)及自定义类型转换器的实现方法。最后补充了在控制器中使用原生ServletAPI对象的技术要点。
2025-12-17 23:55:41
1103
原创 【SpringMVC】请求接收与结果响应
本文介绍了SpringMVC中常用的参数接收注解及其用法: @RequestParam:用于获取请求参数,可设置默认值和必填验证; @RequestBody:用于接收请求体内容,支持JSON绑定到实体类或字符串; @RequestHeader:用于获取请求头信息; @CookieValue:用于获取指定Cookie值; @PathVariable:用于RESTful风格的URL参数获取。同时介绍了控制器方法的多种返回值类型:字符串、void、ModelAndView对象,以及请求转发和重定向的实现方式。最后
2025-12-17 15:18:23
651
原创 【Maven】生命周期、依赖与继承
Maven构建系统通过抽象的生命周期机制管理项目构建过程,包含Clean、Default和Site三套独立生命周期。其核心思想是将实际工作委托给插件,通过阶段绑定实现构建自动化。Maven支持依赖传递管理,可通过optional标记或exclusion元素控制依赖范围。继承机制允许子模块复用父POM配置,dependencyManagement实现统一版本管理。聚合功能支持多模块项目统一构建,properties元素便于集中管理变量配置。这些特性共同构成了Maven强大的项目管理和构建能力。
2025-12-16 14:51:26
956
原创 【Maven】仓库与私服架构
Maven仓库是存储Maven构件(JAR、WAR等)的统一位置,分为本地仓库和远程仓库。本地仓库默认位于用户目录的.m2/repository下,可通过settings.xml修改路径。远程仓库包括中央仓库和私服,私服是架设在局域网的内部仓库,可代理中央仓库下载并管理公司内部构件。Nexus是常用的私服工具,提供Hosted(宿主)、Proxy(代理)和Group(仓库组)三种仓库类型。配置私服需修改settings.xml设置认证信息,并在项目pom.xml中配置分发地址。构件发布到私服使用deploy
2025-12-16 10:16:36
1117
原创 【Maven】概念、项目的创建
Maven是Apache基金会推出的Java项目管理工具,主要用于项目构建、依赖管理和项目信息管理。它通过预定义的生命周期和标准化目录结构简化了Java项目的开发流程,支持自动化构建、测试和部署。Maven的核心是POM文件,管理项目配置和依赖关系,通过本地仓库和中央仓库实现依赖管理。相比Ant,Maven具有约定优于配置、生命周期管理和集成依赖管理等优势。安装Maven需配置JDK和环境变量,其目录结构包含bin、conf、lib等关键目录。典型Maven项目遵循标准目录结构,通过mvn命令执行编译、测试
2025-12-15 23:30:55
866
原创 【Spring框架】SpringMVC请求与响应
在 SpringMVC 中,请求映射(Request Mapping)是核心机制之一,它负责将客户端发送的 HTTP 请求与控制器(Controller)中的具体方法建立关联,是请求进入后端处理的 “入口导航”。@RequestMapping 是 SpringMVC 中定义请求映射的基础注解,可用于类级别和方法级别,作用是指定一个 HTTP 请求的路径、方法、参数等条件,当请求满足条件时,会被映射到对应的控制器方法。标注在方法上:指定具体的请求路径,与类上的路径共同组成完整路径。
2025-12-14 10:01:02
777
原创 【Spring框架】SpringMVC基本原理与配置
SpringMVC 是基于 Servlet 的 MVC 框架,其核心是通过前端控制器 DispatcherServlet 协调各个组件完成请求处理与响应。实际上 Spring MVC 本质就是一个servlet,是对原生的servlet进行了封装,在以前浏览器的每一次请求都需要写一个对应的servlet,现在只需要将浏览器的请求和响应交给DispatcheServlet进行统一的处理。
2025-12-13 20:50:52
925
原创 【Spring框架】SpringJDBC
接着,使用定义了名为txAdvice的事务通知,该通知关联了前面定义的txManager事务管理器,并在中通过设置了事务属性:name="*"表示对匹配的方法都应用该规则,propagation="REQUIRED"指定了事务传播行为为"如果当前没有事务则新建一个,若已有事务则加入其中",isolation="DEFAULT"表示使用数据库默认的事务隔离级别,read-only="false"说明这不是只读事务。REQUIRED(默认):如果当前存在事务则在该事务中运行,如果没有事务则创建一个新的事务;
2025-12-13 15:58:56
680
原创 如何在Linux上部署Web项目
本文详细介绍了在Linux服务器上部署JavaWeb项目的完整流程。主要包括:1)安装配置JDK环境;2)安装Tomcat并开放8080端口;3)使用yum安装MySQL并配置远程连接;4)防火墙设置及端口开放;5)项目部署要点,包括路径修改、数据库配置、打包上传等;6)多服务配置方法;7)项目访问测试。整个流程涵盖了从环境搭建到项目上线的关键步骤,并提供了具体命令和配置示例,为JavaWeb项目部署提供了完整参考方案。
2025-12-12 16:41:43
1049
原创 SSM聚合工程部署介绍
当使用 Maven 对 ham-portal 进行package打包时,Maven 会去本地 Maven 仓库里找到 ham-core-1.0-SNAPSHOT.jar 这个文件,自动把 ham-core-1.0-SNAPSHOT.jar 文件复制到 ham-portal.war 包内部的 WEB-INF/lib/ 目录下。父工程打包成功后,所有子模块的打包也会自动全部打包好,将这三个war包复制到 tomcat 的webapps目录下,公共模块的jar包不用复制过来。
2025-12-12 11:01:43
771
原创 Linux基本操作指令
想要进入进入编辑状态 按【 i 】键 ,当左下角出现insert时就可以编辑了。mv 文件夹名 路径前缀/新文件夹名字 (路径前缀如果没有表示重命名)压缩 tar -zcvf 压缩包名字.tar.gz 要压缩的文件夹名。如果没有编辑文件内容 在非编辑状态 输入【 :q 】即可退出文件。压缩 zip -r 压缩包名字.zip 要压缩的文件夹名。cp -r 目标文件夹 路径前缀/新文件夹名字。rm -r文件夹名 交互式删除文件夹。rm -rf文件夹名 强制删除文件夹。8、删除文件夹 rmdir 文件夹名。
2025-12-12 09:47:57
271
原创 【Git学习】GitLab介绍
GitLab是一款基于Git的开源DevOps平台,集成了代码管理、CI/CD、项目管理等功能。本文介绍了GitLab的核心价值在于提供一体化DevOps解决方案,并详细说明了在CentOS 7.6系统上安装GitLab 10.8.4的步骤,包括解决依赖问题、修改配置文件、调整端口设置等关键操作。同时提供了GitLab常用管理命令,如服务启停、配置重载等。安装完成后可通过Web界面访问,默认使用root账户登录,其使用方式与GitHub/Gitee类似。
2025-12-11 17:03:55
931
原创 【Git学习】Git的tag标签
Git标签是用于标记特定提交的静态指针,常用于版本发布。与分支不同,标签不会随新提交移动,且独立于分支存在。Git支持轻量级标签(git tag v1.0.1)和附注标签(git tag -a v1.0.2 -m '注释')。管理标签包括创建、查看(git tag)、删除本地标签(git tag -d)和远程标签(git push origin :refs/tags/)。检出标签(git checkout v1.0.0)会进入分离头指针状态,为避免提交丢失,建议创建新分支(git checkout -b d
2025-12-11 15:36:45
1051
原创 【Git学习】Git分支的多人协作
本文介绍了Git在单一分支多人协作中的基本操作与冲突处理。主要内容包括:1)本地与远程仓库配置,展示如何设置不同用户的本地仓库信息;2)基本协作流程,通过鲁智深和林冲的案例演示代码修改、推送和拉取过程;3)冲突处理机制,当多人修改同一文件时的解决方案;4)分支管理操作,包括分支创建、推送、拉取(区分git fetch和git pull)以及删除远程分支的方法;5)远程跟踪分支的维护,强调git remote prune origin的重要性。文章通过具体命令示例,清晰地展示了Git协作开发中的关键环节和常见
2025-12-11 14:10:59
1047
原创 【Git学习】Git远程仓库gitee与github
Git 仓库(Git Repository)是 Git 版本控制系统的核心,用于存储、追踪和管理项目的所有文件及其历史变更记录。不仅能保存当前的代码 / 文件状态,还能记住每一次修改的细节,随时可以回溯到过去的任何版本,或多人协作时高效同步代码。Git 远程仓库(Remote Repository)是托管在远程服务器上的 Git 仓库,是团队协作、代码共享和版本备份的核心载体。它与本地仓库对应,既存储项目的完整代码和版本历史,也作为不同开发者本地仓库之间同步的中枢节点。
2025-12-10 23:39:28
493
原创 【Git学习】Git分支的本地操作
这样既保证了主线的稳定性,又实现了并行开发。当线上代码出现 bug 时,我们基于 stable 分支开一个bugfix分支,修复 bug之后再将 bugfix分支合并到stable分支并进行发布,同时develop 分支作为最新最全的代码分支,bugfix分支也需要合并到 develop 分支上去。release分支作为预发布分支,release 分支从 develop 分支 fork 出来,最终会合并到 develop 分支和 stable 分支,合并到 stable分支上就是可以发布的代码了。
2025-12-10 22:17:44
950
原创 【Git学习】Git本地仓库基础命令
除了可以在项目中定义.gitignore文件外,还可以设置全局的.gitignore文件来管理所有Git项目的行为,这种方式在不同的项目开发者之间是不共享的,是属于项目之上Git应用级别的行为。.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的,所以一定要养成在项目开始就创建.gitignore文件的习惯。查看文件在工作目录与暂存区的差别,如果还没 add 进暂存区,则查看文件自身修改前后的差别。
2025-12-10 21:49:11
809
原创 Thymeleaf介绍与简单使用
Thymeleaf 是一款 Java 生态下的模板引擎,核心定位是Web 开发的前端页面渲染工具。简单说,它能把后端 Java 程序传递的数据,动态填充到 HTML 页面中,最终生成用户看到的动态网页。它最常用在 Spring Boot 项目中,能和 Spring 框架无缝集成,替代传统的 JSP 技术,是目前 Java Web 开发中最主流的前端模板方案之一。查阅官方提供的的 spring-boot-starter。
2025-12-09 23:46:12
928
原创 【Java基础】异常
自定义异常是指开发者根据特定业务需求创建的异常类,通过自定义异常,可以实现更精确的错误分类和处理,使代码具有更好的可读性和维护性。throw 关键字用于在程序中手动抛出一个异常,抛出的是一个异常类的实例化对象。例如throw new NullPointerException(),而非throw NullPointerException。执行throw语句后,当前方法的执行会立即终止,并将异常对象沿调用栈向上传递,直到被try-catch块捕获或导致程序终止。
2025-12-09 17:23:04
470
原创 【Java基础】代理
Proxy2是一个 “万能增强器”,通过它生成的代理对象,能在不修改原工厂代码的情况下,给所有工厂的核心方法自动加上 “市场调研” 和 “包办服务”,这就是动态代理的作用。
2025-12-08 23:53:25
998
原创 【Java基础】IO流
代码中通过 File 类定位文件,使用 FileInputStream 创建文件输入流,定义了一个长度为5的字节数组 buffer 作为缓冲区,通过 while 循环每次从文件中读取最多5个字节到缓冲区,中间变量 len 记录读取的有效字节数,new String(buffer, 0, len) 中的 (buffer, 0, len) 是为了精准提取缓冲区中本次实际读取的有效数据,避免混入无效的旧数据,再将读取到的有效字节转换为字符串打印,直到读取到文件末尾(返回-1)。
2025-12-08 23:30:05
964
原创 MySQL 数据库与 SQL 语言介绍
SQL(结构化查询语言)是一种非过程性编程语言,核心特点是每条语句独立执行并返回结果,无需依赖其他语句的执行顺序。与 Oracle 专属的 PL/SQL(过程性语言)不同,SQL 具有跨数据库通用性,是操作关系型数据库的标准语言。
2025-12-07 10:42:46
799
原创 【Mybatis】延迟加载与多级缓存
column="uid" 即查询user时需要传递的参数,select="com.qcby.mapper.UserMapper.findById" 指定加载user对象时要调用的SQL语句,fetchType 属性是延迟加载的局部配置方式,lazy表示延迟加载、eager立即加载,fetchType="lazy"只有明确访问关联对象的属性时才会触发关联对象的加载,进一步减少不必要的数据库查询。缓存是指在计算系统中,通过特定的高速存储介质临时存储数据源中频繁访问的数据副本,以实现数据快速复用的机制。
2025-12-06 17:02:02
852
原创 【Mybatis】动态SQL与表关系设计
MyBatis 的动态 SQL 是其核心特性之一,它允许在 XML 映射文件或注解中根据条件动态生成 SQL 语句,能有效解决传统 SQL 拼接中容易出现的冗余、错误(如多余的逗号、AND/OR 关键字)等问题,大幅提升 SQL 的灵活性和复用性。编写UserMapper1接口的方法最基础的动态 SQL 标签,用于根据条件决定是否拼接某段 SQL采用 WHERE 1=1 是为了避免所有条件不满足时WHERE多余的情况测试代码。
2025-12-06 14:40:36
963
原创 【Mybatis】框架概述、案例与参数详解
resultTyperesultType 用于指定 SQL 查询语句返回结果的类型,它告诉 MyBatis查询结果需要被映射成什么类型的对象,MyBatis 会根据该类型,将 SQL 执行后的结果集自动封装为对应的对象或数据结构,它适用于结果集字段与 Java 对象属性名完全一致的场景。引入坐标依赖,MyBatis的3.4.5的版本坐标,MySQL驱动的jar包5.1.6版本,Junit单元测试的jar包,引入log4j的jar包1.2.12版本(需要引入log4j.properties的配置文件)
2025-12-06 00:08:21
538
原创 【Mybatis】关联映射、延迟加载
resultMap> 标签用于结果映射规则,其中 id 属性值要与 select 标签中的 resultMap 属性值相同,是映射规则的唯一标识,type 指定映射的目标实体类,result 映射普通字段,property=实体类中的属性名,column=数据库当中的字段,而 <association> 标签用于处理对象的关联信息,其中 property=关联对象的属性名、javaType=关联对象的类型、select=对应的查询方法、column=传递给关联查询的参数。
2025-12-05 17:16:59
964
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅