在前面的文章中,我们已经学习了如何使用 Spring 的 JDBCTemplate 执行 DML(Data Manipulation Language)操作,包括插入、更新和删除操作。现在,让我们来深入了解如何使用 JDBCTemplate 执行 DQL(Data Query Language)语句,从数据库中检索数据。
什么是 DQL?
DQL 是 SQL 的一部分,它用于从数据库中检索(查询)数据而不对数据进行修改。主要的 SQL DQL 语句包括 SELECT
、FROM
、WHERE
、GROUP BY
、HAVING
和 ORDER 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);
}
}
步骤 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);
}
}
步骤 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;
}
}
在上述示例中,我们创建了一个 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;
}
}
总结
在本文中,我们学习了如何使用 Spring 的 JDBCTemplate 执行 DQL 查询语句。首先,我们配置了数据源,然后创建了 JdbcTemplate 对象,最后执行了一个简单的查询操作,并将查询结果映射到 Java 对象中。通过这种方式,我们可以方便地与数据库交互,检索所需的数据。
希望本文能帮助你更好地理解如何使用 JDBCTemplate 执行 DQL 查询操作,并在实际项目中应用这些知识。
如果你想要深入学习 Spring JDBC,还可以研究更高级的主题,例如分页查询、存储过程调用和高级映射等。祝你在使用 Spring JDBC 进行数据库操作时取得成功!
作者信息 作者 : 繁依Fanyi CSDN: https://techfanyi.blog.csdn.net 掘金:https://juejin.cn/user/4154386571867191 |