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

news2025/2/26 5:07:13

现在我们来做一个简单的读写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 javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 * The User entity class represents a user in the system.
 * It is mapped to a table in the database using JPA annotations.
 */
@Entity
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\":\"success\"}";
        } else {
            return "{\"status\":\"failure\"}";
        }
    }
}

  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.MySQL5Dialect

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;

        4. 使用新创建的数据库

USE UserData;
        5. 创建 User

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

CREATE TABLE User (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);

        6. 验证表是否创建成功

SHOW TABLES;

7, IDEA连接数据库

点击创建一个数据库连接

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1901814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cs224n作业4

NMT结构图&#xff1a;&#xff08;具体结构图&#xff09; LSTM基础知识 nmt_model.py&#xff1a; 参考文章&#xff1a;LSTM输出结构描述 #!/usr/bin/env python3 # -*- coding: utf-8 -*-""" CS224N 2020-21: Homework 4 nmt_model.py: NMT Model Penchen…

ElasticSearch 如何计算得分及一个不太成熟的使用

1.背景 最近在做 ES 相关东西&#xff0c;只最会在查询的时候给不同的字段设置不同的权重&#xff0c;但是得分具体怎么算的不太明白&#xff0c;花了4-5 天研究和总结了一下。这样不至于被别人问到“这个分数怎么算出来的&#xff1f;”&#xff0c;两眼一抹黑&#xff0c;不…

【C++】模板进阶--保姆级解析(什么是非类型模板参数?什么是模板的特化?模板的特化如何应用?)

目录 一、前言 二、什么是C模板&#xff1f; &#x1f4a6;泛型编程的思想 &#x1f4a6;C模板的分类 三、非类型模板参数 ⚡问题引入⚡ ⚡非类型模板参数的使用⚡ &#x1f525;非类型模板参数的定义 &#x1f525;非类型模板参数的两种类型 &#x1f52…

【Unity2D 2022:Particle System】添加命中粒子特效

一、创建粒子特效游戏物体 二、修改粒子系统属性 1. 基础属性 &#xff08;1&#xff09;修改发射粒子持续时间&#xff08;Duration&#xff09;为1s &#xff08;2&#xff09;取消勾选循环&#xff08;Looping&#xff09; &#xff08;2&#xff09;修改粒子存在时间&…

Vue表单输入绑定v-model

表单输入绑定 在前端处理表单时&#xff0c;我们常常需要将表单输入框的内容同步给Javascript中相应的变量。手动连接绑定和更改事件监听器可能会很麻&#xff0c;v-model 指令帮我们简化了这一步骤。 <template><h3>表单输入绑定</h3><hr> <inpu…

推荐Bulk Image Downloader插件下载网页中图片链接很好用

推荐&#xff1a;Bulk Image Downloader chome浏览器插件下载图片链接&#xff0c;很好用。 有个网页&#xff0c;上面放了数千的gif的电路图&#xff0c;手工下载会累瘫了不可。想找一个工具分析它的静态链接并下载&#xff0c;找了很多推荐的下载工具&#xff0c;都是不能分…

docker部署mycat,连接上面一篇的一主二从mysql

一、docker下载mycat镜像 查看安装结果 这个名称太长&#xff0c;在安装容器时不方便操作&#xff0c;设置标签为mycat docker tag longhronshens/mycat-docker mycat 二、安装容器 先安装一个&#xff0c;主要目的是获得配置文件 docker run -it -d --name mycat -p 8066:…

算法系列--分治排序|再谈快速排序|快速排序的优化|快速选择算法

前言:本文就前期学习快速排序算法的一些疑惑点进行详细解答,并且给出基础快速排序算法的优化版本 一.再谈快速排序 快速排序算法的核心是分治思想,分治策略分为以下三步: 分解:将原问题分解为若干相似,规模较小的子问题解决:如果子问题规模较小,直接解决;否则递归解决子问题合…

【JVM 的内存模型】

1. JVM内存模型 下图为JVM内存结构模型&#xff1a; 两种执行方式&#xff1a; 解释执行&#xff1a;JVM是由C语言编写的&#xff0c;其中有C解释器&#xff0c;负责先将Java语言解释翻译为C语言。缺点是经过一次JVM翻译&#xff0c;速度慢一点。JIT执行&#xff1a;JIT编译器…

