文档章节

SpringBoot 学习一:Hello world

TSMYK
 TSMYK
发布于 2018/09/25 22:11
字数 1391
阅读 182
收藏 5

本文将从以下几个方面介绍:

前言

HelloWorld 

读取配置文件

例子(CURD)

前言

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。(百度百科)

通过 SpringBoot,不再需要写很多的配置文件了, 比如 web.xml , bean.xml 等,它使用“习惯大于配置”的原则;可以简化我们的开发工作,

HelloWorld

下面就来学习一下怎么使用,搭建环境就不写了:

# HelloController

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

@RestController
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping("/")
    public String hello(){
        return "hello world";
    }
}

通过 @RestController 注解来标识它是一个控制层,它是 @Controller 和 @ResponseBody 组合;通过 @RequestMapping 注解来映射请求,之后,启动应用程序,是通过 main 方法来启动的:

#SpringbootApplication

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyspringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyspringbootApplication.class, args);
    }
}

通过 @SpringBootApplication 注解来启动 SpringBoot项目,启动后,在浏览器输入 http://localhost:8080/hello/ 即可:

如果要返回页面也是很方便的,把 @RestController 注解换为 @Controller,之后再返回到对应的页面即可。如下所示:

首先模拟一个服务层提供数据:

# PersonService 

import com.google.common.collect.Lists;
import myspringboot.myspringboot.pojo.Person;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
public class PersonService {
    private List<Person> persons = Lists.newArrayList();

    public List<Person> queryPersons(){
        persons.add(new Person(1, "zhangsan", "java", 24));
        persons.add(new Person(2, "lisi", "python", 25));
        persons.add(new Person(3, "wangwu", "C++", 22));
        persons.add(new Person(4, "zhaoliu", "Redis", 24));
        persons.add(new Person(5, "jqjq", "C", 23));
        return persons;
    }
}

通过 @Component 注解把该 bean 注入到Spring 容器中去,即配置bean,

之后模拟控制层去取数据返回到页面显示:

#Person2Controller 

import myspringboot.myspringboot.pojo.Person;
import myspringboot.myspringboot.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;

@Controller
public class Person2Controller {

    @Autowired
    private PersonService personService;

    @RequestMapping(value = "/queryPersons")
    public String queryPersons(ModelMap map){
        List<Person> persons = personService.queryPersons();
        map.addAttribute("persons", persons);
        return "index";
    }
}

index.html 代码如下:

<body>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>工作</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="person:${persons}">
                <td th:text="${person.id}">中</td>
                <td th:text="${person.name}">中</td>
                <td th:text="${person.age}">中</td>
                <td th:text="${person.job}">中</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

之后启动应用程序,浏览器输入:http://localhost:8080/queryPersons 即可看到数据:

读取配置文件

在 SpringBoot 项目中,有一个默认的配置文件 application.properties,如果需要配置相关数据,在该文件中配置即可;如果某个 POJO 对象的值需要配置在配置文件中,则可以通过如下方式来获取:

首先需要定义一个 POJO 对象:

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;


@Getter
@Setter
@ToString
@Component
public class BlogProperties {

    @Value("${blog.name}")
    private String name;

    @Value("${blog.title}")
    private String title;

    @Value("${blog.desc}")
    private String desc;

    @Value("${blog.content}")
    private String content;

    @Value("${blog.author}")
    private String author;

    @Value("${blog.date}")
    private String date;

}

同样, 通过 @Component 注解注入到 Spring 容器中去,之后,可以通过 @Value("${xxx}") 来获取配置文件中对应的值了。在 application.properties,配置文件中添加如下信息:

blog.name=java
blog.title=java core
blog.desc=java python redis
blog.content=java java java java java 
blog.author=tsmyk0715
blog.date=2018-9-23

通过单元测试下:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MyspringbootApplication.class)
public class BlogPropertiesApplicationTests {

    @Autowired
    private BlogProperties blog;

    @Test
    public void testBlogProperties(){
        System.out.println(blog.getName());
        System.out.println(blog.getContent());
        System.out.println(blog.getAuthor());
        System.out.println(blog);
    }

// 结果
java
java java java java java 
tsmyk0715
BlogProperties(name=java, title=java core, desc=java python redis, content=java java java java java , author=tsmyk0715, date=2018-9-23)
}

例子(CURD)

接下来看下一个增删改查的例子:

1. 首先定义一个 POJO 对象,共 四个属性:

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Person implements Serializable
{
    private int id;
    private String name;
    private String job;
    private int age;
}

之后模拟控制层来接受请求,返回数据:

@RestController
@RequestMapping("/persons")
public class PersonController {

    private Map<Integer, Person> persons = Maps.newHashMap();

    /**
     * 查询所有的用户
     * @return
     */
    // 处理 /persons/ 的请求, GET 请求表示获取操作
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public List<Person> getPersons(){
        return new ArrayList<>(persons.values());
    }

    /***
     * 添加用户
     * @param person
     * @return
     */
    // 处理 /persons/ 的请求, POST 请求表示添加操作
    @RequestMapping(value = "/", method = RequestMethod.POST)
    public String addPerson(@ModelAttribute Person person){
        persons.put(person.getId(), person);
        return "success";
    }

    /**
     * 根据ID查询用户
     * @param id
     * @return
     */
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public Person getPersonById(@PathVariable int id){
        return persons.get(id);
    }

    /**
     * 更新用户信息
     * @param id
     * @param person
     * @return
     */
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
    public String updatePerson(@PathVariable int id, @ModelAttribute Person person){
        Person oldPerson = persons.get(id);
        oldPerson.setName(person.getName());
        oldPerson.setAge(person.getAge());
        oldPerson.setJob(person.getJob());
        persons.put(id, oldPerson);
        return "success";
    }

