Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[翻译]Spring Boot,MySQL,JPA,Hibernate Restful CRUD API 教程

[翻译]Spring Boot,MySQL,JPA,Hibernate Restful CRUD API 教程

作者头像
用户2353021
发布于 2020-05-11 09:45:56
发布于 2020-05-11 09:45:56
2K00
代码可运行
举报
文章被收录于专栏:RFFAN实验室RFFAN实验室
运行总次数:0
代码可运行

[写在翻译前]

这篇文章是我准备用Java写一个RestAPI的时候,学习Spring boot用的。在看这篇文章的时候,我具备了用Python的Flask 和Golang 的beego 写应用的基础,并对MVC模式有很大的了解,同时,我也具有了Java的基础知识(虽然,仅仅是看了Java的基础书籍。)。所以,如果你并不具备以上的条件,你可能会有些看不懂。不过,我会尽量在翻译的时候夹带一些私货,以便能够让大家尽量能看懂。当然由于水平有限,翻译有可能不准确,请小伙伴们见谅,也请小伙伴们不吝斧正。另外,对于Java的又臭又长深有体会(毕竟作为Pythoner,Goer和半个swifter 更喜欢那些简洁的表达。由于想写Android应用,以及用Java编写后台应用的一条龙服务。当年还想用swift写后台应用,太天真了!Swift到现在写的还不如OC的性能,而且还大很多。)

[传送门]

同时,国内已经有一篇很好的Spring Boot教程了,有兴趣的小伙伴可以去看看

[传送门]

[翻译正文]

Spring Boot 已经让Spring框架进入到了另一个层次。它彻底的减少了Spring项目所需要的配置时间。

如果你以前并没有用过Spring Boot,而且想快速的开始Spring Boot开发,那么这篇博文将会是非常不错的选择。

这篇博文中,我们会创建一个简单的Restfull 风格的笔记应用的CRUD API。一篇笔记可以有一个标题和一些内容。我们将会首先建立api 用来创建,检索,更新和删除一篇笔记,然后用postman来测试这些api。

那么,我们开始吧!

新建项目

Spring Boot 给我们提供了一个网页工具 Spring Initializer 来快速创建一个应用。你只需要访问https://start.spring.io然后按照下面的步骤来生成一个新的项目就OK了。

步骤一:点击 http://start.spring.io 页面上的 Switch to full version 

步骤二:输入输入下面的详细信息

  • Group:com.example(例如我的网站应用我就会输入:com.rffanlab)
  • Artifact:easy-notes(这里是英文原文的内容,我这里就不更改了)
  • Description:Rest API for a Simple Note Taking Application (这里只是描述,可以随你写,英文原文我也不更改了)
  • Package Name:com.rffanlab.easy-notes
  • Packaging:jar (这是默认值,表示打包成jar包,还有打包成war包可选。如果打包成jar包,不需要tomcat之流就可以直接运行,比打包成war要好的多,建议直接用默认值。)
  • Java Version :1.8(这是默认值,目前截止翻译前,java版本是1.8,不过我风闻,java 1.9要出了?)

[译者:]你们可以看到,新版的start.spring.io 的full version 这里并不仅仅只有这么点东西,他下面还有很多需要你打勾的东西。但是这篇教程中不需要你全部打勾。看到上图上面绿色的选项了么?在这个教程中只需要打勾Web、JPA、MySQL、DevTools就OK了

[继续正文]

一旦所有的信息都已经填写完毕,那么点击 绿色的那个Generate Project  这个按钮就可以生成和下载你的项目了。Spring Initializer会自动生成具有你刚刚填写的详细信息的项目,并且打包成zip,然后给下载。

下一步,解压下载的zip文档,然后倒入到你喜欢的IDE中(文中的教程是用的Idea,建议新手小伙伴就直接用idea吧,不要用eclipse了。)

查看目录结构

下面就是Note taking 应用的目录结构(不要问我怎么不翻译项目名字了)

让我们来详细了解一下某些重要的文件和目录吧。

1、EasyNotesApplication

这个文档是整个Spring Boot 应用的入口点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.easynotes;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class EasyNotesApplication {

	public static void main(String[] args) {
		SpringApplication.run(EasyNotesApplication.class, args);
	}
}

