首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring JDBC 框架架構解析與 JdbcTemplate 核心配置指南

     編輯:Java 綜合教學

Spring JDBC 框架架構解析與 JdbcTemplate 核心配置指南

Spring JDBC 框架由四大模組組成,JdbcTemplate 作為 Core 包的核心類,極大簡化了 JDBC 開發。本文系統梳理框架架構、數據源配置方案及核心 API 使用。

一、Spring JDBC 四大模組

模組包路徑核心職責
Coreorg.springframework.jdbc.coreJdbcTemplate、RowMapper、ResultSetExtractor 等核心模板類
DataSourceorg.springframework.jdbc.datasource數據源工具類、簡單實現類、事務管理集成
Objectorg.springframework.jdbc.objectRDBMS 操作對象化:MappingSqlQuery、SqlUpdate、SqlCall
Supportorg.springframework.jdbc.support異常轉換(SQLException → DataAccessException)、工具類

二、數據源配置三大方案

1. Spring 內置 DriverManagerDataSource(開發測試用)

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
</bean>

2. C3P0 連接池(生產推薦)

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${driver}"/>
    <property name="jdbcUrl" value="${url}"/>
    <property name="user" value="${username}"/>
    <property name="password" value="${password}"/>
</bean>

需引入 c3p0-0.9.5.x.jar

3. DBCP 連接池

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
</bean>

需引入 commons-dbcp.jar 和 commons-pool.jar

三、JdbcTemplate 配置與注入

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

在 DAO 中注入:

<bean id="userDao" class="com.example.UserDAOImpl">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>

四、JdbcTemplate API 核心方法回顧

1. execute() - 通用執行/存儲過程

String result = (String) getJdbcTemplate().execute(
    new CallableStatementCreator() {
        public CallableStatement createCallableStatement(Connection con) throws SQLException {
            CallableStatement cs = con.prepareCall("{call proc_name(?,?)}");
            cs.setString(1, "inputParam");
            cs.registerOutParameter(2, Types.VARCHAR);
            return cs;
        }
    },
    new CallableStatementCallback() {
        public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
            cs.execute();
            return cs.getString(2);
        }
    }
);

2. update() / batchUpdate() - 增刪改

// 單條
jdbcTemplate.update("insert into t_user(name,age) values(?,?)", "Tom", 25);

// 批量
String sql = "insert into t_user(name,age) values(?,?)";
List<Object[]> batchArgs = Arrays.asList(new Object[][]{{"A",1},{"B",2}});
jdbcTemplate.batchUpdate(sql, batchArgs);

3. query 系列 - 查詢

// 單值
Integer count = jdbcTemplate.queryForObject("select count(*) from t_user", Integer.class);

// 單對象
User user = jdbcTemplate.queryForObject("select * from t_user where id=?", new BeanPropertyRowMapper<>(User.class), 1);

// 列表
List<User> list = jdbcTemplate.query("select * from t_user", new BeanPropertyRowMapper<>(User.class));

五、最佳實踐建議

  • 生產環境必須使用連接池(C3P0/HikariCP/Druid)
  • 複雜 SQL 建議提取為常量或配置文件
  • 善用 BeanPropertyRowMapper 減少手寫映射代碼
  • 批量操作使用 batchUpdate 顯著提升性能
  • 異常處理依賴 Spring 統一轉換,業務代碼無需 try-catch SQLException

理解框架架構與配置本質,才能在實際項目中靈活應對各種數據訪問場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved