springframework JdbcTemplate

org.springframework.jdbc.core.JdbcTemplate 提供了一组方便的方法来执行 SQL 语句,并处理数据库的结果。以下是一些常用的方法及其用法:

  1. execute:

    • 描述:用于执行任意的 SQL 语句,如 DDL 语句。

    • 用法

      jdbcTemplate.execute("CREATE TABLE users (id INT, name VARCHAR(100))");
      
      
  2. update:

    • 描述:用于执行插入(INSERT)、更新(UPDATE)或删除(DELETE)操作。

    • 用法

      String sql = "INSERT INTO users (id, name) VALUES (?, ?)";
      jdbcTemplate.update(sql, 1, "John Doe");
      
      
  3. queryForObject:

    • 描述:用于执行查询并返回单个对象。通常用于查询单行单列的值。

    • 用法

      String sql = "SELECT name FROM users WHERE id = ?";
      String name = jdbcTemplate.queryForObject(sql, new Object[]{1}, String.class);
      
      
  4. queryForList:

    • 描述:用于执行查询并返回对象的列表,通常用于查询多行单列的值。

    • 用法

      String sql = "SELECT name FROM users";
      List<String> names = jdbcTemplate.queryForList(sql, String.class);
      
      
  5. query:

    • 描述:用于执行查询并返回结果集。可以使用 RowMapper 将结果集映射到对象。

    • 用法

      String sql = "SELECT id, name FROM users";
      List<User> users = jdbcTemplate.query(sql, new RowMapper<User>() {
          public User mapRow(ResultSet rs, int rowNum) throws SQLException {
              User user = new User();
              user.setId(rs.getInt("id"));
              user.setName(rs.getString("name"));
              return user;
          }
      });
      
      
  6. batchUpdate:

    • 描述:用于批量执行更新操作。

    • 用法

      String sql = "INSERT INTO users (id, name) VALUES (?, ?)";
      List<Object[]> batchArgs = new ArrayList<>();
      batchArgs.add(new Object[]{1, "John"});
      batchArgs.add(new Object[]{2, "Jane"});
      jdbcTemplate.batchUpdate(sql, batchArgs);
      
      
  7. queryForMap:

    • 描述:用于执行查询并返回单行结果,以 Map 形式表示列名和列值。

    • 用法

      String sql = "SELECT id, name FROM users WHERE id = ?";
      Map<String, Object> result = jdbcTemplate.queryForMap(sql, 1);
      
      
  8. queryForRowSet:

    • 描述:用于执行查询并返回 SqlRowSet 对象。

    • 用法

      String sql = "SELECT id, name FROM users";
      SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql);
      
      

这些方法提供了对数据库操作的全面支持,使得 Spring 中的 JDBC 操作更加简洁和易于维护。

==============================================================================================

JdbcTemplate 不支持直接传入以分号(;)分隔的多个 SQL 语句。每次调用 JdbcTemplate 的方法时,只能执行一条 SQL 语句。这是为了避免 SQL 注入风险和执行复杂的多语句事务时出现的不确定性。

如果需要执行多个 SQL 语句,可以将它们分成单独的调用,或者使用事务管理器在一个事务中执行多个操作。以下是如何使用事务管理器的示例:

import org.springframework.transaction.annotation.Transactional;

@Transactional
public void executeMultipleStatements(JdbcTemplate jdbcTemplate) {
    jdbcTemplate.update("INSERT INTO users (id, name) VALUES (1, 'John')");
    jdbcTemplate.update("INSERT INTO users (id, name) VALUES (2, 'Jane')");
    // 可以添加更多的 SQL 语句
}

在这个示例中,@Transactional 注解确保了所有的 SQL 语句在同一个事务中执行。如果其中任何一个语句失败,整个事务将回滚。

总之,JdbcTemplate 不支持直接传入多个以分号分隔的 SQL 语句。应当将每个语句分开执行,或者使用事务管理器来确保多个操作在同一个事务中执行。

=====================================================================================================

jdbcTemplate.queryForObject(sql, args, cls)

JdbcTemplateorg.springframework.jdbc.core.JdbcTemplate。在 jdbcTemplate.queryForObject(sql, args, cls) 方法中,第二个参数 args 是一个数组,包含了 SQL 查询中需要的参数。它用于为预编译的 SQL 语句中的占位符(例如 ?)提供具体的值。

例如:

String sql = "SELECT name FROM users WHERE id = ?";
Object[] args = {1};
String name = jdbcTemplate.queryForObject(sql, args, String.class);

在这个例子中,args 数组包含了一个值 1,它将被用来替换 SQL 查询中的第一个 ? 占位符。

这里经过了预编译,所以不能进行SQL注入。JdbcTemplate 使用了预编译的SQL语句,并通过参数化查询来避免SQL注入攻击。

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值