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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

好消息!Stable Diffusion 3 允许商业化,很快开源更大版本模型

7月6日凌晨&#xff0c;著名开源大模型平台Stability AI修改了社区许可协议&#xff0c;最新发布的文生图模型Stable Diffusion 3 Medium允许商业化&#xff08;以下简称“SD3-M”&#xff09;。 如果企业、个人开发者每年收入低于100万美元&#xff08;大约726万元人民币&…

数字信号处理及MATLAB仿真(3)——采样与量化

今天写主要来编的程序就是咱们AD变换的两个步骤。一个是采样&#xff0c;还有一个是量化。大家可以先看看&#xff0c;这一过程当中的信号是如何变化的。信号的变换图如下。 先说说采样&#xff0c;采样是将连续时间信号转换为离散时间信号的过程。在采样过程中&#xff0c;连续…

关于HTTP的攻击实验

实验原理&#xff1a;1. 根据ARP中间人攻击&#xff0c;获取 用户和服务器之间的数据2. 将获取到的数据 通过一定的技术来复原&#xff0c;进而获取用户的信息或者 相关权限实验拓扑图 将 kali 的网卡改为桥接模式&#xff0c;查看Kali和本机的ip 启动ettercap&#xff0c;…

android手机电视相框项目-学员做出个bug版本邀请大家review提意见

背景 前几天给我的vip学员布置了一个android手机/电视相框的项目&#xff0c;具体详情看如下链接&#xff1a; https://mp.weixin.qq.com/s/l2roDoco-o59SLlORENZlA 这个项目我说过不给提供答案哈&#xff0c;让各位学员朋友自己独立思考完成哈&#xff0c;因为尽量想让大家慢…

ABAP 一篇作业分享

目录 一&#xff1a;要件定义&#xff1a; 二&#xff0c;具体代码&#xff1a; 三&#xff0c;测试结果&#xff1a; 一&#xff1a;要件定义&#xff1a; 二&#xff0c;具体代码&#xff1a; *&-------------------------------------------------------------------…

强化学习编程实战-1-一个及其简单的强化学习实例(多臂赌博机)

1.1 多臂赌博机 一台拥有K个臂的机器&#xff0c;玩家每次可以摇动K个臂中的一个&#xff0c;摇动后&#xff0c;会吐出数量不等的金币&#xff0c;吐出金币的数量服从一定的概率分布&#xff0c;而且不同臂的概率分布不同。 多臂赌博机的问题是&#xff1a;假设玩家共有N次摇地…

CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)

CSS 样式选择器&#xff0c;用于选中页面中的 html 元素&#xff0c;以便添加 CSS 样式。 按渲染性能由高到低 依次是&#xff1a; ID 选择器 #id 通过元素的 id 属性选中元素&#xff0c;区分大小写 <p id"p1" >第一段</p>#p1{color: red; }但不推荐使…

eclipse ide中文件编码的修改,解决中文乱码的问题。

1、先上一张图&#xff1a; 记得之前设置过&#xff0c;但是稍微一变&#xff0c;环境编码又到了ISO-8859-1了&#xff0c;然后就出现了乱码。 2、设置eclipse的编码&#xff1a; Preferences--General -- Content Types -- Text -- Java Properties File -- Default encoding…

要想贵人相助,首先自己得先成为贵人!

点击上方△腾阳 关注 转载请联系授权 在金庸江湖里&#xff0c;有两位大侠&#xff0c;一个是萧峰&#xff0c;一个是郭靖。 郭靖在《射雕英雄传》里是绝对的主角&#xff0c;在《神雕侠侣》当中也是重要的配角&#xff0c;甚至可以说是第二主角。 谈起郭靖&#xff0c;很多…

策略为王股票软件源代码-----如何修改为自己软件61----资讯菜单修改-----举例---------调用同花顺网页------

http://stock.sina.com.cn 将原来的新浪行情,修改为同花顺, 搜索 stock.sina.com.cn... StkUI\View\InfoView.cpp(58):char

20K Stars!一个轻量级的 JS 库

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 Driver.js 是一个轻量级的 JavaScript 库,旨在帮助开发人员创建网站或应用程序的引导和教程。通过 Driver.js,您可以引导用户了解网站的各个功能和使用方式。 Driver.js 提供了高度可定制的功能,使其能够适应各种需求和…

【Python学习笔记】菜鸟教程Scrapy案例 + B站amazon案例视频

背景前摇&#xff08;省流可以跳过这部分&#xff09; 实习的时候厚脸皮请教了一位办公室负责做爬虫这块的老师&#xff0c;给我推荐了Scrapy框架。 我之前学过一些爬虫基础&#xff0c;但是用的是比较常见的BeautifulSoup和Request&#xff0c;于是得到Scrapy这个关键词后&am…

在AvaotaA1全志T527开发板上使用AvaotaOS 部署 LNMP 服务

准备工作 在这之前&#xff0c;确保设备已经联网&#xff0c;可以用 ifconfig 命令查看联网状态。这里使用的是 WIFI 联网&#xff0c;可以看到已经获取了IP地址。 由于安装需要较长时间&#xff0c;建议使用 screen 后台登录&#xff0c;这里看到系统默认已经安装了 screen …

6800和8080单片机读写时序和液晶屏接口

前言&#xff1a; 随着单片机发展&#xff0c;集成度越来越高&#xff0c;因此目前单片机较少使用RD和WR信号操作外设&#xff0c;因此很多时候&#xff0c;变成了6800和8080单片机读写液晶屏了。早期的读写本质上是对一个地址进行即时的操作&#xff0c;现在可能是等数据送到…

vue中自定义设置多语言(包括使用vue-i18n),并且运行js脚本自动生成多语言文件

在项目中需要进行多个国家语言的切换时&#xff0c;可以用到下面方法其中一个 一、自定义设置多语言 方法一: 可以自己编写一个设置多语言文件 在项目新建js文件&#xff0c;命名为&#xff1a;language.js&#xff0c;代码如下 // language.js 文档 let languagePage {CN…

baomidou多数据源切换注解@DS没有效果

baomidou多数据源切换注解DS没有效果 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.1.1</version> </dependency> ##原因 方法上有Transaction…

2024年AI技术深入研究

2024年AI技术持续快速发展,应用领域广泛,产业发展迅速,市场趋势积极,学术研究深入。 AI技术进展大模型发展 2024年,智谱AI正在研发对标OpenAI Sora的高质量文生视频模型,预计最快年内发布。智谱AI的进展显示了国内AI大模型领域的快速发展,以及与国际领先技术的竞争态势…

全网最详细的Appium自动化测试框架(一)环境搭建

一、环境搭建 1、安装python3 2、安装appium-destop 3 、安装python虚拟环境 ,安装依赖库 : pip install Appium-Python-Client pip install pytest 4、安装java brew install java 配置好环境变量 5、安装 android-platform-tools &#xff08;也可以用android sdk 工…

关于多人开发下git pull报错代码冲突问题的解决方案

关于多人开发下git pull报错代码冲突问题的解决方案 问题描述 最近多人开发项目习惯性先 git pull 来更新代码的时候&#xff0c;遇到了下面的问题&#xff1a;error: Your local changes to the following files would be overwritten by merge: Please, commit your change…

Zabbix触发器

目录 触发器基础概念 创建和管理触发器 示例 定义一个触发器 在 Zabbix 中&#xff0c;触发器&#xff08;Trigger&#xff09;用于定义在监控数据满足特定条件时触发警报或动作。触发器是实现监控告警和自动响应的核心组件之一。以下是关于 Zabbix 触发器的详细解释和用法…