在 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_db
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
创建一个 User
实体类,用于映射数据库中的 users
表:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public 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;
}
@Override
public 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;
@Service
public class UserService {
@Autowired
private 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;
@RestController
public class UserController {
@Autowired
private 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 查询,提高了开发效率。