1. JDBC基础与MyBatis入门实战
作为Java开发者,数据库操作是必备技能。记得我刚入行时,面对JDBC那一堆样板代码简直头疼不已,直到后来接触了MyBatis才真正体会到开发效率的提升。今天我就结合自己多年的实战经验,带大家系统掌握从原生JDBC到MyBatis的完整知识体系。
1.1 JDBC核心原理与实战
JDBC(Java Database Connectivity)是Java官方提供的一套操作关系型数据库的API规范。它的核心价值在于:
- 统一了各类数据库的操作接口
- 屏蔽了底层数据库实现的差异
- 提供了标准的连接管理机制
典型JDBC操作流程(以MySQL为例):
java复制// 1. 加载驱动(新版JDBC可省略此步骤)
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立连接
String url = "jdbc:mysql://localhost:3306/db?useSSL=false&serverTimezone=UTC";
Connection conn = DriverManager.getConnection(url, "user", "password");
// 3. 创建Statement
Statement stmt = conn.createStatement();
// 4. 执行SQL
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
// 5. 处理结果集
while(rs.next()) {
System.out.println(rs.getString("username"));
}
// 6. 释放资源
rs.close();
stmt.close();
conn.close();
重要提示:实际项目中务必使用try-with-resources确保资源释放,避免内存泄漏
1.2 预编译SQL的实战价值
直接使用Statement存在SQL注入风险,应该始终优先使用PreparedStatement:
java复制String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
预编译SQL的三大优势:
- 安全性:自动处理特殊字符,防止SQL注入
- 性能:SQL预编译后可以重复使用
- 可读性:参数化查询更清晰易懂
1.3 结果集处理的正确姿势
ResultSet的常见陷阱及解决方案:
java复制// 错误示范:列索引从0开始
int id = rs.getInt(0);
// 正确做法:列索引从1开始,或使用列名
int id = rs.getInt(1);
String name = rs.getString("username");
// 处理NULL值
int age = rs.getInt("age");
if(rs.wasNull()) {
age = -1; // 自定义默认值
}
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MyBatis核心机制深度解析
2.1 MyBatis架构设计精要
MyBatis的核心组件关系图:
code复制SqlSess