它包含了一个简单的注解(可能翻译不准确,毕竟不是科班java出身)叫做

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication

,这个注释是下面的几个特定的spring注解的集合。

  • @Configuration 任何拥有@Configuration注解的类将会随着Spring的启动而启动并且将会被识别为其他bean的资源
  • @EnableAutonConfiguration:这个注解告诉Spring当你在你的pom.xml中添加了依赖的时候自动配置应用。例如:如果spring-data-jpa这个包如果在classpath中,那么它将会自动通过application.properties文件自动关于数据库的配置属性来自动配置DataSource(数据源)
  • @ComponentScan: 它告诉Spring 搜索和启动其他定义在当前包和子包中的组件。

main() 方法调用了Spring Boot 的SpringApplication.run() 方法来启动整个应用。

2.resources/

这个目录,如名字所示,是独立的一个目录,存储着静态资源,模板还有属性文件。

  • resources/static – 存储着静态文件,像CSS,js和图片等。
  • resources/templates- 存储着服务端放模板,他们将会被Spring渲染成html温江。
  • resources/application.properties –  这个文件是非常重要的。它包含了应用的属性。Spring通过这个文件来定义文件文件属性。你可以在这个文件中定义服务 端口,服务器环境变量,数据库url等。你可以通过这个页面来了解Spring Boot的配置属性

3.EasyNotesApplicationTests – 定义和集成了测试单元。 4. pom.xml – 包含该了所有的项目依赖

  配置MySQL数据库

就像我刚刚说的那样,Spring Boot 试图自动配置一个数据库源(DataSource), 如果 spring-data-jpa 这个包已经在classpath中,那么它就会自动读取application.properties文件中的数据库相关的配置来配置数据源。

因此,我们必须添加数据库配置,然后Spring Boot会把剩下的做好。

打开application.properties 文件然后添加一下属性(不要忘记修改spring.datasource.username和spring.datasource.password 用它的账号密码你们可登陆不了。)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.url = jdbc:mysql://localhost:3306/notes_app?useSSL=false
# 这行是数据库url,包:协议://地址(可以是ip也可以是域名):端口/数据库名?用ssl=不用&charset=utf8  看我这么翻译上面的,你应该能看的懂了吧
spring.datasource.username = root
# 用户名
spring.datasource.password = root
# 密码

## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
# 这个是hibernate 优化数据库查询语句的。因此带上就好。

# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update
# 当数据库结构发生变动的时候,会自动更新数据库结构,添加不存在的字段,不会删除缺少字段。

最下面的两个配置是给hibernate的。Spring Boot使用Hibernate 作为默认的JPA数据库集成。 配置spring.jpa.hibernate.ddl-auto 是用来给数据库初始化的。我给这个配置使用了值”update” 它能做一下事情:

  • 当你定义了一个模型,表会自动被创建,并且会自动创建相关的存储在模型中的字段。
  • 任何对于模型的改变都会引起表的改变。例如,你改变了一个字段的类型,或者添加了另一个字段到模型,那么这些改变也将会映射到数据的对应表中。

给spring.jpa.hibernate.ddl-auto使用update这个值对于开发来说非常方便。但是对于生产环境来说,你还是将这个值设置为”validate”然后使用数据库迁移工具例如Flyway来迁移数据库表的改变。

Creating the Note model(创建Note 模型)

好了。让我们创建Note 模型吧!我们的Note 模型有如下几个字段:

  • id:主键,并且自增
  • title:笔记的标题(不能为空)
  • content: 笔记的内容(不能为空)
  • createAt: 笔记创建的时间
  • updateAt: 笔记更新的时间

现在,让我们开始吧!创建一个包名字叫做model放在com.example.easynotes下面,添加一个类,名字叫做Note.java 添加一下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.easynotes.model;

import org.hibernate.validator.constraints.NotBlank;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name = "notes")
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, 
        allowGetters = true)
