SpringBoot新手快速入门系列教程五:基于JPA的一个Mysql简单读写例子

现在我们来做一个简单的读写Mysql的项目

1,先新建一个项目,我们叫它"HelloJPA"并且添加依赖

2,引入以下依赖:

  1. Spring Boot DevTools (可选,但推荐,用于开发时热部署)
  2. Lombok(可选,但推荐,用于减少样板代码)
  3. Spring Web(如果你需要创建一个Web应用)
  4. Spring Data JPA(这是核心依赖,用于JPA功能)
  5. 数据库驱动程序(例如MySQL Driver,如果你使用MySQL数据库)

在你的项目创建界面中,选择以下依赖:

  • Developer Tools:

    • Spring Boot DevTools
    • Lombok
  • Web:

    • Spring Web
  • SQL:

    • Spring Data JPA
    • MySQL Driver(或你使用的其他数据库驱动)

这样,你的项目将配置好进行Spring Data JPA操作,并连接到你的数据库。

3,我们现在右键点击hellojpa文件夹下创建四个package:entity、repository、service、controller然后分别建一下4个类User、UserRepository、UserService、UserController

项目结构如下

src/main/java
├── com
│   └── yuye
│       └── www
│           └── hellojpa
│               ├── controller
│               │   └── UserController.java
│               ├── entity
│               │   └── User.java
│               ├── repository
│               │   └── UserRepository.java
│               └── service
│                   └── UserService.java
└── resources
    └── application.properties

1. entity

用途:用于定义应用程序的核心业务对象,这些对象通常映射到数据库表。

职责

  • 定义Java对象,这些对象与数据库中的表行相对应。
  • 使用JPA注解(例如@Entity, @Id, @GeneratedValue)来标记这些类和它们的字段,从而指定它们如何与数据库交互。

2. repository

用途:用于定义数据访问层,处理数据的CRUD(创建、读取、更新、删除)操作。

职责

  • 继承Spring Data JPA的JpaRepository接口,从而获得基本的CRUD操作方法。
  • 可以定义自定义查询方法。

3. service

用途:用于定义业务逻辑层,封装应用程序的业务规则和操作。

职责

  • 调用repository层的方法来处理数据。
  • 执行具体的业务逻辑,例如验证、数据转换、复杂操作等。

4. controller

用途:用于定义表示层,处理来自客户端的HTTP请求,并返回响应。

职责

  • 处理HTTP请求(例如GET, POST, PUT, DELETE)。
  • 调用service层的方法来执行业务逻辑。
  • 返回处理结果给客户端,通常以JSON格式。

总结

  • entity:定义数据模型,映射数据库表。
  • repository:数据访问层,提供CRUD操作。
  • service:业务逻辑层,封装业务规则和操作。
  • controller:表示层,处理HTTP请求和响应。

3,实现代码

  1. User 实体类

    package com.yuye.www.hellojpa.entity;

    import jakarta.persistence.Entity;
    import jakarta.persistence.GeneratedValue;
    import jakarta.persistence.GenerationType;
    import jakarta.persistence.Id;
    import jakarta.persistence.Table;
    import jakarta.persistence.UniqueConstraint;

    /**

    • The User entity class represents a user in the system.

    • It is mapped to a table in the database using JPA annotations.
      */
      @Entity
      @Table(name = "user", uniqueConstraints = {@UniqueConstraint(columnNames = "name")})//保证user所有数据唯一
      public class User {

      // The unique identifier for each user, generated automatically.
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;

      // The name of the user.
      private String name;

      // Getters and setters for the fields.
      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;
      }
      }

  2. UserRepository 接口

    package com.yuye.www.hellojpa.repository;

    import com.yuye.www.hellojpa.entity.User;
    import org.springframework.data.jpa.repository.JpaRepository;

    /**

    • The UserRepository interface provides CRUD operations for User entities.

    • It extends JpaRepository to leverage Spring Data JPA functionalities.
      */
      public interface UserRepository extends JpaRepository<User, Long> {

      /**

      • Finds a user by their name.
      • @param name the name of the user to find
      • @return the User entity if found, otherwise null
        */
        User findByName(String name);
        }
  3. UserService

    package com.yuye.www.hellojpa.service;

    import com.yuye.www.hellojpa.entity.User;
    import com.yuye.www.hellojpa.repository.UserRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;

    /**

    • The UserService class provides business logic for user registration and login.
      */
      @Service
      public class UserService {

      @Autowired
      private UserRepository userRepository;

      /**

      • Registers a new user with the given name.
      • @param name the name of the user to register
        */
        public void register(String name) {
        User user = new User();
        user.setName(name);
        userRepository.save(user);
        }

      /**

      • Checks if a user with the given name exists.
      • @param name the name of the user to check
      • @return true if the user exists, otherwise false
        */
        public boolean login(String name) {
        User user = userRepository.findByName(name);
        return user != null;
        }
        }
  4. UserController

    package com.yuye.www.hellojpa.controller;

    import com.yuye.www.hellojpa.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;

    /**

    • The UserController class handles HTTP requests for user registration and login.
      */
      @RestController
      @RequestMapping("/user")
      public class UserController {

      @Autowired
      private UserService userService;

      /**

      • Registers a new user.
      • @param name the name of the user to register
      • @return a JSON string indicating the result of the operation
        */
        @PostMapping("/register")
        public String register(@RequestParam String name) {
        userService.register(name);
        return "{"status":"success"}";
        }

      /**

      • Checks if a user with the given name exists.
      • @param name the name of the user to check
      • @return a JSON string indicating the result of the operation
        */
        @GetMapping("/login")
        public String login(@RequestParam String name) {
        boolean exists = userService.login(name);
        if (exists) {
        return "{"status":"exists"}";
        } else {
        return "{"status":"no exists"}";
        }
        }
        }

