JdbcTemplate+参数解析+查询操作示例、更新操作示例、批量操作示例、PreparedStatement操作示例

文章目录

    • 1. 引入依赖和配置数据源
    • 2. JdbcTemplate的基础操作,源代码参数解析
    • 3. 查询操作示例
      • 查询单条记录
      • 查询多条记录
      • 查询单个字段
      • 带分页的查询
    • 4. 更新操作示例
      • INSERT操作
      • UPDATE操作
      • DELETE操作
    • 5. 批量操作示例
      • 批量插入
      • 批量更新
      • 批量删除
    • 6. PreparedStatement操作示例

JdbcTemplate是Spring框架中的一个核心模块,用于简化JDBC编程,提供了一种简单的方式来访问数据库、执行SQL语句和处理ResultSet结果集。

1. 引入依赖和配置数据源

在使用JdbcTemplate之前,我们需要在项目中引入相关的依赖包,可以使用Maven进行管理,例如:

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-jdbcartifactId>
    <version>5.3.10version>
dependency>

在引入依赖包之后,我们需要在Spring配置文件中配置数据源和JdbcTemplate,例如:


<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
  <property name="user" value="root"/>
  <property name="password" value="123456"/>
bean>


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

2. JdbcTemplate的基础操作,源代码参数解析

JdbcTemplate提供了一系列基础的操作方法,包括查询、更新、批量操作等。这些操作方法都是通过JdbcTemplate类提供的API来实现的。下面是一些常用的基础操作方法:

查询操作

public List<Map<String, Object>> queryForList(String sql, Object... args)
public List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)
public T queryForObject(String sql, Object[] args, RowMapper<T> rowMapper)
  • queryForList:执行SQL查询并返回一个List对象,每个元素为一个Map对象,表示一行记录。
  • query:执行SQL查询并返回一个List对象,每个元素为一个JavaBean对象。
  • queryForObject:执行SQL查询并返回一个单一的结果对象,通常用于查询单条记录。

更新操作

public int update(String sql, Object... args)
public int[] batchUpdate(String... sql)
  • update:执行SQL更新操作,返回受影响的行数。
  • batchUpdate:批量执行SQL更新操作,返回一个int数组,其中每个元素表示对应SQL语句所影响的行数。

批量操作

public <T> void execute(String sql, BatchPreparedStatementSetter pss)
public int[] batchUpdate(String sql, BatchPreparedStatementSetter pss)
  • execute:执行批量更新操作,需要一个BatchPreparedStatementSetter对象作为参数,用于设置批量更新的参数。
  • batchUpdate:批量执行SQL更新操作,需要一个BatchPreparedStatementSetter对象作为参数,用于设置批量更新的参数。返回一个int数组,其中每个元素表示对应SQL语句所影响的行数。

PreparedStatement操作

public <T> T execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action)
public <T> T execute(String sql, PreparedStatementCallback<T> action)
  • execute:执行指定的PreparedStatementCreator,用于生成预编译的SQL语句,然后执行PreparedStatementCallback回调函数来实现数据库的操作。
  • execute:执行指定的SQL语句,然后执行PreparedStatementCallback回调函数来实现数据库的操作。

3. 查询操作示例

JdbcTemplate提供了丰富的查询操作方法,包括基于Map、JavaBean或ResultSet结果集的查询方式。下面是一些常用的查询操作方法:

查询单条记录

// 按照主键值查询单条记录
String sql = "SELECT * FROM user WHERE id = ?";
User user = jdbcTemplate.queryForObject(sql, new Object[]{1}, new BeanPropertyRowMapper<>(User.class));

// 按照条件查询单条记录
String sql = "SELECT * FROM user WHERE username = ?";
User user = jdbcTemplate.queryForObject(sql, new Object[]{"Tom"}, new BeanPropertyRowMapper<>(User.class));

查询多条记录

// 查询所有记录
String sql = "SELECT * FROM user";
List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));

// 根据条件查询多条记录
String sql = "SELECT * FROM user WHERE age > ?";
List<User> userList = jdbcTemplate.query(sql, new Object[]{18}, new BeanPropertyRowMapper<>(User.class));

查询单个字段

// 查询某个字段的值
String sql = "SELECT COUNT(*) FROM user";
Long count = jdbcTemplate.queryForObject(sql, Long.class);