public class Note implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotBlank
    private String title;

    @NotBlank
    private String content;

    @Column(nullable = false, updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @CreatedDate
    private Date createdAt;

    @Column(nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @LastModifiedDate
    private Date updatedAt;

    // Getters and Setters ... (Omitted for brevity)
}
  •   所有你的域模型,必须有@Entity注解。有了这个注解你才能持久化这个类(持久化这个词,我不知道翻译准确不准确,目前来说,我只要用就OK了,所以如果小伙伴也是new to java的话,可以像我这样不求甚解,当然,有大佬读到也请指正。)
  • @Table注解是用来提供这个映射这个表的详情的。
  • @Id 这个注解是用来定义主键的
  • @GeneratedValue 这个注解是用来定义主键的生成策略的。在上面的例子中,我们定义了主键为自动增加。
  • @NotBlank 注解是用来验证声明的字段是否是空或者null
  • @Column注解是用来定义字段的属性。你可以定义多个属性,例如name(名字),length(长度),nullable(可为空),updateable(可更新)等等。默认,在数据库中一个属性createAt会被映射为create_at字段。所有的驼峰命名在数据库中都会被转换为下划线式的命名方式。如果你想给这个属性不同的字段名字,你也可以自己指定: @Column(name = "created_on")/* 这个name属性就是用来指定字段名字的 */ private String createdAt;
  • @Temporal注解是需要java.util.Date和Java.util.Calendar类的。它能够通过versa将Java时间和日期对象转换为数据库能够使用的时间类型
  • @JsonIgnoreProperties 注解是一个Jackson注解.Spring Boot 使用Jackson作为序列化和初始化一个Java到JSON数据的类。有这个注解是因为我们不想让客户端提供createAt和updateAt 这个值。如果如果客户端提供了,那么我们就会无视。当然我们会把这些数据展现在返回的JSON中。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Boot 正确中使用JPA实战
JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。
后端码匠
2019/10/24
1.5K0
Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8
JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Spring Data JPA是在 Hibernate 基础上封装的一款框架。
磊哥
2018/09/07
3.9K0
Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8
补习系列(19)-springboot JPA + PostGreSQL
PostGreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS),号称世界上最先进的开源关系型数据库。经过长达15年以上的积极开发和不断改进,PostGreSQL已在可靠性、稳定性、数据一致性等获得了很大的提升。
美码师
2019/04/09
2.2K0
补习系列(19)-springboot JPA + PostGreSQL
spring jpa restful请求示例
postman请求,可以进行GET POST PUT PATCH DELETE请求 http://localhost:8080/ http://localhost:8080/score/1
oktokeep
2024/10/09
870
spring jpa restful请求示例
Spring Boot(12):轻松搞定关系型数据库,Spring Boot与JPA的完美结合!
Spring Boot是Spring家族中的一员,也是一个非常重要的组件。Spring Boot的主要目标是简化Spring应用的构建、开发、测试以及部署等过程。Spring Boot提供了一个快速且强大的方式来创建基于Spring的应用程序,并帮助开发者快速构建,减少了很多繁琐的配置工作,使得我们可以专注于业务逻辑的实现。
bug菌
2023/09/13
5870
Spring Boot(12):轻松搞定关系型数据库,Spring Boot与JPA的完美结合!
【快学springboot】7.使用Spring Boot Jpa
Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术。值得注意的是,JPA只是一套规范,不是具体的实现。Java很喜欢自己去定义规范,然后让厂商自己去实现,比如JMS等。
Happyjava
2024/02/02
2400
【快学springboot】7.使用Spring Boot Jpa
【快学springboot】7.使用Spring Boot Jpa
Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术。值得注意的是,JPA只是一套规范,不是具体的实现。Java很喜欢自己去定义规范,然后让厂商自己去实现,比如JMS等。
Happyjava
2019/07/16
3.4K0
【快学springboot】7.使用Spring Boot Jpa
6.2 Spring Boot集成jpa6.2 Spring Boot集成jpa小结
Java持久化API(JPA,Java Persistence API)是一个将对象映射为关系数据库的标准技术。JPA通过注解或XML描述ORM(Object Relationship Mapping,对象-关系表的映射关系),并将运行期的实体对象持久化到数据库中。
一个会写诗的程序员
2018/08/20
1.4K0
6.2 Spring Boot集成jpa6.2 Spring Boot集成jpa小结
Spring Boot2 系列教程(三十一)Spring Boot 构建 RESTful 风格应用
RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 RESTful 提供了很好的支持,常见的相关注解有:
江南一点雨
2019/11/27
1K0
Spring Boot2 系列教程(三十一)Spring Boot 构建 RESTful 风格应用
spring.jpa.hibernate 配置和源码解析
如果没有通过@Table或者@Column等注解显式指定表名、列名,将通过隐式命名策略生成对应名称
路过君
2024/05/24
3260
SpringBoot整合JPA+SQLite
在现代Java开发领域,Spring Boot以其便捷的配置、快速的开发启动能力广受青睐,而JPA(Java Persistence API)作为Java持久化规范,提供了强大且优雅的对象关系映射(ORM)方案。SQLite作为轻量级嵌入式数据库,适合在一些小型项目、本地测试场景或者对资源占用要求苛刻的环境下使用。本篇博客将详细介绍如何在Spring Boot项目中整合JPA与SQLite,搭建高效的数据持久化层。
编程小白狼
2024/12/31
3351
SpringBoot开发案例之整合Spring-data-jpa
扯了那么多篇SpringBoot的相关案例,基本每行代码都是博主纯手工编写,附代码案例,懂Maven和Git的小伙伴必须可以手到擒来。
小柒2012
2018/03/30
3.2K7
SpringBoot开发案例之整合Spring-data-jpa
SpringBoot系列教程JPA之delete使用姿势详解
常见db中的四个操作curd,前面的几篇博文分别介绍了insert,update,接下来我们看下delete的使用姿势,通过JPA可以怎样删除数据
一灰灰blog
2019/07/09
3.8K0
Spring Boot 1.0 && 2.0 + JPA 多数据源配置与使用
mysql 对应的数据源配置中,定义了实体 Student 和对应的数据层接口 StudentRepository:
happyJared
2018/12/14
1.6K0
Spring Boot(3)-使用mysql详解
Spring Boot构建的Web应用中,基于MYSQL数据库的几种数据库连接方式进行介绍,包括JDBC、JPA、MyBatis、多数据源和事务。
黄规速
2022/04/14
4.2K0
Spring Boot(3)-使用mysql详解
SpringBoot入门建站全系列(五)使用Spring-data-jpa操作数据库CRUD
Mybatis插件:比较时髦,比较适合sql复杂,或者对性能要求高的应用,因为sql都是自己写的。
品茗IT
2019/09/12
9030
Spring Boot 之 Spring Data JPA(一)1、新建工程2、配置数据库3、代码结构4、从数据到逻辑总结
今天,我们用一个最简单的例子上手Spring Data JPA的开发。 1、新建工程 首先,我们使用STS建一个工程: Paste_Image.png 这里我们示例使用H2数据库,主要是因为简单,使用
孙亖
2018/06/07
4.6K0
springData Jpa 快速入门前言:一、简介:二、JPA核心概念:三、springboot集成jpa案例:总结:
数据持久化的操作,一般都要由我们自己一步步的去编程实现,mybatis通过我们编写xml实现,hibernate也要配置对应的xml然后通过创建session执行crud操作。那么有没有这样一种技术,就是把底层的这些crud操作都封装好了,我们直接调用方法就行了,答案是有的,通过springData Jpa 就可以实现。点我可下载本案例源码。
贪挽懒月
2018/08/02
7710
springData Jpa 快速入门前言:一、简介:二、JPA核心概念:三、springboot集成jpa案例:总结:
掌握Spring Boot数据库集成:用JPA和Hibernate构建高效数据交互与版本控制
JPA(Java Persistence API) 是Java的官方持久化规范,它定义了如何将Java对象与关系型数据库中的数据进行映射和交互。JPA并非具体实现,而是提供了一套标准接口。而Hibernate则是一个流行的JPA实现,它不仅实现了JPA的所有功能,还提供了一些额外的功能如缓存、批量操作、懒加载等,增强了数据库操作的性能和灵活性。
2的n次方
2024/10/15
3240
掌握Spring Boot数据库集成:用JPA和Hibernate构建高效数据交互与版本控制
SpringBoot集成JPA
在SpringBoot中,通过Spring Data JPA 和 Spring Data Rest可以快速构建出一个RESTFul应用。
Noneplus
2019/09/24
1.2K0
SpringBoot集成JPA
推荐阅读
相关推荐
Spring Boot 正确中使用JPA实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验