第一个Spring Boot项目


title: 第一个Spring Boot项目
tags: Spring Boot,后台,凌宇
grammar_cjkRuby: true


搭建第一个Spring Boot项目

[toc]

环境搭建

使用工具:Idea
软件环境:java version "1.8.0_131" maven "3.39"

项目搭建

新建项目

选择Sping Initializr
选择Sping Initializr

选择默认的Service Url

enter description here
enter description here

点击next 配置其他属性

enter description here
enter description here

点击next 选择

点击next 选择
点击next 选择

点击finish 完成项目搭建,初次搭建会根据依赖下载jar,会耗时很久,如果可以可以换成ali的maven的setting文件

完成搭建
完成搭建

代码小试牛刀

搭建完成后的项目目录如下:
基本的项目目录
基本的项目目录

可以看到省却了springmvc那一套死鬼麻烦的配置什么的,我们手动编写一个Controller来进行测试:

代码如下:


package com.girl;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by Ly on 2017/6/30.
 */
@RestController
public class HelloController {

    @RequestMapping(value = "hello",method = RequestMethod.GET)
    public String  say(){
        return "Hello Spring Boor";
    }
}


配置好tomcat以后,我们运行项目可以得到

项目小试牛刀运行结果
项目小试牛刀运行结果

配置文件

这个文件是项目的配置文件
这个文件是项目的配置文件

默认打开里面是空白的,我们手动添加如下代码:


server.port=8081
server.context-path=/girl

其中server.port指的是项目所跑的端口号
其中server.context-path可以认为是项目名

OK,这样讲不明白,我们做个对比:

当application.properties文件为空白时,则我们的服务器端口为之前创建tomcat时所配置的(以我为例,端口是8080 项目名是"/")

我的默认配置
我的默认配置

而修改了application.properties,加上上述代码后,我们需要进行这个网址访问:

修改后的访问路径
修改后的访问路径

当然,我们更推荐使用yml文件,通过更简便的语法来进行配置:


yml文件
yml文件

server:
  port: 8081
  context-path: /girl

通过@Value注解拿到配置文件里面的值

例如我们在配置文件中添加:


server:
  port: 8082
  context-path: /girl

  age : 12

在我们的Controller里面我们补充代码如下:


package com.girl;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by Ly on 2017/6/30.
 */
@RestController
public class HelloController {
    @Value("${age}")
    private Integer port;
    @RequestMapping(value = "hello",method = RequestMethod.GET)
    public String  say(){
        return "Hello Spring Boor"+port;
    }
}


运行可以得到:


运行结果
运行结果

批量使用多个注解

通过@Value 我们可以拿到写在配置文件的值,但是如果有100个呢?是不是我们要通过100个注解来进行获取呢?

修改yml文件:


server:
  port: 8082
  context-path: /girl
girl:
  age: 12
  name: "Ly"

添加类包:

添加properties包
添加properties包

根据application.yml文件的值编写我们的javabean对象:


package com.girl.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * Created by Ly on 2017/7/1.
 */
