SpringBoot中怎么利用JDBC对数据库进行操作

发布时间:2021-06-15 14:23:23 作者:Leah
来源:亿速云 阅读:309
# SpringBoot中怎么利用JDBC对数据库进行操作

## 目录
1. [JDBC与SpringBoot概述](#jdbc与springboot概述)
2. [环境准备与项目搭建](#环境准备与项目搭建)
3. [基础JDBC操作实现](#基础jdbc操作实现)
4. [Spring JDBC Template详解](#spring-jdbc-template详解)
5. [事务管理机制](#事务管理机制)
6. [连接池配置优化](#连接池配置优化)
7. [异常处理与调试](#异常处理与调试)
8. [性能优化建议](#性能优化建议)
9. [实际应用案例](#实际应用案例)
10. [总结与扩展](#总结与扩展)

---

## JDBC与SpringBoot概述
### 1.1 JDBC技术简介
Java数据库连接(JDBC)是Java语言中用来规范客户端程序如何访问数据库的标准API,由一组用Java语言编写的类和接口组成。它提供了:
- 统一的数据库访问接口
- 驱动程序管理器架构
- SQL语句执行能力
- 事务控制功能

```java
// 传统JDBC操作示例
Connection conn = null;
try {
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection(url,user,password);
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM users");
    // 处理结果集...
} finally {
    if(conn != null) conn.close();
}

1.2 SpringBoot的简化设计

SpringBoot通过自动配置和starter依赖大幅简化了JDBC的使用: - 自动配置数据源 - 内置连接池支持 - 简化异常处理 - 声明式事务支持


环境准备与项目搭建

2.1 必要依赖配置

在pom.xml中添加关键依赖:

<dependencies>
    <!-- SpringBoot Starter JDBC -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    
    <!-- 数据库驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
    
    <!-- 连接池可选 -->
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
    </dependency>
</dependencies>

2.2 数据源配置

application.yml典型配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test_db?useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      maximum-pool-size: 10
      connection-timeout: 30000

基础JDBC操作实现

3.1 数据查询操作

3.1.1 基本查询示例

@Repository
public class UserRepository {
    @Autowired
    private DataSource dataSource;

    public List<User> findAll() throws SQLException {
        List<User> users = new ArrayList<>();
        try(Connection conn = dataSource.getConnection();
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {
            
            while(rs.next()) {
                User user = new User();
                user.setId(rs.getLong("id"));
                user.setName(rs.getString("name"));
                users.add(user);
            }
        }
        return users;
    }
}

3.1.2 参数化查询

public User findById(Long id) throws SQLException {
    try(Connection conn = dataSource.getConnection();
        PreparedStatement ps = conn.prepareStatement(
            "SELECT * FROM users WHERE id = ?")) {
        
        ps.setLong(1, id);
        ResultSet rs = ps.executeQuery();
        if(rs.next()) {
            return new User(rs.getLong("id"), rs.getString("name"));
        }
        return null;
    }
}

Spring JDBC Template详解

4.1 核心方法解析

JdbcTemplate提供的主要方法:

方法类别 典型方法 说明
查询操作 query() 执行查询并处理结果集
更新操作 update() 执行INSERT/UPDATE/DELETE
批处理 batchUpdate() 执行批量操作
存储过程 call() 调用存储过程

4.2 高级查询示例

public List<User> findActiveUsers() {
    return jdbcTemplate.query(
        "SELECT * FROM users WHERE status = ?", 
        new Object[]{1},
        (rs, rowNum) -> new User(
            rs.getLong("id"),
            rs.getString("name"),
            rs.getInt("age")
        ));
}

事务管理机制

5.1 声明式事务配置

@Configuration
@EnableTransactionManagement
public class TransactionConfig {
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

@Service
public class UserService {
    @Transactional
    public void createUser(User user) {
        // 数据库操作...
    }
}

5.2 事务传播行为

Spring定义了7种传播行为: - REQUIRED(默认) - SUPPORTS - MANDATORY - REQUIRES_NEW - NOT_SUPPORTED - NEVER - NESTED


连接池配置优化

6.1 HikariCP配置参数

spring:
  datasource:
    hikari:
      pool-name: SpringBootHikariCP
      minimum-idle: 5
      maximum-pool-size: 20
      idle-timeout: 30000
      max-lifetime: 1800000
      connection-timeout: 30000
      connection-test-query: SELECT 1

异常处理与调试

7.1 Spring JDBC异常体系

Spring将检查型SQLException转换为运行时异常: - DataAccessException - BadSqlGrammarException - DataIntegrityViolationException - DeadlockLoserDataAccessException

try {
    jdbcTemplate.update("INSERT INTO users VALUES(?,?)", user.getId(), user.getName());
} catch(DuplicateKeyException ex) {
    log.error("主键冲突: {}", ex.getMessage());
}

性能优化建议

8.1 查询优化技巧

  1. 使用PreparedStatement减少解析开销
  2. 合理设置fetchSize
  3. 批量操作使用batchUpdate
  4. 考虑使用ResultSetExtractor替代RowMapper
public Map<Long, User> getUserMap() {
    return jdbcTemplate.query("SELECT * FROM users", 
        rs -> {
            Map<Long, User> map = new HashMap<>();
            while(rs.next()) {
                User user = new User(rs.getLong("id"), rs.getString("name"));
                map.put(user.getId(), user);
            }
            return map;
        });
}

实际应用案例

9.1 电商系统用户模块

完整实现包含: 1. 用户CRUD操作 2. 分页查询实现 3. 事务处理示例 4. 性能监控配置

@Service
public class UserServiceImpl implements UserService {
    private static final String INSERT_SQL = 
        "INSERT INTO users(username,password,email) VALUES(?,?,?)";
    
    @Override
    @Transactional
    public User register(User user) {
        jdbcTemplate.update(INSERT_SQL, 
            user.getUsername(),
            passwordEncoder.encode(user.getPassword()),
            user.getEmail());
        // 其他业务逻辑...
    }
}

总结与扩展

10.1 技术对比

技术方案 优点 适用场景
原生JDBC 性能最好,控制精细 超高性能需求
JdbcTemplate 平衡易用与性能 大多数常规场景
ORM框架 开发效率最高 复杂业务系统

10.2 扩展方向

  1. 整合MyBatis实现混合持久层
  2. 多数据源配置方案
  3. 读写分离实现
  4. 分布式事务处理

完整代码示例可参考:GitHub示例仓库 “`

(注:此为精简版大纲,完整8400字文章需扩展每个章节的详细说明、原理分析、更多代码示例和性能对比图表等内容)

推荐阅读:
  1. 怎么在SpringBoot中利用MybatisSQL对@Intercepts进行过滤
  2. 利用springboot怎么对属性进行定义

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jdbc spring boot

上一篇:jQuery无冲突模式的示例分析

下一篇:jquery层次选择器的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》