Spring Boot 与 Spring Data JPA 操作 MySQL 数据库(一)

使用 Spring Boot 与 Spring Data JPA 操作 MySQL 数据库

引言

Spring Boot 是一个快速创建 Spring 应用程序的框架,它提供了许多便捷的功能,如自动配置、嵌入式 Web 服务器等。Spring Data JPA 是 Spring 框架的一个模块,它提供了一种方便的方式来访问数据库,并且可以在使用 JPA 的同时充分利用 Spring 的优势。本文将介绍如何使用 Spring Boot 与 Spring Data JPA 融合来创建一个简单的 Web 应用程序,并展示如何进行一些常见的操作,例如增删改查和分页查询。
本文将介绍如何使用 Spring Boot 和 Spring Data JPA 集成 MySQL 数据库,通过使用 JPA 规范,简化 MySQL 数据库的操作,并使用 Spring Boot 的自动配置功能,进一步简化开发流程。

开发环境准备

在开始我们的开发之前,需要做一些准备工作:

  • JDK 1.8 或以上版本
  • IntelliJ IDEA 或其他 Java IDE
  • MySQL 数据库

创建项目

首先,我们需要使用 IntelliJ IDEA 创建一个 Spring Boot 项目。打开 IDEA,点击 “Create New Project”,选择 “Spring Initializr”,然后按照提示填写相关信息,如项目名称、描述、包名等。

选择需要添加的依赖,包括 Spring Web、Spring Data JPA、MySQL Connector 等。

点击 “Next”,选择项目路径和 JDK 版本,然后点击 “Finish” 完成项目创建。

配置数据源

打开 application.properties 文件,配置数据源信息:

spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8mb4
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create

这里我们使用了 MySQL 数据库,并将其配置为使用 localhost 的 3306 端口,同时配置了一些可选参数,如禁用 SSL 连接,允许获取公钥,使用 UTC 时区等。在这个配置中,我们还开启了 Hibernate 的 show-sql 功能,以便于调试,同时设置了 Hibernate 的 ddl-auto 为 create,以便于在应用程序启动时自动创建表。

创建实体类

创建 User 实体类:

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private Integer age;

    // getter 和 setter 省略
}

这里我们创建了一个名为 User 的实体类,其中包含 id、name 和 age 三个属性。

  • @Entity注解把类标记为实体类,将映射到数据表
  • @Table注解指定映射的表名
  • @Id注解指定id主键字段
  • @GeneratedValue指定id的生成策略,这里使用自动递增
  • @Column注解指定字段与列的映射关系

创建接口

创建 UserRepository 仓库接口:

Repository接口

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // 查询年龄大于等于 age 的用户列表
    List<User> findByAgeGreaterThanEqual(Integer age);

    // 根据名称模糊查询用户列表
    List<User> findByNameContaining(String name);
}
  • 继承JpaRepository来获得基本的CRUD功能
  • 泛型指定实体类和主键类型
    Spring data jpa会根据方法命名自动生成SQL,例如:
  • findAll() -> select * from user
  • findById(1L) -> select * from user where id = 1
  • save(user) -> 保存user,如果id为null会插入新数据,否则更新数据
  • deleteById(1L) -> delete from user where id = 1

这里我们使用 Spring Data JPA 提供的 JpaRepository 接口,通过继承 JpaRepository 接口,我们可以获得许多常见的数据库操作方法,如保存、查询、删除等。同时,我们也可以自定义一些方法,只需要按照 Spring Data JPA 的规范来定义方法名即可,如 findByAgeGreaterThanEqual 和 findByNameContaining。

创建Controller

创建 UserController 控制器类:

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserRepository userRepository;

	@GetMapping("/")
    public List<User> getUsers() {
        return userRepository.findAll();
    }
 
    // 新增用户
    @PostMapping
    public User create(@RequestBody User user) {
        return userRepository.save(user);
    }

    // 根据 ID 查询用户
    @GetMapping("/{id}")
    public User findById(@PathVariable("id") Long id) {
        return userRepository.findById(id)
                .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
    }

	@PostMapping("/")
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }
 
    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        User existingUser = userRepository.findById(id).orElse(null);
        if (existingUser != null) {
            existingUser.setName(user.getName());
            existingUser.setEmail(user.getEmail());
            return userRepository.save(existingUser);
        } else {
            return null;
        }
    }
 
    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userRepository.deleteById(id);
    }

    // 查询年龄大于等于 age 的用户列表
    @GetMapping(params = "age")
    public List<User> findByAgeGreaterThanEqual(@RequestParam("age") Integer age) {
        return userRepository.findByAgeGreaterThanEqual(age);
    }

    // 根据名称模糊查询用户列表
    @GetMapping(params = "name")
    public List<User> findByNameContaining(@RequestParam("name") String name) {
        return userRepository.findByNameContaining(name);
    }
}

在这个控制器类中,我们定义了一些简单的HTTP端点来执行CRUD操作。首先,我们使用@GetMapping注解定义了一个/user/端点来获取所有用户。在这个方法中,我们使用userRepository.findAll()方法来查询数据库中的所有用户。

接下来,我们定义了一个/users/{id}端点来获取指定ID的用户。在这个方法中,我们使用userRepository.findById(id)方法来查询具有给定ID的用户。如果找到了该用户,则返回该用户。否则,返回null。

然后,我们定义了一个/users端点来创建新用户。在这个方法中,我们使用@PostMapping注解来处理HTTP POST请求,并使用@RequestBody注解从请求体中提取JSON数据。然后,我们使用userRepository.save(user)方法将新用户保存到数据库中。

接下来,我们定义了一个/users/{id}端点来更新指定ID的用户。在这个方法中,我们使用@PutMapping注解来处理HTTP PUT请求,并使用@RequestBody注解从请求体中提取JSON数据。然后,我们使用userRepository.findById(id)方法来查询指定ID的用户,并将其与从请求体中提取的用户合并。最后,我们使用userRepository.save(existingUser)方法将更新后的用户保存到数据库中。

最后,我们定义了一个/users/{id}端点来删除指定ID的用户。在这个方法中,我们使用@DeleteMapping注解来处理HTTP DELETE请求,并使用userRepository.deleteById(id)方法从数据库中删除具有给定ID的用户。

测试应用程序

现在我们可以启动应用程序并测试它。在 IDEA 中点击 “Run Application” 启动应用程序,或者使用 Maven 命令 “mvn spring-boot:run” 启动应用程序。启动完成后,我们可以在浏览器中输入 “http://localhost:8080/users” 访问应用程序。

使用 POST 方法添加一个新用户:

POST /user HTTP/1.1
Host: localhost:8080
Content-Type: application/json

{
  "name": "Alice",
  "age": 22
}

使用 GET 方法查询刚刚添加的用户:

GET /user/1 HTTP/1.1
Host: localhost:8080

使用 GET 方法查询年龄大于等于 20 的用户列表:

GET /users?age=20 HTTP/1.1
Host: localhost:8080

使用 GET 方法查询名称包含 “li” 的用户列表:

GET /user?name=li HTTP/1.1
Host: localhost:8080
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值