SpringBoot入门

Part1. SpringBoot的介绍和快速入门

一. 介绍

 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

二. 优点

 1.创建独立的Spring应用;
 2.内嵌Tomcat, 无需部署WAR文件;
 3.简化MAVEN依赖配置;
 4.自动配置Spring, 快速构建项目和集成新技术;
 5.SpringBoot使监控变得简单(项目自带监控)

三. 不足

 1.坑多, 文档少;
 2.版本迭代速度快;
 3.SpringBoot应用喜欢把配置都写在代码中, 有时会带来混乱;

四. 应用场景

 1.web项目;
 2.微服务;
 3.Spring应用;

五. 快速入门

1. 创建一个MAVEN项目(jar)
这里写图片描述
这里写图片描述
注意: 创建spring boot应用通用方法是配置pom.xml, 将项目的父项目定义为spring-boot-starter-parent, 但是在真正的开发中, 往往模块的父项目是需要自己定义的, 而maven的pom只允许一个存在, 所有以后会学习如何避免使用spring-boot-starter-parent.

2. 引入web依赖
① 去maven中央仓库查找spring-boot-starter-web的依赖:
这里写图片描述
这里写图片描述
这里写图片描述
② 添加到pom.xml中
这里写图片描述
然后你会发现, springMVC需要的jar包都已经添加进来:
这里写图片描述

3. 创建Cotroller
这里写图片描述

4. 创建启动类
 spring boot应用不需要部署到tomcat上, 它内嵌web容器, 通常需要一个名为*Application的Java启动入口类, 类中有一个main方法. 需要在类上加上springboot的注解@SpringBootApplication, 此注解是spring boot的核心注解, 主要目的是开启自动配置.
注意:
 启动类只扫面它同级类或者同级包下的类!!!(在此吃了不少亏)
这里写图片描述
run(arg1, arg2)方法的两个参数:
  arg1:  启动类.class
  arg2:  main的参数

5. 启动springboot应用
 以java application的方式运行上面启动类的main方法.
这里写图片描述

6. 浏览器访问
这里写图片描述

Part2. SpringBoot的基本配置

一. 配置文件的种类

1. application.properties类型的配置文件
 配置举例如下:

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

2. application.yml类型的配置文件
 配置举例如下:

server: 
    port: 8081
    context-path: /demo

注意:
 更推荐使用 *.yml文件配置, 更加简洁; 但是! 属性和属性值之间必须有一个空格!!!!
(而且我在eclipse中以这种方式配置的时候, 开头必须是顶格, 并不能使用tab键排版, 不然会报错; 但是使用idea配置的时候就可以, 而且idea还有提示. 什么情况)

二. Spring Boot的属性注入

1.基本类型的属性注入
 方式如下:
  ① 在application.yml中添加:

id: 10
name: 张三

  ② 在Controller中使用@Value取值:

@Value(“${id}”)
private Integer id;
@Value(“${name}”)
private String name;

2.对象类型的属性注入
 方式如下:
  ① 在application.yml中添加:

user: 
    id: 10
    name: 张三

  ② 创建User实体类, 使用@ConfigurationProperties注解修饰此实体类:

@Component
@ConfigurationProperties(prefix=”user”)
public class User{
    private Integer  id;
    private String  name;
    GET/SET..
}

  ③ 在pom.xml中添加依赖:

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

  ④ 在Controller中注入对象属性:

   @RestController
   public class HelloWorldController {      
      @Autowired
      private User user;
      @RequestMapping(value="/")
      public Object demo(){
            return user;
      }
   }

3.如何来回切换配置文件?
 需求:
  开发环境: application-develop.yml
  生产环境: application-product.yml
 步骤:
 ①创建application-develop.yml和application-product.yml两个文件;
 ② 创建application.yml文件, 在此总配置文件中对不同生产环境的配置文件进行调度使用, 就拿application-develop.yml举例:

spring: 
    profiles: 
        active: develop

此时使用的就是开发环境下的配置.

Part3. Controller的使用

一. @Controller和@RestController注解

这里写图片描述
总得来说:
 @RestController = @Controller + @ResponseBody
 返回的是JSON字符串.