4,application.properties 配置

application.properties 可以配置很多东西,本次的配置主要是数据库的连接

spring.application.name=HelloJPA

# 连接到数据库的URL
spring.datasource.url=jdbc:mysql://localhost:3306/userdata?useSSL=false&serverTimezone=UTC
# 连接数据库的用户名
spring.datasource.username=root
# 连接数据库的密码
spring.datasource.password=Qwerty123
# Hibernate 设置自动更新数据库模式
spring.jpa.hibernate.ddl-auto=update
# 在控制台显示SQL语句以便调试
spring.jpa.show-sql=true
# 指定Hibernate使用的SQL方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

server.port=8081

5,启动Mysql,创建数据库和表格

我们要预先在数据库里面创建一个数据库、表格以及需要存储的字段,然后启动数据库后再去编译项目,否则直接编译项目会报错

如果你对数据库的配置以及命令不熟悉,可以移步到我的前两篇教程参考一下:

SpringBoot新手快速入门系列教程二:MySql5.7.44的免安装版本下载和配置,以及简单的Mysql生存指令指南。-CSDN博客

SpringBoot新手快速入门系列教程三:Mysql基础生存命令指南-CSDN博客

1,首先我们先启动mysql

mysqld --console

2,然后另外开启一个命令行窗口,输入密码

mysql -u root -p

3,连接成功后,创建一个名为 UserData 的新数据库:

CREATE DATABASE UserData;
  1. 使用新创建的数据库

    USE UserData;

5. 创建 User

创建 User 表,并包含 idname 字段:

CREATE TABLE User (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);
  1. 验证表是否创建成功

    SHOW TABLES;

7, IDEA连接数据库

点击创建一个数据库连接

右侧展开后就是我们刚才创建的表格,右键点击user

选择editdata就可以看到我们刚才创建的name字段

另外一个实用的工具就是用在表格上方点击右键、新建一个console就可以输入sql命令了,输入sql语句后用ctrl+enter组合按钮,就可以执行语句,下方result可以看执行结果

7,运行到这里我们先通过gradle的几个脚本先编译一下clean然后build

没有报错,就可以运行一下项目看看

8,测试代码

(1)打开命令行工具依次测试下面读写数据库接口

curl -X POST http://localhost:8081/user/register -d "name=testuser"

(2)通过浏览器获得刚才存入的name

curl http://localhost:8081/user/login?name=testuser
相关推荐
ygl61503731 小时前
Vue3+SpringBoot3+Sa-Token+Redis+mysql8通用权限系统
java·spring boot·vue
尘浮生2 小时前
Java项目实战II基于微信小程序的南宁周边乡村游平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·maven
程序员阿龙3 小时前
基于微信小程序的校园二手交易平台设计与实现,微信小程序(定制+讲解+咨询)校园二手商品在线交易系统、校园二手市场管理与推荐工具、智能化商品交易与推荐平台
spring boot·微信小程序·毕业设计·在线商品交易与搜索优化平台·在线二手商品交易与支付平台·商品管理与交易评价平台·二手商品分类与交易管理系统
东阳马生架构6 小时前
MySQL底层概述—1.InnoDB内存结构
java·数据库·mysql
standxy7 小时前
通过轻易云平台实现聚水潭数据高效集成到MySQL的技术方案
android·数据库·mysql
苹果酱05678 小时前
windows安装redis, 修改自启动的redis服务的密码
java·开发语言·spring boot·mysql·中间件
feilieren8 小时前
信创改造 - TongRDS 替换 Redis
java·spring boot·后端
hani19908 小时前
beikeshop 与swoole结合,让网站打开飞起
后端·swoole
knoci9 小时前
【Go】-go中的锁机制
后端·学习·golang
Mike_188702783519 小时前
深入探索Golang的GMP调度机制:源码解析与实现原理
开发语言·后端·golang