美文网首页
Spring Boot初了解

Spring Boot初了解

作者: 温柔小黄 | 来源:发表于2019-11-15 21:28 被阅读0次

    最近这段时间一直在忙于开发,今天忙里偷闲更新一篇博客吧.

    偶尔在找一些学习资料的时候,总是发现服务治理,服务发现,微服务架构这些高大上的词.但点进去一看实践方式都是使用JAVA.对此作为一个PHPer很不开心.为了将这些概念能更好的引入到我们PHP当中,我将去学习一下JAVA.

    当然,学习一门语言就需要它的环境.这里笔者使用的是Mac电脑.系统自带了JDK1.6.本篇文章是基于jdk1.8的.我们去官网上下载一下即可.

    不过这里有一个小坑.一定要下载JDK.不要下载JRE

    JDK:java development kit (java开发工具)
    JRE:java runtime environment (java运行时环境)
    

    如果下载了JRE,就仅仅能运行java环境.这里我就踩了坑.可能是我英语太差,没读懂就直接点下载了.

    安装好后查看一下版本

    $ java -version
    > java version "1.8.0_191"
    > Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
    > Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
    

    好了,环境就简单的介绍到这里.下面进入本次的话题吧

    Spring家族

    • Spring MVC
    • Spring Boot
    • Spring Cloud

    Spring MVC 一个轻量级的控制反转(IoC)和面向切面(AOP)的容器,是一个Java开发web程序框架

    Spring Boot 是 Spring MVC 的升级版.虽然是升级版但是两者学习起来是没有关联性的.可以去直接学习 Spring Boot

    Spring Boot 最大特点就是简化了配置.同时也是一个微服务入门级框架.

    同样 Spring Cloud 是spring Boot的升级版提供了一些常用的分布式组件.

    在使用之前我们还需要有Maven的环境,Maven是一个包管理工具.类似于Python的pip.

    从官网(https://maven.apache.org/download.cgi)下载 Maven 并解压。
    

    vim ~/.bash_profile。

    export M2_HOME="/Users/during/Documents/Software/apache-maven-3.5.0"
    
    export PATH="$M2_HOME/bin:$PATH"
    
    # 如果没有配置过JAVA_HOME,还需要导出JAVA_HOME
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents
    

    使环境变量生效

    source ~/.bash_profile 
    

    mvn -v 查看 Maven 否安装成功

    下面开始我们的正式之旅~

    这里我们使用Intellij IDEA编辑器.创建一个项目

    image

    左边有很多选项,这里我们就选择Spring Initializr.

    我们将项目的SDK选择为1.8.

    点击下一步

    image

    group是maven管理项目包时用作区分的字段.

    artifact:一般是项目名或者模块名。

    包名根目录=group+artifact

    其余的可以直接默认的.

    image

    我们使用Spring Boot1.5.17.

    这里我们先勾选 web.

    最后我们选择保存路径即可.

    当然如果你是第一次使用,会使用Maven下载大量的包。需要很长时间.建议更换成阿里云或者其他国内镜像

    .test
    ├── pom.xml # maven的配置文件
    ├── src
    │   ├── main
    │   │   ├── java
    │   │   │   └── com
    │   │   │       └── webhuang
    │   │   │           └── test
    │   │   │               └── TestApplication.java # 项目的启动文件
    │   │   └── resources # 项目的一些资源
    │   └── test # 测试文件
    

    我们直接进入TestApplication.java 通过编辑器启动项目

    在代码编辑区域右键 点击 'Run TestApplication'.

    当然你也可以在项目根目录使用 mvn spring-boot run 启动

    image

    可以看到启动在8080端口下了,打开浏览器 (http://localhost:8080)

    image

    现在我们让浏览器显示出Hello,World.

    我们在同目录下创建一个 HelloController.java 文件

    package com.webhuang.test;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
        @GetMapping("/")
        public String index() {
            return "hello, World";
        }
    }
    

    然后我们重启项目.再次打开浏览器.显示出hello,world了.

    本文的目的不是打印出 hello,world 这么简单的咯.

    而是做一套API接口,实现以下功能

    请求Method 请求URL 功能
    POST /insert 插入一条数据
    GET /get 获取指定一条数据
    GET /list 查看数据列表
    POST /delete 删除一条指定数据

    由于需要数据持久保存 我们要用到Mysql进行数据存储.

    需要引用两个包. 在项目根目录下的pom.xml下dependencies中增加这两个包

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

    不要忘记重新导入这些包.在编辑器中有快捷方式。


    image

    我们还需配置mysql连接信息

    我们将 application.properties 改为 application.yml

    使用yml格式 使配置项更加美观

    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/dbtest
        username: root
        password:
      jpa:
        hibernate:
          ddl-auto: update
        show-sql: true
    

    jpa.hibernate.ddl-auto=update

    第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。

    接着去创建一个实体类 Data (src/main/java/com.webhuang.test/Data.java)

    package com.webhuang.test;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    public class Data {
    
        @Id
        @GeneratedValue
        private Integer id;
    
        private String data;
    
        public Data() {
    
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getData() {
            return data;
        }
    
        public void setData(String data) {
            this.data = data;
        }
    }
    
    

    在下次启动我们项目的时候就会自动创建一张data表.

    由于这里只是对此框架进行一个初步的学习,并不使用复杂的项目结构.因此把所有文件都写在同一目录

    我们创建一个DataRepository.java,这里仅仅继承JpaRepository

    package com.webhuang.test;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface DataRepository extends JpaRepository<Data, Integer> {
    
    }
    
    

    好了,现在来编写API接口.创建一个 ApiController.java

    package com.webhuang.test;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    @RestController
    public class ApiController {
    
        // 自动导入DataRepository
        @Autowired
        private DataRepository dataRepository;
    
        /**
         * 获取数据列表
         * @return List<Data>
         */
        @GetMapping(value = "/list")
        public List<Data> list() {
            return dataRepository.findAll();
        }
    
        /**
         * 通过id获取一条数据
         * @param id 数据id
         * @return Data
         */
        @GetMapping(value = "/get")
        public Data get(@RequestParam(value = "id", required = false, defaultValue = "0") Integer id) {
            return dataRepository.findOne(id);
        }
    
        /**
         * 插入一条数据
         * @param content 数据内容
         * @return Data
         */
        @PostMapping(value = "/insert")
        public Data insert(@RequestParam(value = "data", defaultValue = "") String content) {
            Data data = new Data();
            data.setData(content);
            return dataRepository.save(data);
        }
    
        /**
         * 删除一条数据
         * @param id 数据id
         */
        @PostMapping(value = "/delete")
        public void delete(@RequestParam(value = "id", required = false, defaultValue = "0") Integer id){
            dataRepository.delete(id);
        }
    }
    
    

    如果你有 php 或者 python的开发经验 你会发现这些ORM操作都一样.很容易入手.这里我也就不过多解释这些代码了.

    代码编写完成,重启项目.我们来测试一下这些接口:

    • 插入数据
    $ curl -X POST -d data=test "http://localhost:8080/insert"
    > {"id":2,"data":"test"}
    
    • 数据列表
    > curl -X GET "http://localhost:8080/list"
    > [{"id":1,"data":"first"},{"id":2,"data":"test"}]
    

    这里id为1的数据是我自己手动加入库中的.

    • 获取数据
    $ curl -X GET "http://localhost:8080/get?id=2"
    > {"id":2,"data":"test"}
    
    • 删除数据
    # 删除数据没用返回值
    $curl -X POST -d id=1 "http://localhost:8080/delete"
    

    对于我这个0JAVA基础的人.照葫芦画瓢写出这几个接口.花了4个多小时.当深入了解了一门语言之后,再去掌握其他语言就很容易上手了.当然这里也多亏了Spring Boot的开发者.让这些操作变得如此简洁方便.

    之后会花时间去研究Spring大家族的.其目的就是开头所说.将一些Java实践较好的东西,引入php.

    也同样希望每一个PHP开发者完善我们的生态。让更多大型项目中也有我们的身影.

    相关文章

      网友评论

          本文标题:Spring Boot初了解

          本文链接:https://www.haomeiwen.com/subject/ovqeictx.html