自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【水平:编写简单的定时任务】用一篇文章入门Job

本文提供三种实现定时删除用户ID与工号相同数据的技术方案:1)Java+Spring Boot方案,通过@Scheduled注解实现定时任务,配合MyBatis执行删除SQL;2)Python+Django方案,使用APScheduler库创建定时任务,通过ORM操作数据库;3)数据库原生方案,利用MySQL事件调度器直接执行定时删除。各方案均强调事务安全、日志记录和测试验证,建议根据实际技术栈选择实现。核心步骤包括:识别问题数据、定时触发删除、保障操作安全。

2025-12-10 09:12:17 794

原创 【水平:编写简单的定时任务】用一篇文章入门OracleJob

Oracle 数据库可通过DBMS_SCHEDULER包实现定时删除"用户ID=工号"的数据,无需额外代码。主要步骤:1)创建日志表记录执行情况;2)编写存储过程实现删除逻辑并记录日志;3)授权后创建定时作业,设置每天凌晨2点执行。支持两种频率设置方式(简化格式或CRON格式),执行前需手动测试存储过程,并通过日志表验证结果。该方法完全基于SQL实现,包含异常处理和事务控制,适合自动化数据维护场景。

2025-12-10 09:07:56 890

原创 【每天学一下】前端是JSON后端使用DTO接参时候针对于日期或者时间的不同解决方法

摘要:前后端交互中,前端传递字符串日期后端用Date类型接收需注意格式转换。推荐使用ISO 8601标准格式,Spring Boot可通过@DateTimeFormat注解自动转换,普通Java程序需手动解析SimpleDateFormat。要精确到"yyyy-MM-dd HH:mm:ss"格式,建议优先使用LocalDateTime或@DateTimeFormat注解,确保前后端格式一致。Velocity模板可通过$!{tool.getClsNameByFullName()}判断Dat

2025-09-26 17:25:51 701

原创 【每天学一下】git合并与变基

摘要: Git中的merge和rebase是两种分支整合方式。merge保留分支历史,生成新提交,适合公共分支协作;rebase重写历史为直线,使提交更简洁,但仅适用于本地未推送分支。核心区别在于历史结构(树状vs线性)和安全性。最佳实践:公共分支用merge,本地整理用rebase,且切勿对已推送分支使用rebase。日常操作建议先在master创建个人分支,合并更新后提交测试,确保代码规范。

2025-09-25 09:10:00 569

原创 【Java-面试精选】Spring MVC的数据绑定与校验

摘要 Spring MVC通过数据绑定将HTTP请求参数自动映射到Java对象,利用反射和类型转换实现。结合Hibernate Validator等校验框架,开发者可通过注解(如@NotBlank、@Min)声明规则,并在Controller中使用@Valid触发校验。校验失败时,通过BindingResult获取错误信息,实现前后端数据合法性验证。典型应用场景包括表单提交和API参数校验,确保系统安全性与数据完整性。(148字)

2025-09-02 07:45:00 982

原创 【Java-面试精选】 Spring Security 和 Shiro两大安全框架

本文对比了Spring Security和Shiro两大安全框架。Spring Security专为Spring生态设计,提供强大的认证授权功能,适合企业级应用,但学习曲线较陡;Shiro则是轻量级通用框架,API简单易用,适合小型项目。两者在定位、学习成本、扩展性和适用场景上各有优劣:Spring Security深度集成Spring生态,Shiro更灵活轻便。选择建议:Spring项目优先考虑Spring Security,非Spring或轻量级应用可选Shiro。文末附有对比思维导图,帮助开发者根据项

2025-09-02 07:45:00 1046

原创 【Java-面试精选】 Spring MVC的数据绑定与校验

Spring MVC数据绑定与校验解析 数据绑定通过DispatcherServlet将HTTP请求参数自动映射到Java对象,支持基本类型转换和自定义对象反射注入。例如用户提交表单时,Spring会调用目标对象的Setter方法完成字段填充。 数据校验基于JSR-380规范,配合Hibernate Validator实现: 实体字段添加校验注解(如@NotBlank) Controller方法使用@Valid触发校验 通过BindingResult捕获错误信息,实现前后端联动验证 典型场景:用户注册时的年

2025-09-02 07:45:00 699

原创 【Java-面试精选】解释MyBatis的缓存机制和事务管理

