eclipse下第一个spring-boot

eclipse下创建spring-boot参考文章http://blog.csdn.net/clementad/article/details/51334064

  1. 按着以上文章创建好后, 目录结构如下:


    image.png
  2. 以上HelloController.java是自己创建的内容是:
package com.lxf;

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

@RestController
public class HelloController {
    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public String say()
    {
        return "spring boot hello world";
    }
}
  1. 在MyfirstSpringBootApplication文件中main方法右键->run as -> Spring Boot App,就可以把spring-boot启动, 也就意味着spring-boot中的tomcate会自动启动, 默认端口是8080, 注意如果有占用会启动失败;
  2. 启动成功后,在控制前会看到类似以下的提示,代表8080端口已启用
    image.png

    5.访问地址: http://localhost:8080/hello
    image.png

spring-boot的启动方式

  1. 在MyfirstSpringBootApplication文件中main方法右键->run as -> Spring Boot App. 关闭spring-boot,在控制前右上侧有红色的关闭按钮;
  2. 进入项目目录
cd ~/workspaceEE/myfirst-spring-boot/ 
mvn spring-boot:run
  1. 进入项目目录
cd ~/workspaceEE/myfirst-spring-boot/ 
mvn install
cd target

后会看到在target目录下多了一个 myfirst-spring-boot-0.0.1-SNAPSHOT.jar, 然后使用java命令启动

java -jar myfirst-spring-boot-0.0.1-SNAPSHOT.jar

属性配置

  • 目录存放src/main/resources/application.yml, 配置说明如下:
server: 
  port: 8089
  context-path: /gril
cupSize: B
age: 19
content: "cupSize = ${cupSize}, age = ${age}" //在配置文件中引用配置文件自身的属性

girl:  //定义公有属性,该配置需要新建 GirlProgerties.java类配合使用
  age: 199
  heigh: 19.99  
  • GirlProgerties.java 类配合属性girl的子属性使用
package com.lxf;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "girl") //该配置对应application.yml配置文件中的girl属性
public class GirlProgerties {
    private Integer age;
    private float height;
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public float getHeight() {
        return height;
    }
    public void setHeight(float height) {
        this.height = height;
    }   
}
  • 在Controller中获取application.yml配置文件的属性
package com.lxf;
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;
/**
 * 获取application.yml属性内容
 * @author lxf
 */
@RestController
public class HelloController {
    @Value("${cupSize}")
    private String cupSize;
    @Value("${age}")
    private int age;
    @Value("${content}")
    private String content;
    @Autowired
    private GirlProgerties girlProgerties;
    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public String say()
    {
        return cupSize + " " +age + content + girlProgerties.getAge();
    }
}
  • 开发环境 配置 application-develop.yml, 注意,服务器端口配置为8088
server: 
  port: 8088
  context-path: /gril
cupSize: A
age: 18
content: "cupSize = ${cupSize}, age = ${age}"

girl:
  age: 188
  heigh: 18.8  
  • 生产环境 配置 application-develop.yml, 注意,服务器端口配置为8089
  • 公共配置 application.yml, 调用 开发环境 的配置
spring: 
  profiles:
    active: develop
  • 根据以上第一种启动spring-boot方式启动, 开启8088端口开发环境
  • 感觉以上第三种启动方式, java -jar 带启动参数的方式启动,参数为生产环境配置
java -jar myfirst-spring-boot-0.0.1-SNAPSHOT.jar --spring.profiles.active=production
  • 以上两步分别启动了 开发环境8088, 和生产环境8089端口
  • 可以分别访问
http://localhost:8088/gril/hello
http://localhost:8089/gril/hello

Controller的使用

  • 常用注解


    image.png
  • 使用模板解析配合@Controller注解 使用
    控制器

package com.lxf;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@Controller
public class HelloController {
    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public String say()
    {
        return "index";
    }
}

pom.xml添加依赖

        <!-- 配置模板 -->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

在src/main/resources/templates中新增index.html

<h1>Hello Spring Boot</h1>

启动后访问: http://localhost:8088/gril/hello

配置两个url指向同一个控制器方法

    @RequestMapping(value={"/hello", "hi"}, method=RequestMethod.GET)
    public String say()
    {
        return cupSize + " " +age + content + girlProgerties.getAge();
    }

以上配置http://localhost:8088/gril/hellohttp://localhost:8088/gril/hi等效
同时@RequestMapping也可以作用在控制器上与springMvc用法一致

