• SpringBoot,Vue前后端分离开发首秀


    需求:读取数据库的数据展现到前端页面
    技术栈:后端有主要有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中加入如下依赖

    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-devtools</artifactId>
    			<scope>runtime</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.projectlombok</groupId>
    			<artifactId>lombok</artifactId>
    			<optional>true</optional>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>8.0.11</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-data-jpa</artifactId>
    			<version>2.1.4.RELEASE</version>
    		</dependency>
    		<dependency>
    			<groupId>io.springfox</groupId>
    			<artifactId>springfox-swagger2</artifactId>
    			<version>2.7.0</version>
    		</dependency>
    		<dependency>
    			<groupId>io.springfox</groupId>
    			<artifactId>springfox-swagger-ui</artifactId>
    			<version>2.7.0</version>
    		</dependency>
    	</dependencies>
    

    application.properties配置

    #端口
    server.port=8888
    #连接数据库的配置
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.password=Panbing936@
    spring.datasource.username=root
    spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 
    #SpringData JPA的配置
    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
    

    实体类User.java

    @Entity
    @Data
    public class User{
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer id;
        @Column(length = 55)
        private String name;
        private String avatarURL;
    }
    

    接口UserMapper.java继承JpaRepository

    public interface UserMapper extends JpaRepository<User,Integer> {
    }
    

    Controller.java

    @RestController
    @RequestMapping(value = "/api",produces = APPLICATION_JSON_VALUE)
    @Api(description = "用户管理")
    public class UserController {
    
        @Autowired
        private UserMapper userMapper;
    
        @ApiOperation(value = "用户列表",notes = "查寻所有已注册过的用户信息")
        @RequestMapping(value = "getAll",method = RequestMethod.GET)
        public List<User> getAll()
        {
            return userMapper.findAll();
        }
    }
    

    SwaggerConfig.java

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("cn.niit.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("Spring Boot中使用Swagger2实现前后端分离开发")
                    .description("此项目只是练习如何实现前后端分离开发的小Demo")
                    .termsOfServiceUrl("https://www.jianshu.com/u/2f60beddf923")
                    .contact("WEN")
                    .version("1.0")
                    .build();
        }
    }
    

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

    
    @Configuration
    class WebMvcConfigurer extends WebMvcConfigurerAdapter {
        //跨域配置
        @Bean
        public WebMvcConfigurer corsConfigurer() {
            return new WebMvcConfigurer() {
                @Override
                //重写父类提供的跨域请求处理的接口
                public void addCorsMappings(CorsRegistry registry) {
                    //添加映射路径
                    registry.addMapping("/**")
                            //放行哪些原始域
                            .allowedOrigins("*")
                            //是否发送Cookie信息
                            .allowCredentials(true)
                            //放行哪些原始域(请求方式)
                            .allowedMethods("GET", "POST", "PUT", "DELETE")
                            //放行哪些原始域(头部信息)
                            .allowedHeaders("*")
                            //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
                            .exposedHeaders("Header1", "Header2");
                }
            };
        }
    }
    

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

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

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

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<title>Vue.js-访问API接口数据-蓝墨云班课练习</title>
    		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1,user-scalable=no">
    		<meta http-equiv="X-UA-Compatible" content="ie=edge">
    		<!-- 通过CDN引入Vue.js -->
    		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    		<!-- 通过CDN引入axios -->
    		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    		<style type="text/css">
    			.container{
    				display: flex;
    				flex-direction: column;
    			}
    			.card{
    				display: flex;
    				margin-bottom: 10px;
    			}
    			.cover{
    				 100px;
    				height: 100px;
    			}
    			.cover img{
    				 100%;
    				height: 100%;
    			}
    		</style>
    	</head>
    	<body>
    		<div id="app">
    			<div class="top">
    				<p>{{users.length}}个人在线</p>
    			</div>
    			<hr>
    			<div class="container">
    				<div class="card" v-for="user in users">
    					<div class="cover">
    						<img :src="'img/'+user.avatarURL">
    					</div>
    					<div class="">
    						<p>{{user.id}}</p>
    					</div>
    					<div class="">
    						<p>{{user.name}}</p>
    					</div>
    					
    				</div>
    			
    			</div>
    			
    		</div>
    		<script type="text/javascript">
    			var app = new Vue({
    				el: '#app',
    				data: {
    					users: []
    				},
    				created: function() {
    					var _this = this;
    					axios.get('http://localhost:8888/api/getAll')
    						.then(function(response) {
    							_this.users = response.data;
    						})
    				}
    			})
    		</script>
    	</body>
    </html>
    

    目录结构和运行结果如下
    完美收官!!!!!!!

    github代码

    个人网站

  • 相关阅读:
    L18 如何快速查找文档获得帮助
    L4 如何在XCode中下进行工作
    L17 怎么向应用程序商店提交应用
    Unity 烘焙材质到单一贴图的脚本
    关于用Max导出Unity3D使用的FBX文件流程注解
    计算两点之间的角度的代码
    Unity3d iOS基本优化和高级优化
    91SDK接入及游戏发布、更新指南
    UNITY3D与iOS交互解决方案
    Unity3d与iOS交互开发——接入平台SDK必备技能
  • 原文地址:https://www.cnblogs.com/panbingwen/p/10765501.html
Copyright © 2020-2023  润新知