    /**
     * 删除用户
     * @param id
     * @return
     */
    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    public String deletePerson(@PathVariable int id){
        persons.remove(id);
        return "success";
    }

}

接下来,进行单元测试,使用的使用 Spring 提供的  Mock 工具类进行测试:

import myspringboot.myspringboot.web.PersonController;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mock.web.MockServletContext;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MockServletContext.class)
@WebAppConfiguration
public class PersonApplicationTests {

    private MockMvc mvc;

    @Before
    public void setup(){
        mvc = MockMvcBuilders.standaloneSetup(new PersonController()).build();
    }

    @Test
    public void testPerson() throws Exception{
        RequestBuilder request = null;
        // 第一次查询,为空
        request = MockMvcRequestBuilders.get("/persons/");
        mvc.perform(request)
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content()
                        .string(Matchers.equalTo("[]")));


        // post 添加一个用户
        request = MockMvcRequestBuilders.post("/persons/")
                .param("id", "1")
                .param("name", "tsmyk0715")
                .param("age", "25")
                .param("job", "java");
        mvc.perform(request)
                .andExpect(MockMvcResultMatchers.content()
                        .string(Matchers.equalTo("success")));

        request = MockMvcRequestBuilders.get("/persons/1");
        mvc.perform(request)
                .andDo(MockMvcResultHandlers.print());

        // 添加另一个用户
        request = MockMvcRequestBuilders.post("/persons/")
                .param("id", "2")
                .param("name", "tsmyk")
                .param("age", "26")
                .param("job", "python");
        mvc.perform(request)
                .andExpect(MockMvcResultMatchers.content()
                        .string(Matchers.equalTo("success")));

        // 查询所有用户
        request = MockMvcRequestBuilders.get("/persons/");
        mvc.perform(request)
                .andDo(MockMvcResultHandlers.print());


        // 删除用户
        request = MockMvcRequestBuilders.delete("/persons/1");
        mvc.perform(request)
                .andExpect(MockMvcResultMatchers.content()
                        .string(Matchers.equalTo("success")));

        request = MockMvcRequestBuilders.get("/persons/1");
        mvc.perform(request)
                .andDo(MockMvcResultHandlers.print());
    }
}

以上就是 SpringBoot 的一个简单使用。

© 著作权归作者所有

TSMYK
粉丝 101
博文 84
码字总数 207009
作品 0
成都
程序员
私信 提问
《Spring Boot 实战:从0到1》第2章 快速开始Hello World

第2章 快速开始Hello World 大约20年前,程序员们使用“企业级Java Bean”(EJB)开发企业应用,需要配置复杂的XML。在二十世纪初期,新兴Java技术——Spring,横空出世。使用极简XML和POJO(...

程序员诗人
2017/08/01
0
0
Docker 快速发布SpringBoot项目

以Docker为容器以SpringBoot为基础发布微服务或者web已经成为一种比较便捷的方式。本节来实现由Docker Git来快速发布一个基于SpringBoot的web项目。 默认已经完成了SpringBoot的hello world...

MrPei
04/15
152
0
为springboot项目添加springboot-admin监控

我们知道spring-boot-actuator暴露了大量统计和监控信息的端点,spring-boot-admin 就是为此提供的监控项目。 先来看看大概会提供什么样的功能 从图中可以看出,主要内容都是由spring boot a...

ryan-miao
2018/06/12
0
0
SpringBoot之旅第一篇-初探

一、SpringBoot是什么? 微服务,应该是近年来最火的概念,越来越多的公司开始使用微服务架构,面试中被问到的微服务的概率很高,不管对技术的追求,还是为了进更好的公司,微服务都是我们开...

花漾年华
05/10
45
0
SpringBoot 究竟是如何跑起来的?

不得不说 SpringBoot 太复杂了,我本来只想研究一下 SpringBoot 最简单的 HelloWorld 程序是如何从 main 方法一步一步跑起来的,但是这却是一个相当深的坑。你可以试着沿着调用栈代码一层一层...

编程SHA
03/11
90
0

没有更多内容

加载失败,请刷新页面

加载更多

框架和库的区别

框架和库的区别 框架:是一套完整的解决方案;对项目的侵入性较大,项目如果需要更换框架,则需要重新架构整个项目。 node 中的 express; 库(插件):提供某一个小功能,对项目的侵入性较小...

庭前云落
9分钟前
2
1
基于 Dawn 进行多工程管理

1. 简述 当一个项目中子工程较多时,就会面临「单仓库(Monorepo)」还是「多仓库(Multirepo)」管理的问题。当然两个方式各有优缺点,而我们选择多工程单 Repo 时,能够带来一些管理上的简...

阿里云官方博客
9分钟前
1
0
Joomla 4具有可自定义的HTML电子邮件模板

Joomla 4大约每个月都会发布一个Alpha版本。上个月,我们得到了一个新的管理模板。 Joomla 4的最新版本是Alpha 12。 该版本的主要新特性是可定制的电子邮件模板。您将能够控制从您的网站发送...

六艺网络专注于Joomla
13分钟前
1
0
Idea配置

配置文件idea64.exe.vmoptions -Xms128m, 16 G 内存的机器可尝试设置为 -Xms512m (设置初始的内存数,增加该值可以提高 Java 程序的启动速度。 ) -Xmx750m, 16 G 内存的机器可尝试设置为 ...

行者终成事
15分钟前
2
0
大小仅1MB!超轻量级的人脸识别模型火爆Github

项目地址:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB 近日,用户Linzaer在Github上开源了一款适用于边缘计算设备、移动端设备以及 PC 的超轻量级通用人脸检测...

编程资源库
17分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部