查看原文
其他

SpringBoot-Vue 前后端分离开发首秀

MarkerHub 2022-11-04

小Hub领读:

很简单的springboot-Vue入门示例,后面会逐渐增加难度,从简单到复杂!


作者:Joker

原文地址 https://juejin.im/post/5ccda966e51d456e51614b4b

需求:读取数据库的数据展现到前端页面 技术栈:后端有主要有 SpringBoot,lombok,SpringData JPA,Swagger, 跨域,前端有 Vue 和 axios 不了解这些技术的可以去入门一下 lombok 入门 swagger 入门 SpringData JPA 入门 配置:mysql 8.0.11,IntelliJ IDEA 2017.1.2,HBuilderX 1.9.3

首先创建一个 Spring Boot 项目,目录结构如下:

在 pom.xml 中加入如下依赖

  1. <dependencies>

  2. <dependency>

  3. <groupId>org.springframework.boot</groupId>

  4. <artifactId>spring-boot-starter-web</artifactId>

  5. </dependency>

  6. <dependency>

  7. <groupId>org.springframework.boot</groupId>

  8. <artifactId>spring-boot-devtools</artifactId>

  9. <scope>runtime</scope>

  10. </dependency>

  11. <dependency>

  12. <groupId>org.projectlombok</groupId>

  13. <artifactId>lombok</artifactId>

  14. <optional>true</optional>

  15. </dependency>

  16. <dependency>

  17. <groupId>org.springframework.boot</groupId>

  18. <artifactId>spring-boot-starter-test</artifactId>

  19. <scope>test</scope>

  20. </dependency>

  21. <dependency>

  22. <groupId>mysql</groupId>

  23. <artifactId>mysql-connector-java</artifactId>

  24. <version>8.0.11</version>

  25. </dependency>

  26. <dependency>

  27. <groupId>org.springframework.boot</groupId>

  28. <artifactId>spring-boot-starter-data-jpa</artifactId>

  29. <version>2.1.4.RELEASE</version>

  30. </dependency>

  31. <dependency>

  32. <groupId>io.springfox</groupId>

  33. <artifactId>springfox-swagger2</artifactId>

  34. <version>2.7.0</version>

  35. </dependency>

  36. <dependency>

  37. <groupId>io.springfox</groupId>

  38. <artifactId>springfox-swagger-ui</artifactId>

  39. <version>2.7.0</version>

  40. </dependency>

  41. </dependencies>

application.properties 配置

  1. #端口

  2. server.port=8888

  3. #连接数据库的配置

  4. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

  5. spring.datasource.password=Panbing936@

  6. spring.datasource.username=root

  7. spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8

  8. #SpringData JPA的配置

  9. spring.jpa.hibernate.ddl-auto=update

  10. spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

实体类 User.java

  1. @Entity

  2. @Data

  3. public class User{


  4. @Id

  5. @GeneratedValue(strategy = GenerationType.AUTO)

  6. private Integer id;

  7. @Column(length = 55)

  8. private String name;

  9. private String avatarURL;

  10. }

接口 UserMapper.java 继承 JpaRepository

  1. public interface UserMapper extends JpaRepository<User,Integer> {

  2. }

Controller.java

  1. @RestController

  2. @RequestMapping(value = "/api",produces = APPLICATION_JSON_VALUE)

  3. @Api(description = "用户管理")

  4. public class UserController {


  5. @Autowired

  6. private UserMapper userMapper;


  7. @ApiOperation(value = "用户列表",notes = "查寻所有已注册过的用户信息")

  8. @RequestMapping(value = "getAll",method = RequestMethod.GET)

  9. public List<User> getAll()

  10. {

  11. return userMapper.findAll();

  12. }

  13. }

