
在 Java Web 开发中,Spring 框架为我们提供了强大的数据库操作能力。当涉及到从数据库中查询数据时,执行 SQL 查询语句是一种常见且直接的方式。本文将详细介绍如何在 Spring 框架下执行 SQL 查询语句来获取数据库中的数据,同时给出具体的演示代码。
在开始之前,我们需要搭建好基本的开发环境,包括:
pom.xml 的示例:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies>
假设我们要创建一个简单的用户表,包含用户的 ID、姓名和年龄。以下是创建表的 SQL 语句:
CREATE DATABASE IF NOT EXISTS test_db;USE test_db;CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT NOT NULL);INSERT INTO users (name, age) VALUES ('Alice', 25);INSERT INTO users (name, age) VALUES ('Bob', 30);
在 application.properties 中配置数据库连接信息:
spring.datasource.url=jdbc:mysql://localhost:3306/test_dbspring.datasource.username=rootspring.datasource.password=your_passwordspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.jpa.hibernate.ddl-auto=updatespring.jpa.show-sql=true
创建一个 User 实体类,用于映射数据库中的 users 表:
import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entitypublic class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private int age;// 构造函数、Getter 和 Setter 方法public User() {}public User(String name, int age) {this.name = name;this.age = age;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}}
创建一个 UserRepository 接口,继承 JpaRepository,并使用 @Query 注解执行自定义的 SQL 查询语句:
import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.Query;import java.util.List;public interface UserRepository extends JpaRepository<User, Long> {// 使用 @Query 注解执行 SQL 查询语句@Query(value = "SELECT * FROM users WHERE age > :age", nativeQuery = true)List<User> findUsersByAgeGreaterThan(int age);}
创建一个 UserService 类,用于调用 UserRepository 中的方法:
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class UserService {@Autowiredprivate UserRepository userRepository;public List<User> getUsersByAgeGreaterThan(int age) {return userRepository.findUsersByAgeGreaterThan(age);}}
创建一个 UserController 类,用于处理 HTTP 请求:
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestControllerpublic class UserController {@Autowiredprivate UserService userService;@GetMapping("/users")public List<User> getUsersByAge(@RequestParam int age) {return userService.getUsersByAgeGreaterThan(age);}}
启动 Spring Boot 应用程序,访问 http://localhost:8080/users?age=26,可以看到返回的用户列表,这些用户的年龄都大于 26 岁。
通过以上步骤,我们成功地在 Spring 框架下执行 SQL 查询语句来查询数据库中的数据。下面是一个简单的总结表格:
| 步骤 | 说明 |
|---|---|
| 环境准备 | 安装 JDK、Spring 框架、数据库,添加相关依赖 |
| 数据库表设计 | 创建数据库和表,并插入测试数据 |
| Spring 项目配置 | 在 application.properties 中配置数据库连接信息 |
| 代码实现 | 创建实体类、Repository 接口、服务类和控制器类 |
| 测试 | 启动应用程序,访问相应的 URL 进行测试 |
通过这种方式,我们可以灵活地使用 SQL 查询语句来满足不同的业务需求。同时,Spring 框架提供的 @Query 注解让我们可以方便地执行自定义的 SQL 查询,提高了开发效率。