xDocxDoc
AI
前端
后端
iOS
Android
Flutter
AI
前端
后端
iOS
Android
Flutter
  • Java Web 基础

    • Java Web开发从零开始:初学者完整学习指南
    • Java Web开发基础技术栈
    • Java Web 数据库与持久层技术
    • Java Web开发框架
    • 🔒 Java Web安全体系详解

Java Web 数据库与持久层技术

以下是Java Web项目中数据库与持久层技术的系统介绍,涵盖核心概念、主流框架、最佳实践及技术选型建议。

📌 一、数据库连接基础

1. JDBC(Java Database Connectivity)

核心组件:

  • DriverManager:管理数据库驱动
  • Connection:数据库连接对象
  • Statement/PreparedStatement:执行SQL语句
  • ResultSet:存储查询结果

工作流程:

  1. 加载驱动:Class.forName("com.mysql.cj.jdbc.Driver")
  2. 创建连接:
    String url = "jdbc:mysql://localhost:3306/mydb";
    Connection conn = DriverManager.getConnection(url, username, password); //
  3. 执行SQL:
    PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id=?");
    stmt.setInt(1, userId); // 防止SQL注入
    ResultSet rs = stmt.executeQuery(); //
  4. 处理结果:遍历ResultSet获取数据
  5. 关闭资源:按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步骤:

  1. 添加依赖:
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>
  2. 配置Mapper扫描:
    @MapperScan("com.example.mapper") // 自动扫描Mapper接口
  3. 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字段
}

🔍 六、技术选型建议

场景推荐技术理由
高性能、复杂SQLMyBatis + 连接池(HikariCP)SQL可控性强,灵活优化查询
快速开发、简单CRUDSpring Data JPA减少样板代码,自动生成SQL
监控需求高Druid连接池内置监控和防火墙功能
多表关联查询MyBatis动态SQL + 通用Mapper灵活处理复杂关联逻辑

💎 总结

Java Web中的数据库与持久层技术是系统性能的核心保障:

  1. 基础连接:JDBC是基石,连接池(HikariCP/Druid)解决资源管理问题;
  2. 持久层框架:
    • MyBatis:适合需精细控制SQL的场景;
    • JPA/Hibernate:适合快速开发标准CRUD;
  3. 架构设计:三层分层(Controller/Service/DAO)提升可维护性,DTO隔离数据层与展示层;
  4. 高级特性:事务管理、多数据源、缓存机制是构建高并发系统的关键。

最佳实践:

  • 始终使用连接池和PreparedStatement防注入;
  • 复杂查询用MyBatis动态SQL,简单CRUD用JPA;
  • 生产环境启用SQL监控(如Druid)。
最后更新: 2025/8/26 10:07
Prev
Java Web开发基础技术栈
Next
Java Web开发框架