Spring boot HibernateJPA CRUD

news/2024/11/13 17:07:42/文章来源:https://www.cnblogs.com/hechunfeng/p/18544263

连接数据库和创建表

1.

pom安装

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>

2. application.properties连接 (你的电脑本地要有mysql并且打开)

spring.datasource.url=jdbc:mysql://localhost:3306/test1
spring.datasource.username=test1
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

3. 建立新的文件夹和类名

 

package com.example18.example_18.entity;import jakarta.persistence.*;@Entity
@Table(name="students")
public class Student {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private  Long id;private String name;private int age;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;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

 

增删改查

1.定义DOA接口

2.定义DOA实现

3.更新到主程序,注入DAO

这里我是实现一个最简单的查询功能,这一步的时候应该代表你一件完成上面的连接了

我的数据库内容

 先说说目录结构

1. 

model 或 enrity是生成数据表的

比如我的students表

package com.example18.example_18.entity;import jakarta.persistence.*;@Entity
@Table(name="students")
public class Student {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private  Long id;private String name;private int age;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;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

2.  repository目录,有些人写dao目录,其实一样用来数据访问的

package com.example18.example_18.dao;import com.example18.example_18.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
 
@Repository
public interface StudentDAO extends JpaRepository<Student,Long> { // 这里可以添加自定义的查询方法,例如根据姓名查找学生 // Student findByName(String name); }

3. service目录,就是用来实现repository目录的内容的

package com.example18.example_18.service;import com.example18.example_18.dao.StudentDAO;
import com.example18.example_18.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;import java.util.List;@Service
public class StudentService {@Autowiredprivate StudentDAO studentDAO;@GetMappingpublic List<Student> getAllStudents(){return studentDAO.findAll();}
}

4.controller控制器层,有些人写rest目录,就是http入口的地方

 

package com.example18.example_18.rest;import com.example18.example_18.common.Coach;
import com.example18.example_18.dao.StudentDAO;
import com.example18.example_18.entity.Student;
import com.example18.example_18.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class DemoController {@Autowiredprivate StudentService studentService;public DemoController(StudentService studentService) {this.studentService = studentService;}@GetMapping("/students")public List<Student> getAllSyidents(){return  studentService.getAllStudents();}
}

 

最后,我运行跑起来

 

 

 

 

完成

下面是GPT的例子:仅仅参考作用

1.创建实体类

使用 @Entity 注解定义数据库表的实体类,例如 Student

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name = "students")
public class Student {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private int age;// Getters and Setterspublic 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; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }
}

2.创建 Repository 接口

Spring Data JPA 提供了 JpaRepository 接口,继承它可以快速实现基本的 CRUD 操作:

import org.springframework.data.jpa.repository.JpaRepository;public interface StudentRepository extends JpaRepository<Student, Long> {// 这里可以添加自定义的查询方法,例如根据姓名查找学生
    Student findByName(String name);
}

3.创建 Service 类

在 Service 类中使用 StudentRepository 来管理 Student 数据:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;@Service
public class StudentService {@Autowiredprivate StudentRepository studentRepository;public List<Student> getAllStudents() {return studentRepository.findAll();}public Student getStudentById(Long id) {return studentRepository.findById(id).orElse(null);}@Transactionalpublic Student createStudent(Student student) {return studentRepository.save(student);}@Transactionalpublic Student updateStudent(Long id, Student studentDetails) {Student student = getStudentById(id);if (student != null) {student.setName(studentDetails.getName());student.setAge(studentDetails.getAge());return studentRepository.save(student);}return null;}@Transactionalpublic void deleteStudent(Long id) {studentRepository.deleteById(id);}
}

4.创建 Controller 类

通过 REST API 暴露 CRUD 操作,以便外部调用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/students")
public class StudentController {@Autowiredprivate StudentService studentService;@GetMappingpublic List<Student> getAllStudents() {return studentService.getAllStudents();}@GetMapping("/{id}")public Student getStudentById(@PathVariable Long id) {return studentService.getStudentById(id);}@PostMappingpublic Student createStudent(@RequestBody Student student) {return studentService.createStudent(student);}@PutMapping("/{id}")public Student updateStudent(@PathVariable Long id, @RequestBody Student studentDetails) {return studentService.updateStudent(id, studentDetails);}@DeleteMapping("/{id}")public void deleteStudent(@PathVariable Long id) {studentService.deleteStudent(id);}
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitLab 中文版如何禁止从 UI 上下载代码?

本文分享如何通过配置来禁止用户从 GitLab 中文版 UI 界面上下载源代码。 GitLab 中文版也就是极狐GitLab,使用界面和 GitLab 一样。常规下载代码的方式也一样,要么使用 SSH 或者 HTTP 克隆,要么直接从 UI 上下载源代码:但是有些企业不想让员工从这个界面上通过下载源代码的…

交换机

$Never\ Give\ Up$

在webstorm里面使用prettier

1. 安装 Prettier bash复制代码 npm install --save-dev prettier2. 创建 Prettier 配置文件 在项目根目录下创建一个 .prettierrc 文件来定义 Prettier 的代码风格规则。以下是一个简单的 Prettier 配置文件示例: json复制代码{"semi": false, // 不…

Delphi通过ODBC连接到GBase 8s数据库

Delphi通过ODBC连接到GBase 8s数据库作者: liaosnet时间: 2021-12-27分类: 默认分类,运维管理阅读:2615 次测试使用Delphi连接到GBase 8s数据库,使用的是ODBC连接方式。 1)、安装ODBC驱动(CSDK) 通过地址https://gbasedbt.com/dl/odbc/GBase8s_3.0.0_1-Win32-ODBC-Driver.z…

数据库查询第5到8行的数据

limit 4 表示要返回的行数为4 offset 4表示从结果集的第5行开始

CW 11.13 模拟赛 T3 大方和小方

算法 可以看出来是组合数学, 但是考场上时间不够 + 本身也没做过组合数学, 放弃了经过人类智慧的推导 由 \(\rm{Subtask} 1\) 可得基础柿子 令 $ a = b_2 - d_1 , b = a_2 - c_1 $ 插空法可知答案为 \(a + b \choose a\)代码 略 总结 注意组合数学的 \(\sum\) 有些时候可以化成…

NOIP 模拟赛:2024-11-11

T1:法一:\(O(n^2)\) 的 DP。\(dp[i][j][0/1]\) 表示在 \(i\) 的子树内染色,\(i\) 是红/黑,使得每个要求的结点的黑点个数都等于 \(j\)。 法二:\(O(n)\) 的神秘做法。取出最浅的被要求结点,把深度 \(\le\) 它的都染成黑色,其余点都染成红色。 T2: 对于一个元素属于 \([0…

[自用]ubuntu下kafka环境的搭建

首先安装了OpenJDK https://segmentfault.com/a/1190000044953489 没有配置默认的Jave版本 没有设置JAVA_HOME环境变量 补充:设置JAVE_HOME环境变量在图形界面中打开etc\environment文件,在其中追加JAVA_HOME变量(注意java版本和路径等的名称)保存后关闭,在终端里使用sour…

Java学习之定时任务框架Quartz

Quartz 的核心类有以下三部分:Job : 需要实现的任务类,实现 execute() 方法,执行后完成任务。Trigger : 包括 SimpleTrigger 和 CronTrigger。Scheduler : 任务调度器,负责基于 Trigger触发器,来执行 Job任务。 简单示例 1.pom配置 2.创建Jobpublic class EplJob imple…

比 Copilot 快两倍以上!在我的开源项目 AI Godot 桌宠中用通义灵码解决问题

Qwen 开源模型在开源榜单上大杀四方,所以不得心生几分好感,通义灵码底层基于 Qwen2.5 最新模型,代码补全和问答能力全面升级。本文作者:plzpj6bp7mjr4,内容选自通义灵码超级个体创新实践大赛,并对部分内容做了微调,感谢作者分享的最佳实践! 最近,阿里的开源大模型刷屏…

vue3开发扫雷游戏,支持调整难度,支持计时

闲来练习练习js,写了个扫雷游戏,直接拿去复制粘到自己本地某个html文件里就能运行,记得把vue加载地址改成线上的~~ 有空了可以再加上计分板 运行起来长下面这样 直接上代码1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset=…