摘要: MyBatis的缓存机制包括一级缓存(SqlSession级别,自动生效)和二级缓存(Mapper级别,需手动配置),分别适用于短时效查询和低频更新数据。事务管理支持JDBC手动控制和Spring容器托管,通过@Transactional注解简化原子性操作。实际开发中需根据读写频率选择缓存策略,并合理缩小事务边界以保证性能。附思维导图可快速回顾核心知识点。(149字)

2025-09-02 07:45:00 544

原创 【Java-面试精选】如何在Java程序中执行Linux命令?

Java程序可以通过Runtime.exec()或ProcessBuilder执行Linux命令,前者适合简单命令,后者更安全灵活。关键要处理标准输出、错误流,避免缓冲区阻塞,并用waitFor()等待命令完成。防范命令注入、权限问题等风险,建议参数拆分、设置超时、限制权限。最佳实践包括严格校验输入、耗时操作设置阈值、复杂命令通过bash -c处理管道。

2025-09-01 07:45:00 609

原创 【Java-面试精选】分布式开发与微服务架构详解

本文系统介绍了分布式开发与微服务架构的核心内容。核心思想是将单体应用拆分为独立部署的小型服务,通过轻量级协议通信,具备单一职责、容错设计等特点。关键技术包括服务通信(REST/gRPC)、服务发现(Eureka)、配置管理(Nacos)、熔断机制(Hystrix)、分布式事务(Seata)及监控体系(Zipkin+Prometheus)。针对常见问题如网络延迟、数据一致性等,提出了超时设置、最终一致性等解决方案。文章强调微服务设计需平衡服务粒度,推荐采用渐进式拆分策略,并配合Kubernetes等工具实现高

2025-09-01 07:45:00 1140

原创 【Java-面试精选】消息队列选型与RocketMQ实战

Java面试题:消息队列选型与RocketMQ实战 摘要 本文针对电商平台的典型场景(下单流程、秒杀活动、数据一致性),深入探讨消息队列技术选型及RocketMQ的实战应用。通过对比Kafka、RabbitMQ和RocketMQ的特性,指出RocketMQ在交易场景中的优势。详细展示了使用RocketMQ实现下单流程的生产者/消费者代码示例,包括事务消息的两阶段提交机制。针对秒杀高并发场景,提出顺序消费和队列分片解决方案。最后解析RocketMQ的死信队列机制及其异常处理流程,为分布式系统开发提供完整参考方

2025-09-01 07:45:00 1563

原创 【Java-面试精选】 Bootstrap 的核心功能

Bootstrap是一个开源前端框架,提供响应式设计、预定义组件和CSS工具类,能快速构建适配多设备的网页。其核心功能包括12列栅格系统,通过断点类(如col-md-6)实现不同屏幕下的布局调整。例如,咖啡店官网可以用Bootstrap栅格系统在手机上显示单列菜单,在电脑上显示双列菜单,提高开发效率并确保跨设备兼容性。Bootstrap适用于企业官网、后台管理系统等场景,其核心价值在于简化响应式代码编写。

2025-09-01 07:45:00 521

原创 【Java-Linux】Linux 中的零拷贝是指什么?

Linux零拷贝技术解析 零拷贝(Zero-Copy)通过减少数据在内核与用户空间之间的复制次数,显著提升I/O性能。传统文件传输需多次复制数据(内核→用户→内核),而零拷贝利用sendfile()或内存映射(mmap)直接在内核操作数据,避免冗余复制。 核心优势: 性能提升:减少CPU开销,吞吐量提升30%-50%; 实现方式:sendfile()直接发送文件到网络,mmap允许用户空间直接访问内核缓冲区; 应用场景:大文件传输(如HTTP服务器)、消息队列(Kafka)、数据库等高频I/O场景。 对比传

2025-08-31 07:45:00 1804

原创 【Java-Linux】Linux vim 命令怎么使用?

摘要:本文通过一道Java集合线程安全的面试题,演示如何在Linux环境下使用vim高效修改代码。题目要求将非线程安全的ArrayList替换为CopyOnWriteArrayList,并详细给出vim操作步骤(搜索定位、编辑修改、保存退出)。关键知识点包括:1) Java集合线程安全解决方案对比;2) vim高效编辑技巧;3) 多线程设计思想。最后通过思维导图总结核心内容,强调面试时应结合原理、实践和场景分析作答。(150字)

