- Java211
- 编程14
- 设计79
- DevOps8
- 数据结构和算法17
- 树6
- 综合17
- 线性表4
- 数据库114
- 网络19
- 分布式78
- 大数据32
- 软件工程3
- 工作8
- 笔记52
- JavaCore65
- JavaEE15
- 软件20
- 工具37
- 框架71
- 中间件9
- 编程范式4
- 编程语言3
- Python6
- 架构31
- 设计模式27
- 重构7
- DDD2
- UML4
- 监控2
- 数据库综合3
- 数据库中间件3
- 关系型数据库21
- 文档数据库12
- KV数据库18
- 列式数据库15
- 搜索引擎数据库22
- 网络综合8
- 网络协议6
- 网络技术4
- 操作系统13
- 操作系统应用2
- 分布式综合15
- 分布式协同18
- 分布式调度7
- 分布式通信29
- 分布式存储8
- flink9
- hadoop5
- hive9
- 人工智能1
- 基础特性18
- 高级特性7
- 容器7
- IO10
- 并发11
- JVM9
- 面试12
- JavaWeb6
- 服务器8
- 构建9
- IDE4
- 监控诊断6
- JavaBean2
- 模板引擎4
- 测试5
- 其他9
- Spring61
- ORM4
- 安全9
- 缓存5
- 流量控制2
- 微服务5
- 解决方案8
- Git3
- mysql15
- mongodb11
- redis19
- KV 数据库3
- hbase13
- elastic5
- elasticsearch16
- Linux11
- 命令1
- 分布式协同综合10
- ZooKeeper7
- RPC5
- MQ17
- 效能6
- 方法论2
- 规范3
- Tomcat6
- Maven7
- Spring综合5
- Spring核心24
- Spring数据10
- SpringWeb8
- SpringIO4
- Spring集成4
- Spring安全1
- Spring其他4
- MQ综合1
- Kafka10
- RocketMQ4
- 其他MQ1
Java IO 框架
📖 内容
📚 资料
MyBatis 面试
【简单】MyBatis 中 #{} 和 ${} 的区别是什么?
MyBatis 中 #{}
和 ${}
的区别对比
特性 | #{} (预编译占位符) |
${} (字符串拼接) |
---|---|---|
底层原理 | 使用 PreparedStatement ,生成带 ? 的 SQL,预编译防止注入。 |
直接拼接字符串到 SQL 中,无参数化处理。 |
SQL 注入风险 | ❌ 安全(自动转义特殊字符)。 | ✔️ 高风险(需手动过滤参数)。 |
适用场景 | 动态条件值(如 WHERE id = #{value} )。 |
动态表名、列名(如 ORDER BY ${column} )。 |
数据类型处理 | 自动识别 Java 类型,匹配 JDBC 类型(如 Date →TIMESTAMP )。 |
原样替换,可能导致语法错误(如字符串未加引号)。 |
性能 | 预编译 SQL 可复用,高效。 | 每次生成新 SQL,效率较低。 |
示例 | xml SELECT * FROM user WHERE name = #{name} |
xml SELECT * FROM ${tableName} |
Spring MVC 之视图技术
Spring MVC 中视图技术的使用是可插拔的。无论决定使用 Thymeleaf、Groovy 等模板引擎、JSP 还是其他技术,都可以通过配置来更改。
Spring MVC 的视图位于该应用程序的内部信任边界内。 视图可以访问应用程序上下文的所有 bean。 因此,不建议在模板可由外部源编辑的应用程序中使用 Spring MVC 的模板支持,因为这可能会产生安全隐患。
Thymeleaf
Thymeleaf 是一个现代服务器端 Java 模板引擎,它强调自然的 HTML 模板,可以通过双击在浏览器中预览,而无需运行服务器,这对于 UI 模板的独立工作(例如,由设计师)非常有帮助。
Spring MVC 之跨域
Spring MVC 支持跨域处理(CORS)。
简介
出于安全原因,浏览器禁止对当前源之外的资源进行 AJAX 调用。例如,可以在一个选项卡中使用您的银行帐户,而在另一个选项卡中使用 evil.com。来自 evil.com 的脚本不应该能够使用您的凭据向您的银行 API 发出 AJAX 请求——例如从您的账户中取款!
Spring Web 应用
Spring MVC 提供了一种基于注解的编程模型,@Controller
和 @RestController
组件使用注解来表达请求映射、请求输入、异常处理等。注解控制器具有灵活的方法签名,并且不必扩展基类或实现特定接口。以下示例显示了一个由注解定义的控制器:
@Controller
public class HelloController {
@GetMapping("/hello")
public String handle(Model model) {
model.addAttribute("message", "Hello World!");
return "index";
}
}
Spring MVC 之 DispatcherServlet
简介
DispatcherServlet
是 Spring MVC 框架的核心组件,负责将客户端请求映射到相应的控制器,然后调用控制器处理请求并返回响应结果。
DispatcherServlet 工作原理
DispatcherServlet 工作流程
DispatcherServlet
的工作流程大致如下图所示:

Spring Data 综合
Spring Data Repository 抽象的目标是显著减少各种访问持久化存储的样板式代码。
核心概念
Repository 是 Spring Data 的核心接口。此接口主要用作标记接口,以捕获要使用的类型并帮助您发现扩展此接口的接口。CrudRepository
和 ListCrudRepository
接口为被管理的实体类提供复杂的 CRUD 功能。ListCrudRepository
提供等效方法,但它们返回 List
,而 CrudRepository
方法返回 Iterable
。
Spring 访问 Redis
简介
Redis 是一个被数百万开发人员用作数据库、缓存、流引擎和消息代理的开源内存数据库。
在 Spring 中,spring-data-redis 项目对访问 Redis 进行了 API 封装,提供了便捷的访问方式。 spring-data-redis