💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
`JdbcTemplate` 是 Spring JDBC 模块的核心类,提供了大量简化数据库操作的方法。以下是一些常用的 `JdbcTemplate` 方法,按功能分类列举: ### **1. 查询相关方法** #### **1.1 查询单行数据** - **`queryForObject(String sql, Class<T> requiredType)`** 执行 SQL 查询,返回单个值(例如查询单个字段的值)。 示例:`int count = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM users", Integer.class);` - **`queryForObject(String sql, RowMapper<T> rowMapper)`** 执行 SQL 查询,返回单行数据,并通过 `RowMapper` 将结果集映射为对象。 示例: ```java User user = jdbcTemplate.queryForObject( "SELECT id, name, age FROM users WHERE id = ?", new BeanPropertyRowMapper<>(User.class), userId ); ``` #### **1.2 查询多行数据** - **`query(String sql, RowMapper<T> rowMapper)`** 执行 SQL 查询,返回多行数据,并通过 `RowMapper` 将每行结果映射为对象。 示例: ```java List<User> users = jdbcTemplate.query( "SELECT id, name, age FROM users", new BeanPropertyRowMapper<>(User.class) ); ``` #### **1.3 查询单列数据** - **`queryForList(String sql, Class<T> elementType)`** 执行 SQL 查询,返回单列数据的列表。 示例: ```java List<String> names = jdbcTemplate.queryForList("SELECT name FROM users", String.class); ``` ### **2. 插入、更新、删除相关方法** #### **2.1 插入数据** - **`update(String sql)`** 执行 SQL 插入语句,返回受影响的行数。 示例: ```java int rowsAffected = jdbcTemplate.update("INSERT INTO users (name, age) VALUES (?, ?)", "Alice", 30); ``` #### **2.2 更新数据** - **`update(String sql)`** 执行 SQL 更新语句,返回受影响的行数。 示例: ```java int rowsAffected = jdbcTemplate.update("UPDATE users SET age = ? WHERE id = ?", 31, userId); ``` #### **2.3 删除数据** - **`update(String sql)`** 执行 SQL 删除语句,返回受影响的行数。 示例: ```java int rowsAffected = jdbcTemplate.update("DELETE FROM users WHERE id = ?", userId); ``` ### **3. 批量操作** #### **3.1 批量插入** - **`batchUpdate(String sql, BatchPreparedStatementSetter pss)`** 执行批量插入操作。 示例: ```java String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { ps.setString(1, names.get(i)); ps.setInt(2, ages.get(i)); } @Override public int getBatchSize() { return names.size(); } }); ``` #### **3.2 批量更新** - **`batchUpdate(String sql, List<Object[]> batchArgs)`** 执行批量更新操作。 示例: ```java String sql = "UPDATE users SET age = ? WHERE id = ?"; List<Object[]> batchArgs = new ArrayList<>(); batchArgs.add(new Object[]{31, userId1}); batchArgs.add(new Object[]{32, userId2}); jdbcTemplate.batchUpdate(sql, batchArgs); ``` ### **4. 其他常用方法** #### **4.1 查询单个值** - **`queryForObject(String sql, Object[] args, Class<T> requiredType)`** 带参数的查询单个值。 示例: ```java int count = jdbcTemplate.queryForObject( "SELECT COUNT(*) FROM users WHERE age > ?", new Object[]{25}, Integer.class ); ``` #### **4.2 执行存储过程** - **`call(String sql, SqlParameterSource inParams, SqlOutParameter... outParams)`** 调用存储过程。 示例: ```java MapSqlParameterSource inParams = new MapSqlParameterSource(); inParams.addValue("in_param", value); SqlOutParameter outParam = new SqlOutParameter("out_param", Types.INTEGER); jdbcTemplate.call("{CALL my_procedure(?, ?)}", inParams, outParam); ``` #### **4.3 执行原生 SQL** - **`execute(String sql)`** 执行任意 SQL 语句(如创建表、删除表等)。 示例: ```java jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY, name VARCHAR(50), age INT)"); ``` ### **5. 事务相关方法** 虽然事务管理通常通过 Spring 的声明式事务管理来实现,但 `JdbcTemplate` 也支持编程式事务。可以结合 `TransactionTemplate` 或 `DataSourceTransactionManager` 来管理事务。 这些方法涵盖了大部分常见的数据库操作场景,通过 `JdbcTemplate` 的使用,可以极大地简化 JDBC 编程的复杂性。