
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
允许用户请求服务器上的某个资源,并向用户显示请求结果:接收客户请求,然后向客户返回一些结果:告诉浏览器怎样把内容呈现给用户:Web客户与服务器通信所用的协议。
本文介绍了Spring框架中的两个核心概念:IoC(控制反转)和AOP(面向切面编程)。IoC通过容器管理对象创建,实现对象依赖的自动注入,提供XML和注解两种配置方式。AOP则将横切关注点(如日志、事务)与核心业务逻辑分离,通过动态代理实现解耦。文章详细展示了IoC的配置方法(XML/注解)、依赖注入(@Autowired)以及AOP的基本原理,对比了有无AOP时的代码结构差异,帮助开发者理解S
MultipartFile是Spring MVC处理文件上传的核心接口,用于接收multipart/form-data请求中的文件数据。它提供getOriginalFilename()、getSize()等方法获取文件信息,支持getInputStream()流式读取或transferTo()直接保存。使用时需配合@RequestParam注解,并注意配置上传大小限制。常见注意事项包括:避免路径穿
摘要: MinIO是一个兼容S3协议的对象存储服务,用于存储各类文件(图片、视频、日志等)及大文件,支持海量对象存储。核心概念包括Bucket(业务隔离的容器)、Object(文件实体)及元数据。在Spring Boot中通过MinioClient集成,支持上传(流式处理)、下载、删除及生成预签名URL(前端直连)。最佳实践包括:避免直接使用原始文件名(防路径穿越)、公私桶权限分离、流式处理大文件
Spring MVC的@PathVariable注解用于将URL路径中的变量绑定到控制器方法参数上,是RESTful接口的核心注解。它通过{variableName}占位符定义路径变量,支持简单映射(参数名一致可省略)、多变量接收以及Map集合接收等用法。与@RequestParam不同,@PathVariable参数位于URL路径而非查询字符串,更符合RESTful风格。该注解包含value/n
Java中==与equals()的区别: ==用于基本类型比较值,引用类型比较内存地址 equals()是Object类方法,默认比较地址,但String/包装类等通过重写实现内容比较 关键区别:==判断"是否同一个对象",equals()判断"逻辑是否相等" 注意事项:字符串常量池、包装类缓存、equals与hashCode契约 实用建议:比较对象内容用e
MyBatis采用两级缓存机制:一级缓存为SqlSession级别,默认开启,同一会话内相同查询可复用结果;二级缓存为Mapper命名空间级别,需手动开启,支持跨会话共享。一级缓存解决会话内重复查询问题,二级缓存适用于读多写少场景但需注意一致性问题。缓存查询顺序为:先查一级缓存,再查二级缓存,最后查数据库。生产环境建议谨慎使用二级缓存,对于分布式系统更推荐采用Redis等集中式缓存方案。
MyBatis中#{}和${}的核心区别在于安全性与应用场景。#{}采用预编译参数绑定,通过PreparedStatement防止SQL注入,适用于值传递;而${}是字符串拼接,存在注入风险,仅可用于SQL片段(如表名、列名等),使用时必须配合白名单验证。最佳实践是优先使用#{},必须用${}时需严格限制输入范围。LIKE和IN查询应使用#{}配合特定语法,避免直接拼接字符串。
MyBatis分页查询主要有三种实现方式:原生手动分页(物理分页)、RowBounds逻辑分页和分页插件(如PageHelper/MyBatis-Plus)。原生方式通过SQL编写LIMIT/OFFSET实现物理分页,性能好但需手动计算偏移量;RowBounds是逻辑分页,先查全表再内存截取,大数据量时性能差;分页插件(推荐)自动改写SQL实现物理分页,支持多数据库方言且开发效率高。MyBatis
摘要: MyBatis动态SQL通过XML标签(如<if>、<foreach>等)实现SQL语句的灵活拼接,主要作用包括:1)多条件查询时动态生成WHERE子句;2)减少重复代码,替代if-else逻辑;3)支持批量操作;4)防止SQL注入;5)按需更新字段。典型应用场景包括条件搜索、批量处理、动态排序等。其执行原理基于OGNL表达式解析和SqlNode树组合,最终通过预编