java自旋锁

Java自旋锁&#xff08;Spin Lock&#xff09;是一种用于多线程同步的锁机制&#xff0c;通过反复检查某个条件&#xff08;通常是一个共享变量的状态&#xff09;而不是挂起线程来实现锁的获取。自旋锁的核心思想是让线程在尝试获取锁时保持活动状态&#xff0c;即进行“自旋”…

KBPC3506-ASEMI储能专用整流桥KBPC3506

编辑&#xff1a;ll KBPC3506-ASEMI储能专用整流桥KBPC3506 型号&#xff1a;KBPC3506 品牌&#xff1a;ASEMI 封装&#xff1a;KBPC-4 正向电流&#xff08;Id&#xff09;&#xff1a;35A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;600V 正向浪涌电流&#xf…

进程控制-exec函数

让父子进程来执行不相干的操作 能够替换进程地址空间的代码.text段 执行另外的程序&#xff0c;不需要创建额外的的地址空间 当前程序中调用另外一个应用程序 指定执行目录下的程序 int execl(const char *path, const char *arg&#xff0c;/* (char *) NULL */); /* pat…

【MindSpore学习打卡】应用实践-自然语言处理-基于RNN的情感分类:使用MindSpore实现IMDB影评分类

情感分类是自然语言处理&#xff08;NLP&#xff09;中的一个经典任务&#xff0c;广泛应用于社交媒体分析、市场调研和客户反馈等领域。本篇博客将带领大家使用MindSpore框架&#xff0c;基于RNN&#xff08;循环神经网络&#xff09;实现一个情感分类模型。我们将详细介绍数据…

数据结构之“栈”(全方位认识)

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;数据结构 前言 栈是一种数据结构&#xff0c;具有" 后进先出 "的特点 或者也可见说是 ” 先进后出 “。大家一起加油吧冲冲冲&#xff01;&#xff01; …

SpringBoot | 大新闻项目后端(redis优化登录)

该项目的前篇内容的使用jwt令牌实现登录认证&#xff0c;使用Md5加密实现注册&#xff0c;在上一篇&#xff1a;http://t.csdnimg.cn/vn3rB 该篇主要内容&#xff1a;redis优化登录和ThreadLocal提供线程局部变量&#xff0c;以及该大新闻项目的主要代码。 redis优化登录 其实…

基于深度学习LightWeight的人体姿态检测跌倒系统源码

一. LightWeight概述 light weight openpose是openpose的简化版本&#xff0c;使用了openpose的大体流程。 Light weight openpose和openpose的区别是&#xff1a; a 前者使用的是Mobilenet V1&#xff08;到conv5_5&#xff09;&#xff0c;后者使用的是Vgg19&#xff08;前10…

Charles拦截发送数据包-cnblog

Charles拦截发送数据包 打开允许断点 右键要打断点的数据包&#xff0c;打断点 重新发请求进入断点模式 修改完毕后发送

uniapp实现一个键盘功能

前言 因为公司需要&#xff0c;所以我.... 演示 代码 键盘组件代码 <template><view class"keyboard_container"><view class"li" v-for"(item, index) in arr" :key"index" click"changArr(item)" :sty…

数据库管理-第216期 Oracle的高可用-01(20240703)

数据库管理216期 2024-07-03 数据库管理-第216期 Oracle的高可用-01&#xff08;20240703&#xff09;1 MAA简介2 MAA等级2.1 BRONZE2.2 SILVER2.3 GOLD2.4 PLATINUM 3 业务延续性总结 数据库管理-第216期 Oracle的高可用-01&#xff08;20240703&#xff09; 作者&#xff1a;…

Google Play上架:恶意软件、移动垃圾软件和行为透明度详细解析和解决办法 (一)

近期整理了许多开发者的拒审邮件和内容,也发现了许多问题,今天来说一下关于恶意软件这类拒审的问题。 目标邮件如下: 首先说一下各位小伙伴留言私信的一个方法,提供你的拒审邮件和时间,尽可能的详细,这样会帮助我们的团队了解你们的问题,去帮助小伙伴么解决问题。由于前…