2025-08-31 07:45:00 626

原创 【Java-Linux】Linux 下 select,poll,epoll 的区别?

本文对比了Linux下三种I/O多路复用技术:select、poll和epoll。select使用位图管理文件描述符,但存在数量限制和效率问题;poll改用结构体数组,解决了数量限制但仍需线性扫描;epoll基于事件驱动,通过红黑树管理描述符,仅处理就绪事件,具有O(1)时间复杂度。三者在文件描述符数量、效率、内存拷贝和触发模式上存在显著差异。epoll因其高性能成为Java NIO的底层实现,特别适合高并发场景。文章通过餐厅服务员的类比形象说明了三者的工作原理差异。

2025-08-31 07:00:00 848

原创 【Java-Linux】Linux 软链接和硬链接区别?

本文介绍了Linux中软链接与硬链接的区别及Java操作方法。软链接是独立文件存储目标路径,可跨文件系统;硬链接是同一文件的多个目录入口,不能跨文件系统。Java可通过Files.createLink()创建硬链接,Files.createSymbolicLink()创建软链接。读取软链接时建议使用toRealPath()解析真实路径,并检查目标是否存在。生产环境优先使用软链接,注意权限和异常处理。面试考察对Linux文件系统的理解、Java NIO API掌握程度及异常处理能力。

2025-08-31 07:00:00 1131

原创 【Java-Linux】Linux 和 Unix 的区别?

Linux操作系统概述定义与发展历史主要发行版(Ubuntu、CentOS、Debian等)开源特性与社区生态Linux系统架构与核心组件内核(Kernel)的作用与功能Shell与命令行界面(CLI)文件系统结构(FHS标准)Linux常用命令与操作文件管理(ls、cp、mv、rm等)权限管理(chmod、chown)进程管理(ps、top、kill)网络与安全管理网络配置(ifconfig、netstat、ss)防火墙配置(iptables/firewalld)用户与组管理

2025-08-30 07:45:00 923

原创 【Java-Linux】Linux 怎么查看内核版本?

本文介绍了在Java程序中获取Linux系统内核版本的两种方法:一是通过纯Java API System.getProperty("os.version"),简单安全且跨平台;二是执行uname -r系统命令,结果精确但存在安全风险。两种方案都是线程安全的,但需注意异常处理。纯Java方案更推荐,执行命令方案需严格校验输入。面试考察点包括系统编程认知、安全意识和API熟练度。

2025-08-30 07:45:00 363

原创 【Java-Linux】Linux 系统有哪些优势?

摘要: Java在Linux系统部署具有显著优势:1)高性能与稳定性,JVM垃圾回收机制与Linux内核优化协同,降低延迟(如电商平台迁移案例);2)资源隔离,通过cgroups实现容器化部署,支持高密度微服务;3)运维便捷,整合jstack、Prometheus等工具快速定位问题;4)成本优势,开源生态兼容Hadoop等大数据组件。Linux为Java提供高效运行环境,尤其适合高并发和容器化场景。

2025-08-30 07:45:00 507

原创 【Java-MyBatis】MyBatis 有哪些优点?

摘要 MyBatis 是一款灵活性强、可精细控制 SQL 的半 ORM 框架,适合需要复杂查询优化的场景(如电商、金融)。其优点包括直接编写 SQL、简化 JDBC 代码、动态 SQL 支持,以及与 Spring 无缝集成;缺点则是需手动维护 SQL(移植性差)、XML 配置繁琐、缓存机制较弱。相比全 ORM 框架(如 Hibernate),MyBatis 在性能可控性上更优,但开发效率较低。适用场景主要为 SQL 敏感型项目,不推荐快速迭代或需多数据库切换的系统。

2025-08-29 07:45:00 877

原创 【Java-MyBatis】MyBatis 和 JPA 的区别?

Java面试题解答:MyBatis与JPA对比摘要 本文通过外卖平台订单系统的实际案例,对比分析了MyBatis与JPA的核心区别。JPA适合简单CRUD场景,通过注解自动生成SQL,开发效率高但灵活性差;MyBatis需手动编写SQL,适合复杂查询和高性能需求。关键区别包括:设计理念(ORM规范vsSQL映射框架)、SQL控制方式、灵活性、性能优化空间等。建议根据项目需求选择:新项目简单业务用JPA,复杂系统或遗留项目用MyBatis,也可混合使用二者优势。(148字)

