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


    在这里插入图片描述

    在前面的文章中,我们已经学习了如何使用 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
    CSDN: https://techfanyi.blog.csdn.net
    掘金:https://juejin.cn/user/4154386571867191
  • 相关阅读:
    2023 03 CSPT2 垦田计划——二分
    腾讯云服务器南京地域详细介绍、测试IP和Ping值测速
    linux 防火墙介绍以及iptables的使用
    升级 Xcode 15模拟器 iOS 17.0 Simulator(21A328) 下载失败
    今天是新的一天
    windows11系统如何设置锁屏壁纸
    有向图的强连通分量——银河(差分约束和强连通分量两种做法)
    【SpringBoot笔记20】SpringBoot跨域问题之CORS的四种解决方案
    【GNN终身学习】2022 CVPR 终身图学习
    【Python】正则表达式判断是否存在连续N个字母
  • 原文地址:https://blog.csdn.net/qq_21484461/article/details/133623099