@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProperties {
    private Integer age;
    private String name;

    @Override
    public String toString() {
        return "GirlProperties{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


其中注意我们的2个注解:
@Component
@ConfigurationProperties(prefix = "girl")

这时候我们可以会出现错误:


出现错误
出现错误

这时候我们要在maven依赖文件中添加:


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

这时候整个pom.xml文件:


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.girl</groupId>
    <artifactId>girl</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>girl</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>


修改我们HelloController.java为:


package com.girl;

import com.girl.properties.GirlProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by Ly on 2017/6/30.
 */
@RestController
public class HelloController {

    @Autowired
    private GirlProperties girlProperties;

    @RequestMapping(value = "hello",method = RequestMethod.GET)
    public String  say(){
        return "Hello Spring Boor"+girlProperties.toString();
    }
}


运行结果为:


运行结果
运行结果

运行配置 进行生产环境和开发环境的切换

添加2个配置文件如下:


配置环境如下
配置环境如下

application-dev.yml 开发环境


server:
  port: 8082
  context-path: /girl
girl:
  age: 19
  name: "lht"

application-prod.yml 生产环境


server:
  port: 8082
  context-path: /girl
girl:
  age: 12
  name: "Ly"

application.yml 控制切换版本


spring:
  profiles:
    active: dev

active: dev 为开发版本

开发版本的运行结果
开发版本的运行结果

active: prod 为生产版本

生产版本的运行结果
生产版本的运行结果

Controller的使用

基本概述:


Controller的基本概述
Controller的基本概述

@Controller的初步使用

修改HelloController代码如下:


package com.girl;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Created by Ly on 2017/6/30.
 */
@Controller
public class HelloController {
    @RequestMapping(value = "hello",method = RequestMethod.GET)
    public String  say(){
        return "index";
    }
}


把@RestController修改为@Controller,返回一个String,指的是返回的一个html或者jsp路径

在templates目录下新增一个html文件:


html文件
html文件

index.html文件如下:


<!DOCTYPE html>
<html lang="en">
<head>
    <!--注意meta要关闭 即<mate></mate>-->
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
<h1>Hello Spring boot</h1>
</body>
</html>

在pom.xml文件中添加如下依赖:


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

目前的pom.xml代码如下:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.girl</groupId>
    <artifactId>girl</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>girl</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>


运行代码如下:


@Controll运行结果
@Controll运行结果

@Controller+@ResponseBody

@Controller+@ResponseBody=@RestController


/**
 * Created by Ly on 2017/6/30.
 */
@Controller
@ResponseBody
public class HelloController {
    @Autowired
    private GirlProperties girlProperties;
    @RequestMapping(value = "hello",method = RequestMethod.GET)
    public String  say(){
        return girlProperties.toString();
    }
}


效果等同于:


/**
 * Created by Ly on 2017/6/30.
 */
@RestController
public class HelloController {

    @Autowired
    private GirlProperties girlProperties;

    @RequestMapping(value = "hello",method = RequestMethod.GET)
    public String  say(){
        return "Hello Spring Boor"+girlProperties.toString();
    }
}


@RequestMapping

@RequestMapping可以修改为多个url,

修改HelloController文件如下:

/**
 * Created by Ly on 2017/6/30.
 */
@RestController
public class HelloController {
    @Autowired
    private GirlProperties girlProperties;
    @RequestMapping(value = {"hello","hi"},method = RequestMethod.GET)
    public String  say(){
        return girlProperties.toString();
    }
}
多个url的运行结果
多个url的运行结果
多个url的运行结果
多个url的运行结果

@RequestMapping可以为整个Controller类进行注解


/**
 * Created by Ly on 2017/6/30.
 */
@RestController
@RequestMapping(value = "Ly")
public class HelloController {
    @Autowired
    private GirlProperties girlProperties;
    @RequestMapping(value = {"hello","hi"},method = RequestMethod.GET)
    public String  say(){
        return girlProperties.toString();
    }
}


这时候我们需要通过如下路径才能进行访问:


配置url
配置url

@PathVariable @RequestParam @GetMapping

另外的使用
另外的使用

@PathVariable是用来对指定请求的URL路径里面的变量

例如:
POST方法

    @RequestMapping(value = "Ly/{id}", method = RequestMethod.POST)
    public String sayLy(@PathVariable("id") Integer id) {
        return "id---" + id;
    }

GET方法

    @RequestMapping(value = "Ly/{id}", method = RequestMethod.GET)
    public String sayLy(@PathVariable("id") Integer id) {
        return "id---" + id;
    }

结果如下:


GET结果
GET结果
POST方法
POST方法

@RequestParam用来获得静态的URL请求参数

如果我们想用传统的方法利用get来传参数:http://localhost:8082/girl/Ly?id=121

可以参考:


 @RequestMapping(value = "ByGet", method = RequestMethod.GET)
    public String salLyByGet(@RequestParam(value = "id", required = false, defaultValue = "0") Integer id) {
        return "id----"+id;
    }

数据库使用

搭建数据库使用的环境

  1. 在application中配置数据库配置信息

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

这时候整个的application.yml文件为:

spring:
  profiles:
    active: dev
  datasource:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/dbgirl
      username: root
      password: root
  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true
  1. maven 添加相应的配置文件:
    <!--依赖数据库文件资源的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

这时候整个xml文件为:


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.girl</groupId>
    <artifactId>girl</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>girl</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!--依赖静态文件资源的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--依赖数据库文件资源的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>
  1. 我们不用在数据库中创建tables,其实我们所要做的只是创建一个databases,然后创建一个class,添加相应注解:
package com.girl;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

/**
 * Created by Shinelon on 2017/7/3.
 */
@Entity
public class Girl {
    @Id
    @GeneratedValue
    private Integer id;
    private String cupSize;
    private Integer age;

    public Girl() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCupSize() {
        return cupSize;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}


运行后我们可以发现数据库表已经做了改变了。
数据库表
数据库表

事务管理

使用     @Transactional  进行 事务的注解

添加GirlService代码:


@Service
public class GirlService {
     @Autowired
     GrilRepositoty grilRepositoty;
    @Transactional
     public void insertTwo(){
         Girl girl=new Girl();
         girl.setAge(11);
         girl.setCupSize("f");
         grilRepositoty.save(girl);
         Girl gir2=new Girl();
         gir2.setAge(3);
         gir2.setCupSize("A-Cpu");
         grilRepositoty.save(gir2);
     }
}


在GirlController中添加添加代码:


    @Autowired
    private GirlService girlService;


  @PostMapping(value = "doInsertTwoGirl")
    public void doInsertTwoGirl(){
        girlService .insertTwo();
    }

所谓事务,就是在多条数据库增删改查中,如果某一条发生了错误,那么数据库会提供一个回滚的机制。

修改数据库表结构为
数据库表结构
数据库表结构

这样就可以保证只有2条数据同时插入成功时,才是真的插入成功,否则会回滚到未插入之前的状态。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容