2025-08-29 07:45:00 1003

原创 【Java-MyBatis】MyBatis 和 Hibernate 的区别?

本文对比了MyBatis和Hibernate两大ORM框架的核心差异。Hibernate提供全自动ORM映射,通过对象操作数据库,适合快速开发和复杂业务模型;MyBatis采用半自动模式,需手动编写SQL但更灵活,适合需要深度SQL优化的场景。主要区别体现在SQL控制权(自动生成 vs 手写)、学习曲线(陡峭 vs 平缓)、性能特点(简单操作快 vs 复杂查询优)和缓存机制(三级 vs 二级)等方面。决策时可根据项目需求选择:追求开发速度选Hibernate,需要极致SQL性能则选MyBatis,中型项目可

2025-08-29 07:45:00 848

原创 【Java-Linux】Linux 是什么?

Linux 是一款开源免费的操作系统内核,由林纳斯·托瓦兹于1991年发布。它具有稳定性强、安全性高、兼容性广等核心优势,能适配从智能手表到超级计算机的各种硬件设备。作为数字世界的"万能地基",Linux广泛应用于服务器、云计算和嵌入式设备等领域,其典型发行版包括Ubuntu、Fedora等。开源特性使其可自由定制,严格权限管理提供了天然安全屏障,全球90%的云服务器都依赖其稳定的运行表现。

2025-08-29 07:45:00 781

原创 【Java-MyBatis】MyBatis 框架的应用场景?

摘要: MyBatis作为半自动化ORM框架,适用于需要灵活控制SQL、高性能数据处理及复杂对象映射的场景。其动态SQL功能(如<if>标签)可高效拼接查询条件,批处理模式提升吞吐量,嵌套<resultMap>支持复杂结果集映射。典型应用包括电商动态查询(性能优化)、遗留系统改造(兼容存储过程)、物流实时系统(低内存开销)及医疗领域模型(对象树组装)。相比全自动框架,MyBatis以SQL自由度高、资源占用低(启动快30%)成为微服务及云原生场景的优选。核心价值:平衡开发效率与SQL

2025-08-28 19:44:04 1231

原创 【Java-MyBatis】MyBatis 为什么是半自动 ORM 映射?

MyBatis作为半自动ORM框架,保留了开发者对SQL的完全控制权。与全自动ORM不同,它需要手动编写SQL语句和配置字段映射关系,暴露JDBC底层操作以优化性能。这种设计通过餐厅点餐的比喻形象说明:开发者需提供明确的"菜谱"(SQL)和"摆盘规则"(resultMap),而非由框架自动决定。虽然牺牲了开发效率,但换来了处理复杂查询、使用数据库特性和性能调优的灵活性,特别适合高性能场景和遗留系统。

2025-08-28 19:39:52 396

原创 【Java-MyBatis】MyBatis 和 ORM 的区别?

摘要: MyBatis与ORM的核心区别在于SQL生成方式:ORM(如Hibernate)自动生成SQL,适合简单CRUD;MyBatis需手动编写SQL,保留灵活性,适合复杂查询。 ORM:全自动化(如机器人分拣包裹),开发高效但灵活性低。 MyBatis:半自动化(如按指令配送),开发者控制SQL,性能优化更精准。 适用场景:ORM推荐简单业务,MyBatis适用于高性能、复杂SQL系统。 通过代码对比和比喻(快递分拣)可直观理解差异,面试时结合场景分析更清晰。

2025-08-28 19:37:47 424

原创 【Java-MyBatis】MyBatis 是什么框架?

MyBatis 技术文章大纲核心概念与架构MyBatis 简介与历史背景ORM 框架对比(MyBatis vs Hibernate)MyBatis 核心组件:SqlSessionFactory、SqlSession、Mapper配置文件结构(mybatis-config.xml、mapper.xml)基础功能实现环境搭建与依赖配置(Maven/Gradle)实体类与数据库表映射SQL 映射文件编写(CRUD 示例)动态 SQL 标签使用(if、choose、foreach)高级特性解析

2025-08-28 19:34:40 1092

原创 【Java-MyBatis】MyBatis 怎么封装动态 SQL?