SwaggerConfig.java

  1. @Configuration

  2. @EnableSwagger2

  3. public class SwaggerConfig {

  4. @Bean

  5. public Docket createRestApi() {

  6. return new Docket(DocumentationType.SWAGGER_2)

  7. .apiInfo(apiInfo())

  8. .select()

  9. .apis(RequestHandlerSelectors.basePackage("cn.niit.controller"))

  10. .paths(PathSelectors.any())

  11. .build();

  12. }


  13. private ApiInfo apiInfo() {

  14. return new ApiInfoBuilder()

  15. .title("Spring Boot中使用Swagger2实现前后端分离开发")

  16. .description("此项目只是练习如何实现前后端分离开发的小Demo")

  17. .termsOfServiceUrl("https://www.jianshu.com/u/2f60beddf923")

  18. .contact("WEN")

  19. .version("1.0")

  20. .build();

  21. }

  22. }

WebConfig.java 是实现跨域的配置,务必记得

  1. @Configuration

  2. class WebMvcConfigurer extends WebMvcConfigurerAdapter {

  3. //跨域配置

  4. @Bean

  5. public WebMvcConfigurer corsConfigurer() {

  6. return new WebMvcConfigurer() {

  7. @Override

  8. //重写父类提供的跨域请求处理的接口

  9. public void addCorsMappings(CorsRegistry registry) {

  10. //添加映射路径

  11. registry.addMapping("/**")

  12. //放行哪些原始域

  13. .allowedOrigins("*")

  14. //是否发送Cookie信息

  15. .allowCredentials(true)

  16. //放行哪些原始域(请求方式)

  17. .allowedMethods("GET", "POST", "PUT", "DELETE")

  18. //放行哪些原始域(头部信息)

  19. .allowedHeaders("*")

  20. //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)

  21. .exposedHeaders("Header1", "Header2");

  22. }

  23. };

  24. }

  25. }

点击 localhost:8888/swagger-ui.html 查看生成的接口文档,测试一下

返回数据没有问题,接着可以根据文档开发前端代码了

用 HBuilderX 新建一个 test.html 页面,具体代码如下

  1. <!DOCTYPE html>

  2. <html>

  3. <head>

  4. <meta charset="utf-8" />

  5. <title>Vue.js-访问API接口数据-蓝墨云班课练习</title>

  6. <meta >

  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">

  8. <!-- 通过CDN引入Vue.js -->

  9. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

  10. <!-- 通过CDN引入axios -->

  11. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

  12. <style type="text/css">

  13. .container{

  14. display: flex;

  15. flex-direction: column;

  16. }

  17. .card{

  18. display: flex;

  19. margin-bottom: 10px;

  20. }

  21. .cover{

  22. width: 100px;

  23. height: 100px;

  24. }

  25. .cover img{

  26. width: 100%;

  27. height: 100%;

  28. }

  29. </style>

  30. </head>

  31. <body>

  32. <div id="app">

  33. <div class="top">

  34. <p>{{users.length}}个人在线</p>

  35. </div>

  36. <hr>

  37. <div class="container">

  38. <div class="card" v-for="user in users">

  39. <div class="cover">

  40. <img :src="'img/'+user.avatarURL">

  41. </div>

  42. <div class="">

  43. <p>{{user.id}}</p>

  44. </div>

  45. <div class="">

  46. <p>{{user.name}}</p>

  47. </div>


  48. </div>


  49. </div>


  50. </div>

  51. <script type="text/javascript">

  52. var app = new Vue({

  53. el: '#app',

  54. data: {

  55. users: []

  56. },

  57. created: function() {

  58. var _this = this;

  59. axios.get('http://localhost:8888/api/getAll')

  60. .then(function(response) {

  61. _this.users = response.data;

  62. })

  63. }

  64. })

  65. </script>

  66. </body>

  67. </html>

上面前端的代码,主要是通过引入Vue的js文件实现Vue的组件功能,一般在功能复杂的项目中,我们不会这样使用,而是单独新建一个前端的项目,使用NPM来创建运行打包项目。具体的Vue教程,可以去看这个网站:https://www.runoob.com/vue2/vue-tutorial.html。

目录结构和运行结果如下

完美收官!!!!!!!

github 代码:https://github.com/pbw123/spring-boot-demo

个人网站:http://47.101.51.245/


(完)

MarkerHub文章索引:(点击阅读原文直达)

https://github.com/MarkerHub/JavaIndex


【推荐阅读】

SQL的各种连接Join详解,都需要熟练掌握!

开源博客项目eblog完整搭建教程!



公众号文章索引

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存