下面我将为您详细讲解“Springboot使用Spring Data JPA实现数据库操作”的完整攻略。
简介
Spring Data JPA是Spring框架下的一个项目,其主要目的是简化数据访问层的开发,并提供了更加优雅(简单)的方式来对关系型数据库进行操作。
步骤一:添加依赖
要想使用Spring Data JPA,我们需要先在pom.xml文件中添加以下依赖:
<!-- Spring Boot Starter Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL JDBC driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
步骤二:配置数据库连接信息
在“application.properties”文件中添加如下的数据库连接信息:
# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/demo_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root # 数据库用户名(根据实际情况修改)
spring.datasource.password=123456 # 数据库密码(根据实际情况修改)
# JPA相关配置
spring.jpa.show-sql=true # 是否显示SQL语句
spring.jpa.hibernate.ddl-auto=update # 自动更新数据库表
spring.jpa.properties.hibernate.format_sql=true # 格式化SQL语句输出
步骤三:定义实体类
我们需要定义JPA实体类,并使用@Entity注解标注,这将告诉Spring Data JPA将此类映射到数据库中相应的表上。
以用户实体类为例:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
// 省略getter和setter方法
}
步骤四:定义JPA接口
我们需要定义一个JPA接口,该接口继承自JpaRepository,并提供我们需要的自定义方法声明。方法声明规则如下:
- Spring Data JPA将根据方法名自动生成相应的JPA查询语句
- 方法名的起始部分必须是一个合法的JPA查询关键字(如find、get、read等)
- 方法名的剩余部分可以是许多不同的组合,包括查询参数和操作符
以用户JPA接口为例:
public interface UserRepository extends JpaRepository<User, Integer> {
List<User> findByName(String name);
List<User> findByAgeGreaterThanEqual(Integer age);
}
步骤五:使用JPA方法
我们可以在Controller中使用JPA接口所提供的方法,来实现对数据库的操作。
以查询用户列表为例:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/list")
public List<User> userList() {
return userRepository.findAll();
}
}
以条件查询为例:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/name")
public List<User> findByName(String name) {
return userRepository.findByName(name);
}
@GetMapping("/age")
public List<User> findByAgeGreaterThanEqual(Integer age) {
return userRepository.findByAgeGreaterThanEqual(age);
}
}
示例一:基于MySQL数据库的用户管理系统
参考以下代码,我们可以非常快捷地搭建一个基于MySQL数据库的用户管理系统,并且实现用户查询、添加、修改和删除等基本操作:
- 项目结构如下所示:
├── pom.xml
└── src
└── main
├── java
│ └── com.example.demo
│ ├── DemoApplication.java
│ ├── controller
│ │ └── UserController.java
│ ├── entity
│ │ └── User.java
│ └── repository
│ └── UserRepository.java
└── resources
├── application.properties
└── schema.sql
- 实体类User.java代码如下:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
// 省略getter和setter方法
}
- JPA接口UserRepository.java代码如下:
public interface UserRepository extends JpaRepository<User, Integer> {
List<User> findByName(String name);
List<User> findByAgeGreaterThanEqual(Integer age);
}
- UserController.java代码如下:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/list")
public List<User> userList() {
return userRepository.findAll();
}
@PostMapping("/add")
public User addUser(@RequestBody User user) {
return userRepository.save(user);
}
@PutMapping("/update")
public User updateUser(@RequestBody User user) {
return userRepository.save(user);
}
@DeleteMapping("/delete/{id}")
public void deleteUser(@PathVariable("id") Integer id) {
userRepository.deleteById(id);
}
@GetMapping("/find")
public List<User> findByAgeGreaterThanEqual(Integer age) {
return userRepository.findByAgeGreaterThanEqual(age);
}
}
- application.properties代码如下:
# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/demo_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
# JPA相关配置
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
- schema.sql代码如下:
CREATE DATABASE IF NOT EXISTS demo_db;
USE demo_db;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '姓名',
`age` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '年龄',
PRIMARY KEY (`id`)
) COMMENT '用户表' ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
本示例中,我们使用了MySQL数据库,并在application.properties文件中配置了相应的数据库连接信息。同时,我们定义了一个用户实体类,一个JPA的接口,以及一个包含基本的增删改查操作的Controller。另外,我们还定义了schema.sql文件用于在项目启动时自动创建数据库表。
示例二:使用H2内存数据库实现学生管理系统
除了使用MySQL等关系型数据库以外,我们还可以使用类似H2这样的内存数据库,来方便地测试和演示数据持久化的效果。
以下代码可以快速地搭建一个基于H2内存数据库的学生管理系统,实现学生的查询、添加和删除等操作:
- 项目结构如下所示:
├── pom.xml
└── src
└── main
├── java
│ └── com.example.demo
│ ├── DemoApplication.java
│ ├── controller
│ │ └── StudentController.java
│ ├── entity
│ │ └── Student.java
│ └── repository
│ └── StudentRepository.java
└── resources
└── application.properties
- 实体类Student.java代码如下:
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
// 省略getter和setter方法
}
- JPA接口StudentRepository.java代码如下:
public interface StudentRepository extends JpaRepository<Student, Integer> {
List<Student> findByName(String name);
}
- StudentController.java代码如下:
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentRepository studentRepository;
@GetMapping("/list")
public List<Student> studentList() {
return studentRepository.findAll();
}
@PostMapping("/add")
public Student addStudent(@RequestBody Student student) {
return studentRepository.save(student);
}
@DeleteMapping("/delete/{id}")
public void deleteStudent(@PathVariable("id") Integer id) {
studentRepository.deleteById(id);
}
@GetMapping("/find")
public List<Student> findByName(String name) {
return studentRepository.findByName(name);
}
}
- application.properties代码如下:
# H2内存数据库配置
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
# 启动时自动创建表
spring.jpa.hibernate.ddl-auto=create
# 控制台SQL日志输出
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
本示例中,我们使用了H2内存数据库,并在application.properties文件中配置了相应的数据库连接信息。通过此方式,我们可以方便地进行数据持久化效果的测试和演示。其中,和第一个示例相比,我们做了一些修改,如删除了更新学生信息的接口,并新增了一个根据学生姓名查询的接口。
希望以上示例中的讲解能够对使用Springboot和Spring Data JPA实现数据库操作有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot使用Spring Data JPA实现数据库操作 - Python技术站