获取URL参数的注解

image.png
  • 接收参数一
    @RequestMapping(value="/hello/{id}", method=RequestMethod.GET)
    public String say(@PathVariable("id") Integer id)
    {
        return "id="+id;
    }

访问: http://localhost:8088/gril/hello/12, 输出结果 id=12

  • 接收参数二
    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public String say(@RequestParam(value="id", required=false, defaultValue="0") Integer myId)
    {
        return "id="+myId;

访问: http://localhost:8088/gril/hello/hello?id=123 , 输出: id=123

@RequestMapping(value="/hello", method=RequestMethod.GET)
@GetMapping(value="/hello") 和以上一行等效

使用数据库

  • pom.xml配置添加依赖
        <!-- 配置使用数据库 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.27</version>
        </dependency>
  • application.properties
server.port=8099
#DB Configuration:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=123456


#JPA Configuration:
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
  • Girl实体类
package com.lxf.model;

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

import org.springframework.stereotype.Component;

/**
 * gril实体类, 对应girl数据库
 * @author lxf
 */
@Entity
@Table(name="t_girl")
public class Girl {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    
    private Integer age;
    
    private String curSize;
    
    public Girl(){}

    public Integer getId() {
        return id;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public String getCurSize() {
        return curSize;
    }

    public void setCurSize(String curSize) {
        this.curSize = curSize;
    }   
}
  • 启动spring-boot会在数据库中自动创建 t_girl
  • 将application.properties配置
spring.jpa.hibernate.ddl-auto=update
  • 新建 GirlRepository接口操作数据库,相当与Dao
package com.lxf;

import com.lxf.model.Girl;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface GirlRepository extends JpaRepository<Girl,Integer> {
    /**
     * 自定根据年龄查询列表
     * @param age
     * @return
     */
    public List<Girl> findByAge(Integer age);
}
  • 新建GirlService
package com.lxf;

import com.lxf.model.Girl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;

@Service
public class GirlService {
    @Autowired GirlRepository girlRepository;

    /**
     * 使用@Transactional事务注解
     */
    @Transactional
    public void insertTwo()
    {
        Girl girlA = new Girl();
        girlA.setAge(36);
        girlA.setCurSize("A");


        girlRepository.save(girlA);

        Girl girlB = new Girl();
        girlB.setAge(38);
        girlB.setCurSize("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBb");
        girlRepository.save(girlB);
    }
}
  • 新建GirlController控制器
package com.lxf;

import com.lxf.model.Girl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 请求controller
 */
@RestController
public class GirlController {
    @Autowired
    private GirlRepository girlRepository;
    @Autowired GirlService girlService;

    /**
     * 查询女孩列表
     * @return
     */
    @GetMapping(value="/girls")
    public List<Girl> girlList()
    {

        return girlRepository.findAll();
    }
    @GetMapping(value = "/girls/{id}")
    public Girl girlFindOne(@PathVariable("id") Integer id)
    {
        return girlRepository.findOne(id);
    }
    /**
     * 新增女生
     */
    @PostMapping(value = "/girls")
    public Girl girlAdd(@RequestParam("cupSize") String cupSize,
                          @RequestParam("age") Integer age)
    {
        Girl girl = new Girl();
        girl.setAge(age);
        girl.setCurSize(cupSize);
        return girlRepository.save(girl);
    }

    /**
     * 更新女孩信息
     * @param id
     * @param cupSize
     * @param age
     * @return
     */
    @PutMapping(value = "/girls/{id}")
    public Girl girlUpdate(@PathVariable("id") Integer id,
                           @RequestParam("age") Integer age,
                           @RequestParam("cupSize") String cupSize
                           ){
        Girl girl = new Girl();
        girl.setId(id);
        girl.setCurSize(cupSize);
        girl.setAge(age);
        return girlRepository.save(girl);
    }

    /**
     * 删除女生信息
     * @param id
     */
    @DeleteMapping(value = "/girls/{id}")
    public void girlDel(@PathVariable("id") Integer id)
    {
        girlRepository.delete(id);
    }

    /**
     * 通过年龄查询列表
     * @param age
     * @return
     */
    @GetMapping(value = "/girls/age/{age}")
    public List<Girl> girlListByAge(@PathVariable("age") Integer age)
    {
        return girlRepository.findByAge(age);
    }

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

推荐阅读更多精彩内容