如何使用MySQL和Spring Boot开发RESTful Web服务

栏目: 服务器 · 发布时间: 8年前

内容简介:本文提供了有关如何使用MySQL和Spring Boot开发RESTful Web服务的4步教程Spring Boot是开发spring应用程序的最快方法,我们的案例中:1. 使用MySQL数据库来存储文本文件和图像文件的路径

本文提供了有关如何使用 MySQL 和Spring Boot开发RESTful Web服务的4步教程

Spring Boot是开发spring应用程序的最快方法,我们的案例中:

1. 使用MySQL数据库来存储文本文件和图像文件的路径

2. 使用Spring MVC作为架构模式和Spring RESTful Web服务来获取图像和文本。

所有这些都使用Spring Boot实现。

第一步,将JPA MYSQL和Web加入pom.xml依赖,加入方式有手工和自动,自动就是使用Idea之类开发 工具 的Spring导航工具生成。

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

加入的三个依赖分别是:

1. JPA:在MySQL表和 java 实体之间映射。

2. MySQL:使用MySQL数据库。

3. Web:提供RESTful端点,这样通过Web浏览器能够获取图像和文本

SpringBoot的启动类:


@SpringBootApplication
public class MysqlspringbootApplication {

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

第2步:设计我们的Controller,Dao和服务层,首先从数据实体开始设计:


@Entity
@Table(name = "resource_table")
public class RequestData {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name =
"File_id")
private String id;

@Column(name =
"Images_path")
private String images;

@Column(name =
"Text_path")
private String Contents;


这是一个使用JPA标注的实体类,指定Mysql表名是resource_table,ID主键是必须的,主键产生策略是使用JPA/Hibernate自动生成机制。其他都是指定对应MySQL表名。

然后建立操作该实体类的DAO工具:


public interface ApplicationDao extends CrudRepository<RequestData,Integer> {
@Query(value = "SELECT * FROM resource_table WHERE File_id=?1", nativeQuery = true)
RequestData findResource(Integer i);
}

这里只有接口,没有实现,SpringBoot框架自动帮助我们实现了,其中继承CrudRepository接口,然后将查询语句写在注释中。这是持久层编程的新风格。

再建立服务类ApplicationService:


@Service
public class ApplicationService {
@Autowired
private ApplicationDao applicationDao;

public ResponseEntity<byte[]> getImageURL() throws IOException {
RequestData requestData = applicationDao.findResource(1);
String imagePath = requestData.getImages();
RandomAccessFile f = new RandomAccessFile(imagePath, "r");
byte[] b = new byte[(int) f.length()];
f.readFully(b);
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
return new ResponseEntity<byte[]>(b, headers, HttpStatus.CREATED);
}

public ResponseEntity<byte[]> getTextData() throws IOException {
RequestData requestData = applicationDao.findResource(1);
String s = requestData.getContents();
RandomAccessFile f = new RandomAccessFile(s,
"r");
byte[] b = new byte[(int) f.length()];
f.readFully(b);
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.TEXT_PLAIN);
return new ResponseEntity<byte[]>(b, headers, HttpStatus.CREATED);
}
}

将数据库中的资源转发到前端。

下面建立Resftful端点ApplicationController:


@RestController
@RequestMapping(value = "/application")
public class ApplicationController {
@Autowired
private ApplicationService applicationService;

@RequestMapping(value =
"/get-image", method = RequestMethod.GET)
public ResponseEntity<byte[]> getImagePath() throws IOException {
ResponseEntity<byte[]> responseEntity = applicationService.getImageURL();
return responseEntity;
}
@RequestMapping(value =
"/get-text", method = RequestMethod.GET)
public ResponseEntity<byte[]> getTextPath() throws IOException {
ResponseEntity<byte[]> responseEntity = applicationService.getTextData();
return responseEntity;
}
}

提供两个REST url:/application/get-image和/application/get-text

浏览器可通过这个两个url获得MySQL中文本文件和图形地址。

下面是Springboot的application.properties配置:


spring.datasource.url=jdbc:mysql://localhost:3306/你的数据库?autoReconnect=true&useSSL=false
spring.datasource.username=用户名
spring.datasource.password=密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql = true
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15

spring.jpa.generate-ddl=true

这里JPA实现指定了Hibernate,数据库微MySQL。

注意,这里指定了MySQL 5的dialect,不是普通的org.hibernate.dialect.MySQLDialect,这是针对4.0以前版本。

同时,我们设置了spring.jpa.generate-ddl=true开关,让我们JPA自动产生数据表,那么数据表的 SQL 放哪里?

和application.properties同一目录下建schema.sql文件,加入:


CREATE TABLE `resource_table` (
`File_id` int(10) NOT NULL AUTO_INCREMENT,
`Text_path` varchar(100) DEFAULT NULL,
`Images_path` varchar(100) DEFAULT NULL,
UNIQUE KEY `File_id` (`File_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

/*Data for the table `resource_table` */

insert into `resource_table`(`Text_path`,`Images_path`) values ('e:/text.txt','e:/image.jpg');

希望以上对你有帮助

源码下载: github


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

ANSI Common Lisp

ANSI Common Lisp

Paul Graham / Prentice Hall / 1995-11-12 / USD 116.40

For use as a core text supplement in any course covering common LISP such as Artificial Intelligence or Concepts of Programming Languages. Teaching students new and more powerful ways of thinking abo......一起来看看 《ANSI Common Lisp》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具