Java Web 数据库与持久层技术
以下是Java Web项目中数据库与持久层技术的系统介绍,涵盖核心概念、主流框架、最佳实践及技术选型建议。
📌 一、数据库连接基础
1. JDBC(Java Database Connectivity)
核心组件:
DriverManager
:管理数据库驱动Connection
:数据库连接对象Statement/PreparedStatement
:执行SQL语句ResultSet
:存储查询结果
工作流程:
- 加载驱动:
Class.forName("com.mysql.cj.jdbc.Driver")
- 创建连接:
String url = "jdbc:mysql://localhost:3306/mydb"; Connection conn = DriverManager.getConnection(url, username, password); //
- 执行SQL:
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id=?"); stmt.setInt(1, userId); // 防止SQL注入 ResultSet rs = stmt.executeQuery(); //
- 处理结果:遍历
ResultSet
获取数据 - 关闭资源:按
ResultSet → Statement → Connection
顺序释放
痛点解决:
- 原生JDBC需手动管理连接和资源关闭 → 连接池技术优化性能
- SQL硬编码维护难 → ORM框架自动映射对象与表
🧩 二、连接池技术
1. 为何需要连接池?
频繁创建/销毁连接消耗资源,连接池预先创建并复用连接,提升性能与稳定性。
2. 主流连接池对比
连接池 | 特点 | 配置示例(Spring Boot) |
---|---|---|
HikariCP | 高性能、轻量级(默认Spring Boot集成) | spring.datasource.hikari.maximum-pool-size=10 |
Druid | 支持SQL监控、防火墙功能 | spring.datasource.druid.initial-size=5 |
3. Druid监控配置
# application.yml
spring:
datasource:
druid:
stat-view-servlet:
enabled: true # 启用监控页面
url-pattern: /druid/*
filters: stat,wall # 启用统计和防火墙
🛠️ 三、持久层框架
1. MyBatis
核心特性:
- 半自动化ORM:手动编写SQL,灵活控制性能
- 动态SQL:支持
<if>
,<foreach>
等标签 - 缓存机制:
- 一级缓存(SqlSession级别)
- 二级缓存(Mapper命名空间级别)
集成Spring Boot步骤:
- 添加依赖:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency>
- 配置Mapper扫描:
@MapperScan("com.example.mapper") // 自动扫描Mapper接口
- XML/注解编写SQL:
@Select("SELECT * FROM user WHERE id = #{id}") User selectById(Long id); //
2. 通用Mapper插件
优势:
- 零SQL实现单表CRUD
- 兼容MyBatis原生功能
使用示例:
public interface UserMapper extends Mapper<User> {} // 继承通用接口
userMapper.selectByPrimaryKey(1); // 自动生成查询
3. JPA(Hibernate)
核心概念:
- 对象关系映射(ORM):实体类映射数据库表
- Repository接口:继承
JpaRepository
获得CRUD方法
实体类示例:
@Entity
@Table(name = "music_track")
public class Track {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
// Getter/Setter
}
⚙️ 四、高级主题
1. 多数据源配置
场景:读写分离、多数据库混合访问
实现方式:
- Spring AbstractRoutingDataSource:动态路由数据源
- MyBatis多数据源:配置多个
SqlSessionFactory
2. 事务管理
声明式事务:
@Service
public class UserService {
@Transactional // 开启事务
public void createUser(User user) {
userDao.insert(user);
userRoleDao.insert(user.getId(), "ROLE_USER");
}
}
关键注解:
@Transactional
:定义事务边界(回滚规则、传播行为)
3. SQL性能优化
- 连接池参数调优:根据并发量设置
max-active
、min-idle
- 慢SQL监控:Druid内置StatFilter统计执行时间
- ORM缓存:合理启用二级缓存减少数据库压力
📐 五、架构设计实践
1. 三层架构分层
层级 | 职责 | 技术实现 |
---|---|---|
Controller | 接收HTTP请求,返回响应 | Spring MVC @RestController |
Service | 业务逻辑处理,事务控制 | @Service + @Transactional |
DAO | 数据库操作 | MyBatis Mapper / JPA Repository |
协作流程:
2. DTO(数据传输对象)
作用:隔离实体类与前端数据,避免暴露敏感字段
示例:
public class UserDTO {
private String username;
private String email;
// 不包含password字段
}
🔍 六、技术选型建议
场景 | 推荐技术 | 理由 |
---|---|---|
高性能、复杂SQL | MyBatis + 连接池(HikariCP) | SQL可控性强,灵活优化查询 |
快速开发、简单CRUD | Spring Data JPA | 减少样板代码,自动生成SQL |
监控需求高 | Druid连接池 | 内置监控和防火墙功能 |
多表关联查询 | MyBatis动态SQL + 通用Mapper | 灵活处理复杂关联逻辑 |
💎 总结
Java Web中的数据库与持久层技术是系统性能的核心保障:
- 基础连接:JDBC是基石,连接池(HikariCP/Druid)解决资源管理问题;
- 持久层框架:
- MyBatis:适合需精细控制SQL的场景;
- JPA/Hibernate:适合快速开发标准CRUD;
- 架构设计:三层分层(Controller/Service/DAO)提升可维护性,DTO隔离数据层与展示层;
- 高级特性:事务管理、多数据源、缓存机制是构建高并发系统的关键。
最佳实践:
- 始终使用连接池和PreparedStatement防注入;
- 复杂查询用MyBatis动态SQL,简单CRUD用JPA;
- 生产环境启用SQL监控(如Druid)。