JDBC (Java Database Connectivity) - 核心基础
这是 Java 官方提供的、最基础的数据库访问技术,它是一个 API(应用程序编程接口),而不是一个具体的实现,JDBC 提供了一套标准,允许 Java 程序与各种不同的数据库进行交互。
- 核心包:
java.sql - 扩展包 (用于高级功能,如连接池):
javax.sql - 工作原理:
- 加载并注册数据库驱动(现在通常由 JDBC 驱动自动完成)。
- 通过
DriverManager获取数据库连接。 - 创建
Statement或PreparedStatement对象来执行 SQL 语句。 - 执行查询,返回
ResultSet结果集。 - 处理
ResultSet中的数据。 - 关闭资源(连接、语句、结果集)。
特点:
- 优点: Java 标准库的一部分,无需额外依赖;几乎所有数据库都提供 JDBC 驱动;是所有其他数据库访问技术的基础。
- 缺点: 代码繁琐(需要手动管理连接、处理异常、关闭资源);容易发生 SQL 注入(除非使用
PreparedStatement)。
示例代码片段:
// 使用 try-with-resources 自动管理资源
String sql = "SELECT id, name FROM users WHERE id = ?";
try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, 101);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
ORM (Object-Relational Mapping) 框架 - 主流选择
ORM 框架将数据库中的表映射为 Java 对象,将 SQL 操作映射为对象的方法调用,从而让开发者可以用面向对象的方式操作数据库,而无需编写原生 SQL。
这是目前企业级应用开发中最主流、最高效的方式。
a) JPA (Java Persistence API) - 规范/标准
JPA 本身不是一个框架,而是一套由 Java EE(现为 Jakarta EE)制定的 规范,用于管理对象与关系型数据库之间的映射,它定义了标准的 API,但具体的实现由不同的厂商提供。
- 核心包:
javax.persistence(旧版) 或jakarta.persistence(新版) - 常见实现框架:
- Hibernate: 最流行、功能最强大的 JPA 实现。
- EclipseLink: Oracle 提供的 JPA 实现。
- OpenJPA: Apache 软件基金会提供的 JPA 实现。
特点:
- 优点: 标准化,代码可移植性强;通过注解或 XML 描述对象-关系映射;自动生成 SQL,提高开发效率;支持缓存、事务等高级功能。
- 缺点: 学习曲线较陡峭;对于复杂查询,性能可能不如手写 SQL;需要引入额外的依赖(如 Hibernate)。
示例代码片段 (使用 Hibernate):
// 定义实体类 (User.java)
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// getters and setters...
}
// 在代码中使用
User user = session.get(User.class, 1L); // session 是 Hibernate Session 对象
System.out.println("User Name: " + user.getName());
b) MyBatis - SQL 控制框架
MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射,与 JPA 不同,MyBatis 更接近 SQL,它将 SQL 语句从 Java 代码中解耦,放在 XML 文件或注解中,让开发者对 SQL 有完全的控制权。
- 核心包:
org.apache.ibatis - 特点:
- 优点: SQL 灵活性极高,易于优化;学习成本低(对于熟悉 SQL 的开发者);性能优秀。
- 缺点: 需要手动编写和维护 SQL;映射关系配置比 JPA 更繁琐。
示例代码片段:
// Mapper 接口
public interface UserMapper {
@Select("SELECT id, name FROM users WHERE id = #{id}")
User findById(Long id);
}
// 在代码中使用
SqlSession session = sqlSessionFactory.openSession();
try {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.findById(1L);
System.out.println("User Name: " + user.getName());
} finally {
session.close();
}
Spring Data JPA - 简化开发
这并不是一个全新的技术,而是 Spring 框架对 JPA 规范的二次封装和扩展,它的目标是极大地简化数据访问层的开发。
- 核心包:
org.springframework.data.jpa.repository - 特点:
- 优点: 无需编写任何实现类(DAO/Repository),只需定义接口并继承
JpaRepository,Spring Data JPA 就会自动为你实现所有基础的 CRUD 方法(如save(),findById(),findAll())。 - 通过方法名自动生成查询(方法名
findByNameAndAgeGreaterThan会自动翻译成WHERE name = ? AND age > ?)。 - 与 Spring Boot 无缝集成,开箱即用。
- 优点: 无需编写任何实现类(DAO/Repository),只需定义接口并继承
示例代码片段:
// 定义 Repository 接口
public interface UserRepository extends JpaRepository<User, Long> {
// Spring Data JPA 会自动实现这个方法
List<User> findByName(String name);
}
// 在 Service 或 Controller 中直接注入并使用
@Autowired
private UserRepository userRepository;
public User getUserByName(String name) {
return userRepository.findByName(name).get(0); // 假设只有一个结果
}
其他数据库访问技术
除了上述主流技术,还有一些针对特定场景或数据库的技术:
-
Spring JDBC / JDBCTemplate:
- 这是 Spring 框架对原生 JDBC 的封装,它简化了 JDBC 的模板代码,提供了
JdbcTemplate类,帮你处理资源管理、异常转换等,让你只需关注 SQL 和参数。 - 特点: 比原生 JDBC 方便,但比 ORM 框架更底层,当你不想使用 ORM,但又想摆脱 JDBC 的繁琐时,这是一个很好的选择。
- 这是 Spring 框架对原生 JDBC 的封装,它简化了 JDBC 的模板代码,提供了
-
NoSQL 数据库驱动:
- 对于 MongoDB, Redis, Cassandra 等 NoSQL 数据库,它们通常提供自己专用的 Java 客户端库。
- 例如:
- MongoDB:
mongodb-driver-sync - Redis:
jedis或lettuce - Elasticsearch:
elasticsearch-java-high-level-client
- MongoDB:
总结与选择建议
| 技术 | 核心包/名称 | 特点 | 适用场景 |
|---|---|---|---|
| JDBC | java.sql |
Java 标准,基础但繁琐 | 学习原理、小型项目、无框架环境 |
| JPA (Hibernate) | javax.persistence |
ORM 标准,面向对象,自动化程度高 | 企业级应用,追求开发效率和代码整洁 |
| MyBatis | org.apache.ibatis |
SQL 控制力强,灵活,性能好 | 对 SQL 优化有高要求的项目,复杂查询多 |
| Spring Data JPA | org.springframework.data.jpa.repository |
基于JPA,极大简化Repository层开发 | Spring/Spring Boot 项目的首选,快速开发 |
| Spring JDBC | org.springframework.jdbc.core |
对JDBC的轻量级封装,比原生方便 | 不想引入ORM,但想简化JDBC操作 |
| NoSQL驱动 | 各厂商提供 | 针对特定数据库的API | 访问MongoDB、Redis等非关系型数据库 |
如何选择?
- 初学者或学习原理: 从 JDBC 开始,理解数据库连接和执行流程。
- 现代企业级应用开发 (特别是Spring/Spring Boot): Spring Data JPA 是不二之选,它结合了 JPA 的强大和 Spring 的便捷,能极大提升开发效率。
- 需要精细控制 SQL 或进行复杂查询: MyBatis 是更好的选择,它在灵活性和性能之间取得了很好的平衡。
- 使用 NoSQL 数据库: 直接使用该数据库官方提供的 Java 驱动。
