[写在翻译前]
这篇文章是我准备用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
步骤二:输入输入下面的详细信息
[译者:]你们可以看到,新版的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 应用的入口点
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出身)叫做
@SpringBootApplication
,这个注释是下面的几个特定的spring注解的集合。
main() 方法调用了Spring Boot 的SpringApplication.run() 方法来启动整个应用。
2.resources/
这个目录,如名字所示,是独立的一个目录,存储着静态资源,模板还有属性文件。
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 用它的账号密码你们可登陆不了。)
## 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 模型有如下几个字段:
现在,让我们开始吧!创建一个包名字叫做model放在com.example.easynotes下面,添加一个类,名字叫做Note.java 添加一下内容:
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)
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有