// 根据条件查询某个字段的值
String sql = "SELECT AVG(age) FROM user WHERE sex = ?";
Double avgAge = jdbcTemplate.queryForObject(sql, new Object[]{"male"}, Double.class);

带分页的查询

// 查询记录总数
String sql = "SELECT COUNT(*) FROM user WHERE age > ?";
Long totalCount = jdbcTemplate.queryForObject(sql, new Object[]{18}, Long.class);

// 分页查询记录
String sql = "SELECT * FROM user WHERE age > ? LIMIT ?, ?";
List<User> userList = jdbcTemplate.query(sql, new Object[]{18, start, pageSize}, new BeanPropertyRowMapper<>(User.class));

4. 更新操作示例

JdbcTemplate提供了多种方式来执行SQL更新操作,包括INSERT、UPDATE和DELETE三种类型的SQL语句。

INSERT操作

// 插入单条记录
String sql = "INSERT INTO user (username, password, age, sex) VALUES (?, ?, ?, ?)";
int result = jdbcTemplate.update(sql, new Object[]{"Tom", "123456", 20, "male"});

// 插入多条记录
String sql = "INSERT INTO user (username, password, age, sex) VALUES (?, ?, ?, ?)";
List<Object[]> batchArgs = new ArrayList<>();
batchArgs.add(new Object[]{"Tom", "123456", 20, "male"});
batchArgs.add(new Object[]{"Lucy", "654321", 18, "female"});
int[] result = jdbcTemplate.batchUpdate(sql, batchArgs);

UPDATE操作

// 更新单条记录
String sql = "UPDATE user SET age = ? WHERE id = ?";
int result = jdbcTemplate.update(sql, new Object[]{21, 1});

// 更新多条记录
String sql = "UPDATE user SET age = ? WHERE sex = ?";
int[] result = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        ps.setInt(1, 21);
        ps.setString(2, "male");
    }

    @Override
    public int getBatchSize() {
        return 2;
    }
});

DELETE操作

// 删除单条记录
String sql = "DELETE FROM user WHERE id = ?";
int result = jdbcTemplate.update(sql, new Object[]{1});

// 删除多条记录
String sql = "DELETE FROM user WHERE sex = ?";
int[] result = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        ps.setString(1, "male");
    }

    @Override
    public int getBatchSize() {
        return 2;
    }
});

5. 批量操作示例

JdbcTemplate提供了批量操作的功能,可以实现批量插入、批量更新和批量删除等多种操作。

批量插入

// 插入多条记录
String sql = "INSERT INTO user (username, password, age, sex) VALUES (?, ?, ?, ?)";
List<Object[]> batchArgs = new ArrayList<>();
batchArgs.add(new Object[]{"Tom", "123456", 20, "male"});
batchArgs.add(new Object[]{"Lucy", "654321", 18, "female"});
int[] result = jdbcTemplate.batchUpdate(sql, batchArgs);

批量更新

// 更新多条记录
String sql = "UPDATE user SET age = ? WHERE sex = ?";
int[] result = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        ps.setInt(1, 21);
        ps.setString(2, "male");
    }

    @Override
    public int getBatchSize() {
        return 2;
    }
});

批量删除

// 删除多条记录
String sql = "DELETE FROM user WHERE sex = ?";
int[] result = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        ps.setString(1, "male");
    }

    @Override
    public int getBatchSize() {
        return 2;
    }
});

6. PreparedStatement操作示例

JdbcTemplate提供了PreparedStatement操作的API,可以通过PreparedStatementCreator接口创建预编译的SQL语句,然后使用PreparedStatementCallback回调函数实现对数据库的操作。

// 创建预编译的SQL语句
String sql = "INSERT INTO user (username, password, age, sex) VALUES (?, ?, ?, ?)";
PreparedStatementCreator psc = con -> {
    PreparedStatement ps = con.prepareStatement(sql);
    ps.setString(1, "Tom");
    ps.setString(2, "123456");
    ps.setInt(3, 20);
    ps.setString(4, "male");
    return ps;
};

// 执行预编译的SQL语句
jdbcTemplate.execute(psc, PreparedStatement::execute);

你可能感兴趣的:(java,spring)