在Spring Data REST中访问MySQL
首先
使用Spring Data REST,创建最简单的REST API来访问MySQL。
请参考
使用REST访问JPA数据。请参阅https://spring.io/guides/gs/accessing-data-rest/。
The prerequisite condition.
前提是在下面的文章之后的状态下,
尝试使用Spring Boot和AngularUI UI-Router。
能够使用MySQL
环境
JVM: 1.8.0_45 (Oracle Corporation 25.45-b02)
操作系统: Mac OS X 10.11.3 x86_64
MySQL: 服务器版本: 5.5.28 源代码发行版
春季工具套件
版本: 3.7.3.RELEASE
构建编号: 201602250940
平台: Eclipse Mars.2 (4.5.2)
(从此处安装 https://spring.io/tools/sts/all)
Buildship:Gradle 的 Eclipse 插件 1.0.13.v20160411-1723 (通过 Help -> Eclipse marketplace 安装)
操作过程
添加一个依赖库
为了使用Spring Data JPA、Spring Data REST和MySQL Connector/J,我们将把它们作为构建脚本的依赖项,并添加// Add。
dependencies {
compile 'org.webjars:jquery:2.2.3'
compile 'org.webjars:angularjs:1.5.3'
compile 'org.webjars:angular-ui-router:0.2.18'
compile 'org.webjars:bootstrap:3.3.6'
// Add
compile('org.springframework.boot:spring-boot-starter-data-jpa')
// Add
compile('org.springframework.boot:spring-boot-starter-data-rest')
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
// Add
compile('mysql:mysql-connector-java')
}
为了反映附加信息,您可以在Package Explorer中选择SSP37(项目根目录),然后右键单击,
点击Gradle -> Refresh Gradle Project。
请检查Package Explorer中的Project and External Dependencies,确认是否存在添加的Jar文件。
请参阅
Spring IO平台参考指南
附录A. 依赖版本
http://docs.spring.io/platform/docs/2.0.3.RELEASE/reference/htmlsingle/#appendix
WebJars http://www.webjars.org/
设定
在使用JPA和MySQL时,将进行必要的最小配置。
spring.data.rest.basePath=/api
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database=MYSQL
spring.jpa.hibernate.ddl-auto=update
spring.data.rest.basePath 可以用以下方式进行表达:
春季数据.休息.基础路径
这是关于 REST API 的根路径设置。我认为改变它会更容易理解,所以我决定改变它。
请参考
Spring Data REST – 参考文档
4.6.1. 更改基本URI
http://docs.spring.io/spring-data/rest/docs/2.4.4.RELEASE/reference/html/#getting-started.basic-settings
spring.datasource.*:春天的数据源。
请根据您自己的环境指定值,这是连接到MySQL的连接字符串。请指定具有能够执行表创建、列修改和删除等操作权限的MySQL用户,因为Hibernate可以自动执行这些操作。
请参考
Spring Boot参考指南
29.1.2 连接到生产数据库
https://docs.spring.io/spring-boot/docs/1.3.3.RELEASE/reference/htmlsingle/#boot-features-connect-to-production-database
spring.jpa.database=MYSQL
春季.jpa.database=MYSQL
指示自动生成的SQL和DDL以适用于MySQL。
spring.jpa.hibernate.ddl-auto=update
春季.jpa.hibernate.ddl-auto=更新
创建一个成为Entity的类,它会自动创建表格并处理项目的更改。
请提供以下句子的原文。
Please provide the original sentence for reference.
《Spring Boot参考指南》
73.5 配置JPA属性
https://docs.spring.io/spring-boot/docs/1.3.3.RELEASE/reference/htmlsingle/#howto-configure-jpa-properties
《Spring Boot参考指南》中的第73.5节介绍了如何配置JPA属性。点击链接https://docs.spring.io/spring-boot/docs/1.3.3.RELEASE/reference/htmlsingle/#howto-configure-jpa-properties以查看详细信息。
《Hibernate参考文档》第3.4节 可选配置属性
表3.7 杂项属性
当SessionFactory被创建时,自动验证或导出模式DDL到数据库。使用create-drop选项,当SessionFactory被明确关闭时,数据库模式将被删除。例如,validate | update | create | create-drop。
创建实体
我试着创建了一个简单的实体。
这个实体叫做”单词(word)”,它有一个拼写(spelling)和一个喜好(favorite)的属性。
package com.example.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Word {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private String spelling;
@Column(nullable = false)
private Boolean favorite;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getSpelling() {
return spelling;
}
public void setSpelling(String spelling) {
this.spelling = spelling;
}
public Boolean getFavorite() {
return favorite;
}
public void setFavorite(Boolean favorite) {
this.favorite = favorite;
}
}
创建存储库
我們將創建一個操作剛才的Word的存儲庫。
Spring Data REST會自動公開這樣的存儲庫,使我們能夠使用CRUD操作來操控實體對應的API。
package com.example.domain;
import java.util.List;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
public interface WordRepository extends PagingAndSortingRepository<Word, Long> {
List<Word> findBySpellingLikeOrderBySpellingAsc(@Param("spelling") String spelling);
}
尝试使用API
那么让我们使用cURL来试试用API。
首先启动Web应用程序。
Spring Data REST公开的API路径将由设置的API根路径和创建实体的Repository的名称,全部小写、加上复数形式的”s”,并连接在一起。
本次设置的API根路径为/api,并且实例的名称是words,所以路径名称为/api/words。
我们使用curl访问该路径。
$ curl http://localhost:8080/api/words
有以下这样的回应。
{
"_embedded" : {
"words" : [ ]
},
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/words"
},
"profile" : {
"href" : "http://localhost:8080/api/profile/words"
},
"search" : {
"href" : "http://localhost:8080/api/words/search"
}
},
"page" : {
"size" : 20,
"totalElements" : 0,
"totalPages" : 0,
"number" : 0
}
}
暂时先尝试注册一条记录。
在d中指定的JSON部分中,除了id外,指定了实体的所有项目,并将其通过先前的路径进行POST,即可实现注册。
$ curl -X POST -H "Content-Type:application/json" -d '{ "spelling": "APPLE", "favorite": true }' http://localhost:8080/api/words
看起来已经可以在id=13上注册了。 由于环境的不同,13可能会有所变化,请进行转译。
{
"spelling" : "APPLE",
"favorite" : true,
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/words/13"
},
"word" : {
"href" : "http://localhost:8080/api/words/13"
}
}
}
让我们再次获取该记录。将id连接到路径上,就可以访问该记录了。
$ curl http://localhost:8080/api/words/13
{
"spelling" : "APPLE",
"favorite" : true,
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/words/13"
},
"word" : {
"href" : "http://localhost:8080/api/words/13"
}
}
}
我将尝试更新记录。
在JSON的“d”部分指定了除了id之外的实体的所有项目,通过指定id的路径进行PUT操作可以进行更新。
在此例中,我们将APPLE更新为apple。
$ curl -X PUT -H "Content-Type:application/json" -d '{ "spelling": "apple", "favorite": false }' http://localhost:8080/api/words/13
{
"spelling" : "apple",
"favorite" : false,
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/words/13"
},
"word" : {
"href" : "http://localhost:8080/api/words/13"
}
}
}
我尝试删除记录。
当您将id连接到路径中并发送DELETE请求时,数据将被删除。
$ curl -X DELETE http://localhost:8080/api/words/13
我会尝试搜索一下。
为了进行初步的搜索,我将注册3个记录。
curl -X POST -H "Content-Type:application/json" -d '{ "spelling": "apple", "favorite": true }' http://localhost:8080/api/words
curl -X POST -H "Content-Type:application/json" -d '{ "spelling": "apricot", "favorite": true }' http://localhost:8080/api/words
curl -X POST -H "Content-Type:application/json" -d '{ "spelling": "pineapple", "favorite": false }' http://localhost:8080/api/words
我会尝试搜索。
搜索路径是将搜索方法名连接到 Repository 中。
搜索关键词会连接到查询字符串中。
SQL 的 Like 条件中的通配符字符%会被编码为%25进行指定。
这样就可以搜索以apple结尾且拼写正确的记录了。
$ curl http://localhost:8080/api/words/search/findBySpellingLikeOrderBySpellingAsc?spelling=%25apple
{
"_embedded" : {
"words" : [ {
"spelling" : "apple",
"favorite" : true,
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/words/14"
},
"word" : {
"href" : "http://localhost:8080/api/words/14"
}
}
}, {
"spelling" : "pineapple",
"favorite" : false,
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/words/16"
},
"word" : {
"href" : "http://localhost:8080/api/words/16"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/words/search/findBySpellingLikeOrderBySpellingAsc?spelling=%25apple"
}
}
}
请参考
样例仓库
https://github.com/quwahara/SSP37/tree/600-rest