【Java 进阶篇】使用 JDBCTemplate 执行 DQL 语句详解


【Java 进阶篇】使用 JDBCTemplate 执行 DQL 语句详解_python

在前面的文章中,我们已经学习了如何使用 Spring 的 JDBCTemplate 执行 DML(Data Manipulation Language)操作,包括插入、更新和删除操作。现在,让我们来深入了解如何使用 JDBCTemplate 执行 DQL(Data Query Language)语句,从数据库中检索数据。

什么是 DQL?

DQL 是 SQL 的一部分,它用于从数据库中检索(查询)数据而不对数据进行修改。主要的 SQL DQL 语句包括 SELECTFROMWHEREGROUP BYHAVINGORDER BY 等,用于指定要检索的数据、数据的来源、筛选条件、分组方式和排序方式等。

使用 JDBCTemplate 执行 DQL 语句

要使用 JDBCTemplate 执行 DQL 语句,我们需要创建一个 JdbcTemplate 对象并配置数据源。以下是一些步骤:

步骤 1:配置数据源

首先,我们需要配置一个数据源,以便 JDBCTemplate 能够获取数据库连接。Spring 支持多种数据源,例如 Apache Commons DBCP、HikariCP 和 C3P0 等。这里我们以 HikariCP 数据源为例进行配置。

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import javax.sql.DataSource;

public class DataSourceConfig {

    public DataSource dataSource() {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
        config.setUsername("root");
        config.setPassword("password");

        return new HikariDataSource(config);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

步骤 2:创建 JdbcTemplate

接下来,我们需要创建一个 JdbcTemplate 对象,并将数据源传递给它。

import org.springframework.jdbc.core.JdbcTemplate;

public class JdbcTemplateConfig {

    private DataSource dataSource;

    public JdbcTemplateConfig(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

步骤 3:执行查询语句

现在,我们可以使用 JDBCTemplate 执行 DQL 查询语句了。以下是一个示例,演示如何查询数据库中的员工信息:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class EmployeeDao {

    private JdbcTemplate jdbcTemplate;

    public EmployeeDao(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public List<Employee> getAllEmployees() {
        String sql = "SELECT * FROM employees";
        return jdbcTemplate.query(sql, new EmployeeRowMapper());
    }
}

class EmployeeRowMapper implements RowMapper<Employee> {
    @Override
    public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
        Employee employee = new Employee();
        employee.setId(rs.getInt("id"));
        employee.setFirstName(rs.getString("first_name"));
        employee.setLastName(rs.getString("last_name"));
        employee.setEmail(rs.getString("email"));
        return employee;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

在上述示例中,我们创建了一个 EmployeeDao 类,其中的 getAllEmployees 方法执行了一个 SQL 查询语句,使用 query 方法将查询结果映射到 Employee 对象列表中。

示例代码

下面是一个完整的示例代码,演示了如何使用 JDBCTemplate 执行 DQL 查询语句:

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        // 步骤 1:配置数据源
        DataSource dataSource = configureDataSource();

        // 步骤 2:创建 JdbcTemplate
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 步骤 3:执行查询
        EmployeeDao employeeDao = new EmployeeDao(jdbcTemplate);
        List<Employee> employees = employeeDao.getAllEmployees();

        // 打印查询结果
        for (Employee employee : employees) {
            System.out.println("Employee ID: " + employee.getId());
            System.out.println("First Name: " + employee.getFirstName());
            System.out.println("Last Name: " + employee.getLastName());
            System.out.println("Email: " + employee.getEmail());
            System.out.println();
        }
    }

    private static DataSource configureDataSource() {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
        config.setUsername("root");
        config.setPassword("password");

        return new HikariDataSource(config);
    }
}

class Employee {
    private int id;
    private String firstName;
    private String lastName;
    private String email;

    // 省略 getter 和 setter 方法
}

class EmployeeDao {

    private JdbcTemplate jdbcTemplate;

    public EmployeeDao(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public List<Employee> getAllEmployees() {
        String sql = "SELECT * FROM employees";
        return jdbcTemplate.query(sql, new EmployeeRowMapper());
    }
}

class EmployeeRowMapper implements RowMapper<Employee> {
    @Override
    public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
        Employee employee = new Employee();
        employee.setId(rs.getInt("id"));
        employee.setFirstName(rs.getString("first_name"));
        employee.setLastName(rs.getString("last_name"));
        employee.setEmail(rs.getString("email"));
        return employee;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.

总结

在本文中,我们学习了如何使用 Spring 的 JDBCTemplate 执行 DQL 查询语句。首先,我们配置了数据源,然后创建了 JdbcTemplate 对象,最后执行了一个简单的查询操作,并将查询结果映射到 Java 对象中。通过这种方式,我们可以方便地与数据库交互,检索所需的数据。

希望本文能帮助你更好地理解如何使用 JDBCTemplate 执行 DQL 查询操作,并在实际项目中应用这些知识。

如果你想要深入学习 Spring JDBC,还可以研究更高级的主题,例如分页查询、存储过程调用和高级映射等。祝你在使用 Spring JDBC 进行数据库操作时取得成功!

作者信息


作者 : 繁依Fanyi


posted @ 2023-10-20 10:20  繁依Fanyi  阅读(8)  评论(0)    收藏  举报  来源