MyBatis动态SQL主要通过在XML映射文件中使用特殊标签实现条件化SQL构建。核心标签包括:<if>实现条件分支,<choose>/<when>/<otherwise>处理多选一逻辑,<foreach>遍历集合参数,<where>和<set>智能处理语法符号。其底层基于OGNL表达式,通过解析标签生成SqlNode树,动态拼接SQL语句。这种方式避免了手动拼接SQL的风险,提高了代码可读性和安全性,支持根据不同参数条件

2025-08-27 07:45:00 938

原创 【Java-MyBatis】Mybatis trim 标签有什么用?

MyBatis中的<trim>标签是动态SQL的重要工具,主要用于智能处理SQL语句的前缀/后缀和多余连接符。核心功能包括自动添加WHERE/SET等关键字,移除多余的AND/OR/逗号等符号,确保动态拼接的SQL语法正确。该标签通过prefix、suffix、prefixOverrides和suffixOverrides四个属性实现灵活控制,比<where>和<set>标签更强大。典型应用场景包括动态条件查询(替代WHERE)和动态字段更新(替代SET),能有效解决SQ

2025-08-27 07:45:00 707

原创 【Java-MyBatis】MyBatis 怎么实现分页?

MyBatis分页实现方案对比 MyBatis提供三种分页方式:1)手动SQL分页(性能最佳但需处理数据库差异),2)RowBounds逻辑分页(内存分页,存在性能风险),3)PageHelper插件(推荐方案)。其中PageHelper通过拦截器自动改写SQL,支持多数据库且返回完整分页信息,是生产环境首选方案。RowBounds由于全量查询的内存消耗问题应避免使用。百万级数据可采用索引覆盖优化提升分页性能。实际开发中应根据数据规模选择合适方案,通常优先考虑PageHelper插件。

2025-08-27 07:45:00 597

原创 【Java-MyBatis】MyBatis 流式查询有什么用?

MyBatis流式查询是一种处理大数据量的高效方案,通过逐条获取数据避免内存溢出。其核心价值包括:内存优化(仅消耗单条数据内存)、响应加速(实现数据流水线处理)和资源节省(减少数据库连接占用)。典型应用场景包括数据导出、实时日志分析等大数据处理。使用时需注意连接管理、事务控制和性能平衡,建议1万以下数据用普通查询,1-50万用流式查询,超过50万采用分页批处理。流式查询本质是以时间换空间,适合大数据场景但需及时关闭游标防止资源泄漏。

2025-08-27 07:45:00 2014

原创 【Java-MyBatis】MyBatis 有哪几种 SQL 编写形式?

形式适用场景优点缺点XML 映射文件复杂查询、动态 SQL解耦、可维护性强需维护额外 XML 文件注解方式简单 CRUD 操作开发快捷、代码简洁不支持复杂动态 SQLSQL 构建器极高灵活性的动态查询完全编程控制、适应复杂逻辑可读性较低核心选择原则优先用注解实现简单操作中等复杂度用XML(尤其需动态 SQL 时)极端动态场景用SQL 构建器。

2025-08-26 07:45:00 441

原创 【Java-MyBatis】MyBatis 的 $ 和 # 传参的区别?

MyBatis中#和$传参的核心区别:#{}采用预编译占位符,能防止SQL注入,适合传递值参数;${}直接拼接SQL字符串,需手动过滤风险,适用于动态SQL关键字。安全场景优先用#{},必须用${}时应配合白名单校验。类比:#{}像服务员打包外卖(安全),${}像自己炒菜(需谨慎)。黄金法则是优先使用#{},必要时对${}参数严格过滤。

2025-08-26 07:45:00 513

原创 【Java-MyBatis】MyBatis 支持哪些传参数的方法?

MyBatis参数传递方式详解 MyBatis支持多种参数传递方式:1)单参数直接使用;2)多参数推荐@Param注解;3)Map传参适合动态条件;4)JavaBean封装复杂参数;5)集合参数需结合foreach标签;6)位置参数不推荐使用。最佳实践建议:1-2参数用@Param,多参数用JavaBean,动态查询用Map,避免位置参数以确保代码可读性。各种方式各有优劣,开发者应根据场景灵活选择。

2025-08-26 07:45:00 756

原创 【Java-MyBatis】MyBatis 可以映射到枚举类吗?