小提示:
 spring boot底层用JSON工具是jackson. 如何配置使用fastjson以后会说的.

问:

 既然@RestController返回的是JSON字符串, 那么如果我想要返回视图名称,从而跳转到相应页面, 那该怎么办呢?

答:

 spring boot当然也可以使用@Controller注解了.
 ① 需要在pom.xml中添加依赖:

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

 ② 在resources下创建templates文件夹
 ③ 在resources/templates/下创建index.html
 ④ 在Controller中返回”index”即可跳转到index.html页面

二.@RequestMapping和GetMapping、PostMapping、PutMapping、DeleteMapping的瓜葛

 为了符合RESTful风格的请求url, 我们需要用不同的请求方式,主要有:GET, POST, PUT, DELETE.
 ★ GET 用于获取数据
 ★ POST用于添加数据
 ★ PUT用于修改数据
 ★ DELETE用于修改数据

例如:
这里写图片描述

1. @RequestMapping
有属性:
  value 请求路径
  method 请求方式
例如:

@RequestMapping(value=”/user”, method=RequestMethod.GET)

2. @GetMapping
它是一个组合注解;

@GetMapping(“/user”)
就相当于:
@RequestMapping(value=”/user”, method=RequestMethod.GET)

两者的效果是一模一样的.
@PostMapping、@PutMapping、@DeleteMapping道理同上.

Part4. 操作数据库

一. 什么是JPA?

JPA(Java Persistence API) 定义了一系列java对象持久化的标准(规范).
目前实现了这一规范的产品有: Hibernate、TopLink等.

二. RESTful API的设计

通过实现一下五个接口, 来了解spring boot如何操作数据库.
这里写图片描述

三. 实现步骤

1.在pom.xml中添加两个依赖

        <!-- 引入jpa依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- 引入mysql依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

2. 在application.yml中配置数据库信息

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

注:
 ★ show-sql: 是否打印sql语句
 ★ ddl-auto属性的意义在于表的生成方式, 可选值有:
  ① create 每次都创建新的表(如果存在, 删掉,再创建新的)
  ② create-drop 应用停止时删除表
  ③ update 若表不存在,则创建; 已存在, 则使用该表
  ④ none 什么也不做
  ⑤ validate 验证类中的属性和表中的字段是否一致

3. 创建实体类

@Entity(name="user_info")
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    private String name;
    get/set...
}

 ★ @Entity表明此类对应数据库中的一张表, 属性name就是表名.
 ★ @Id表明此属性是主键
 ★ @GeneratedValue设置主键的维护方式(此处是自增)

若此时运行启动类, 则会发现数据库中多了一张名为user_info的表.

4. 编写Mapper接口

package online.bendou.springboot.demo.mapper;

import online.bendou.springboot.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserMapper extends JpaRepository<User, Integer>{

}

注:
 Mapper接口继承JpaRepository <T,Serializable.> < T , S e r i a l i z a b l e . > <script type="math/tex" id="MathJax-Element-1"> </script>
  参数1: 此Mapper接口对应的实体Bean;
  参数2: 该实体Bean的主键的类型;

5. 编写Controller
注意:
 请求方式要实现上面表格中的RESTful风格的API设计!

@RestController
public class HelloWorldController {

    @Autowired
    private UserMapper userMapper;

    /**
     * 获取用户列表GET
     */
    @GetMapping("/user")
    public List<User> getAll(){
        return userMapper.findAll();
    }

    /**
     * 添加用户POST
     */
    @PostMapping("/user")
    public String add(User user){
        userMapper.save(user);
        return "ok";
    }

    /**
     * 通过id查询用户GET
     */
    @GetMapping("/user/{id}")
    public User findById(@PathVariable("id") Integer id){
        User one = userMapper.findOne(id);
        return one;
    }

    /**
     * 通过id修改用户PUT
     */
    @PutMapping("/user/{id}")
    public String update(User user){
        userMapper.saveAndFlush(user);
        return "ok";
    }

    /**
     * 通过id删除用户DELETE
     */
    @DeleteMapping("/user/{id}")
    public String delete(@PathVariable("id") Integer id){
        userMapper.delete(id);
        return "ok";
    }

}

6. 使用POSTMAN插件进行测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值