本文介绍了MyBatis实现枚举类映射的三种方式:1)默认名称映射,直接存储枚举名称;2)序号映射,存储枚举声明的顺序值;3)自定义映射,通过实现TypeHandler接口实现任意值转换。三种方式各具特点,默认映射简单直观,序号映射节省空间,自定义映射最为灵活。文中通过用户状态管理的具体案例,详细说明了每种实现方式的配置方法、数据库存储形式及适用场景,并提供了完整代码示例。最后通过对比表格和思维导图总结了各方案优缺点,帮助开发者根据实际需求选择最佳实现方式。

2025-08-26 07:45:00 526

原创 【Java-MyBatis】MyBatis 一级缓存和二级缓存的区别?

本文详细对比了MyBatis一级缓存与二级缓存的区别。一级缓存是SqlSession级别的本地缓存,默认开启,生命周期随会话结束而销毁,适合高频短时效查询;二级缓存是Mapper级别的全局缓存,需手动配置,可跨会话共享,适合读多写少的场景。核心区别在于作用域、生命周期和数据共享性。使用时需注意脏读风险和适用场景,二级缓存通常需配合Redis实现分布式扩展。两者分别适用于不同的业务需求,一级缓存提供会话隔离,二级缓存实现数据共享。

2025-08-25 07:45:00 434

原创 【Java-MyBatis】MyBatis 中的缓存机制有啥用?

MyBatis缓存机制通过两级缓存提升查询效率:一级缓存作用于SqlSession内,默认开启但会话结束即失效;二级缓存是Mapper级别的跨会话共享缓存,需显式配置。缓存机制能减少90%以上数据库查询,显著提升性能并降低负载,尤其适合读多写少场景。使用时需注意数据一致性,避免缓存大对象导致OOM,实时性要求高的数据不宜使用缓存。合理配置的MyBatis缓存可带来100倍于磁盘查询的内存读取速度,类似图书馆的热门书架机制。

2025-08-25 07:45:00 1056

原创 【Java-MyBatis】MyBatis 使用了哪些设计模式?

MyBatis框架巧妙运用了9种核心设计模式: 建造者模式:通过SqlSessionFactoryBuilder分步构建复杂配置对象 工厂模式:SqlSessionFactory生产不同特性的SqlSession实例 代理模式:MapperProxy为接口生成动态代理实现SQL转换 模板方法:BaseExecutor定义SQL执行的标准流程骨架 装饰器模式:通过Cache继承体系层层增强缓存功能 责任链模式:InterceptorChain管理插件拦截器的调用顺序 适配器模式:统一不同日志框架的接口实现 单

2025-08-25 07:45:00 627

原创 【Java-MyBatis】MyBatis 如何获取自动生成的主键id?

MyBatis获取自动生成主键id方法总结 MyBatis提供两种获取自增主键的方式: 推荐方法:useGeneratedKeys+keyProperty 配置简单,适合MySQL等支持自增主键的数据库 插入后自动将主键值注入Java对象属性 通用方法:<selectKey>标签 支持所有数据库类型 需编写额外SQL,可灵活控制获取主键时机(插入前/后) 实现原理:通过JDBC获取数据库生成的主键值,并自动填充到参数对象的指定属性中。开发者插入后直接访问对象属性即可获取ID。 对比选择:优先方法

2025-08-25 07:45:00 465

原创 【Java-MyBatis】MyBatis 如何防止 SQL 注入?

MyBatis通过#{}预编译机制有效防止SQL注入,将用户输入作为参数绑定而非字符串拼接。与危险的${}直接拼接不同,#{}会先将SQL模板预编译,确保输入数据无法改变SQL结构。特殊场景需使用${}时,必须配合白名单过滤。安全实践包括:优先使用#{}、监控SQL日志、输入校验及定期扫描。核心原则是分离数据与代码,通过预编译固定SQL结构,使参数仅作为值传递。

2025-08-25 07:45:00 515

Java学习必备jar包-fastjson-1.2.83

Java学习必备资料将陆续更新!

2025-07-14

Java学习必备jar包之mysql-connector-java-8.0.28.jar

Java学习必备资源陆续更新!

2025-07-14

一个最快速,最简单的SpringBoot+Thymeleaf入门实例,教你用10分钟即可学会!

包括创建完整过程,部署运行方法,语法说明,调试技巧等

2025-07-12

空空如也

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

TA关注的人

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