767-2小时学会Spring Boot

http://www.imooc.com/learn/767

简介:Spring Boot是用来简化Spring应用初始搭建以及开发过程的全新框架,被认为是Spring MVC的“接班人”,和微服务紧密联系在一起。通过本门课程的学习,你将学会如何使用Spring Boot快速构建应用程序,初步领略Spring Boot的魅力!其后续课程《Spring Boot进阶之Web进阶》.此课专为IT屌丝男程序员打造,女生请慎入! 讲师实战课程《Spring Boot微信点餐系统》 http://coding.imooc.com/class/117.html 《Spring Cloud微服务实战》 http://coding.imooc.com/class/187.html 均已上线

项目源码:https://gitee.com/liaoshixiong/girl

第1章 SpringBoot介绍

1-1 SpringBoot介绍和课程安排

1-1 SpringBoot介绍

SpringBoot优点

编码,部署,配置,监控变得更加简单

SpringBoot和SpringMVC的关系

SpringBoot是SpringMVC的升级版,两者没有必然的联系

SpringBoot的特点

1. 化繁为简,简化配置
2. 备受关注,是下一代框架
3. 微服务的入门级微框架

微服务

SpringBoot => SpringCloud => 微服务

课程目录

1. 第一个SpringBoot程序
2. 自定义属性配置
3. Controller的使用
4. spring-data-jpa
5. 事务管理

《项目管理利器maven》
《Spring入门篇》

注意

1. 具备必要的前置知识
    --利用maven构建项目
    --Spring注解
    --RESTful API
2. 可以不需要先去学SpringMVC
3. Java、Maven等版本保持一致

第2章 第一个SpringBoot应用

快速构建第一个SpringBoot应用

2-1 第一个SpringBoot应用

# 查看Java版本
java -version
# 查看Maven版本
mvn -version

下载IDEA Ultimate

阿里云Maven镜像配置:

<!-- settings.xml -->
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <ur1>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

启动SpringBoot项目:

# /girl
mvn spring-boot:run
# /girl
mvn install
java -jar target/girl.jar

第3章 项目属性配置

项目属性配置的各种方法

3-1 项目属性配置

属性配置

# application.properties
server.port=8888
server.context-path=/girl
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc

加载配置属性注解

  • 单属性

    cupSize: B
    age: 18
    content: "cupSize: ${cupSize}, age: ${age}"
    @Value("${cupSize}")
    private String cupSize;
    @Value("${age}")
    private Integer age;
    @Value("${content}")
    private String content;
  • 组属性

    girl: 
        cupSize: B
        age: 18
    @Component
    @ConfigurationProperties(prefix = "girl")
    public class GirlProperties {
        private String cupSize;
        private Integer age;
        // ...getter and setter...
    }
    @Autowired
    private GrilProperties girlProperties;

多环境配置:

# application.yml
spring:
    profiles: 
        active: dev
# application-dev.yml 开发环境
cupSize: B
# application-prod.yml 生产环境
cupSize: F
# 编译
mvn install
# 启动
java -jar target/girl.jar --spring.profiles.active=prod

第4章 Controller的使用

介绍SpringBoot项目中Controller的使用

4-1 Controller的使用

注解 说明
@Controller 处理http请求
@RestController Spring4之后新的注解,原来返回JSON需要@ResponseBody配合@Controller
@RequestMapping 配置url映射

模板使用

<!-- pom.xml -->
<dependency>
    <groupId>org.springf ramework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- /resources/templates/index.html -->
<hi>hello Spring Boot</h1>
@RequestMapping(value="/helLo", method = RequestMethod.GET)
public String say() {
    return "index";
}

处理请求中的参数

注解 说明
@PathVariable 获取url中的数据
@RequestParam 获取请求参数的值
@GetMapping 组合注解
  1. @RestController相当于@ResponseBody与@Controller

  2. @RequestMapping(value={“/hi”, “/say”}, method=RequestMethod.GET)。value可以是个集合

  3. @RequestMapping可以用@GetMapping或@PostMapping代替,省去声明方法

  4. /luckymoney/hello/say/100

    @GetMapping(value=”/{id}/say”)

    @PathVariable(“id”) Integer id

  5. /luckymoney/hello/say?id=100

    @RequestParam(value=”id”, required=false, defaultValue=”0”) Integer id

第5章 数据库操作

SpringBoot中使用spring-data-jpa

5-1 数据库操作(上)

数据库操作

Spring-Data-Jpa -> MySQL

Spring-Data-JPA

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

Spring-Data-JPA就是对Hibernate的整合

RESTful API设计:

请求类型 请求路径 功能
GET /girls 获取女生列表
POST /girls 创建一个女生
GET /girls/id 通过id查询一个女生
PUT /girls/id clipbogu 通过id更新一个女生
DELETE /girls/id 通过id删除一个女生

步骤:

  1. 添加POM依赖

    <dependency>
        <groupId>org.springf ramework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
  2. 配置数据库信息和Spring-Data-JPA信息

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

    ddl-auto参数:

    参数 说明
    create 运行时自动创建表。每次程序运行都会创建空表,如果已存在则会先删除表
    create-drop 应用停下来的时候就会把表删除
    none 不做任何操作。
    update 运行时自动创建表。当已存在表则不会操作
    validate 验证实体属性是否和表结构一致,不一致则会报错。
  3. 创建实体类

    @Entity
    public class Girl {
        @Id
        @GenerateValue
        private Integer id;
        private String cupSize;
        private Integer age;
        // 无参构造函数。必须要有,否则报错
        // ...getter and setter...
    }
  4. 运行程序

5-2 数据库操作(下)

  1. Dao

    public interface GirlRepository extends JpaRepository<Girl, Integer> {
        /**
         * 通过年龄查询
         */
        public List<Girl> findByAge(Integer age);
    }
  2. Controller

    @RestController
    public class GirlController {
        @Autowired
        private GirlRepository girlRepository;
        /**
         * 查询所有女生列表
         */ 
        @GetMapping(value = "/girls")
        public List<Girl> girlList() {
            return girlRepository.findALL();
        }
        /**
         * 添加一个女生
         */ 
        @PostMapping(value = "/girls")
        public Girl girlAdd(@RequestParam("cupSize") String cupSize,
                            @RequestParam("age") Integer age) {
            Girl girl=new Girl();
            girl.setCupSize(cupSize);
            girl.setAge(age);
            return girlRepository.save(girl);
        }
        /**
         * 查询一个女生
         */ 
        @GetMapping(value = "/girls/{id}")
        public Girl girlFindOne(@PathVariable("id") Integer id) {
            return girlRepository.findOne(id);
        }
        /**
         * 更新一个女生
         */ 
        @PutMapping(value = "/girls/{id}")
        public Girl girlUpdate(@PathVariable("id") Integer id,
                                @RequestParam("cupSize") String cupSize,
                                @RequestParam("age") Integer age) {
            Girl girl = new Girl();
            girl.setId(id);
            girl.setCupSize(cupSize);
            girl.setAge(age);
            return girlRepository.save(girl);
        }
        /**
         * 删除一个女生
         */ 
        @DeleteMapping(value = "/girls/{id}")
        public void girlDelete(@PathVariable("id") Integer id) {
            girlRepository.delete(id);
        }
        /**
         * 通过年龄查询女生列表
         */
        @GetMapping(value = "/girls/age/{age}")
        public List<Girl> girlListByAge(@PathVariable("age") Integer age) {
            return girlRepository.findByAge(age);
        }
    }

注:

  • Post使用form-data

  • Put使用x-www-form-urlencoded

第6章 事务管理

演示了SpringBoot中使用事务的简单例子

6-1 事务管理

@Service
public class GirlService {
    @Autowired
    private GirlRepository girlRepository;
    /**
     * 保存两个女生信息
     */
    @Transactional(rollbackFor = Exception.class)
    public void saveTwo() {
        Girl girlA = new Girl();
        girlA.setCupSize("A");
        girlA.setAge(18);
        girlRepository.save(girlA);

        Girl girlB = new Girl();
        girlB.setAge(19);
        girlB.setCupSize("B");
        girlRepository.save(girlB);
    }
}
@Autowired
private GirlService girlService;

@PostMapping(value="/girls/two")
public void saveGirlTwo(){
    girlService.saveTwo();
}

只有查询的时候不加事务,其它任何操作都要加事务。

进行添加操作的时候,如果要求,要么全部添加成功,要么全部失败

@Transactional事务处理注解的使用方法,在serive进行事务处理

事务失败原因:数据库默认为MyISAM不支持事物回滚,需要设置为InnoDB

解决方法: 改为INNODB

更改语句:

ALTER TABLE girl ENGINE=INNODB;

事务失败原因:SpringBoot2.*实体的默认引擎为MyISAM不支持事务,需要配置引擎为为innoDB
解决方法:在application.yml添加配置

spring: 
    jpa: 
        database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

第7章 课程回顾

回顾课程内容

7-1 课程回顾

  1. SpringBoot介绍
  2. 安装IDEA、Maven并初始化SpringBoot工程
  3. 配置文件、注入属性
  4. Controller的使用及注解
  5. 数据库增删改查

下门课程介绍:

  1. @Valid表单验证
  2. AOP统一异常处理
  3. spring-data-jpa8.用缓存应对高并发
  4. Jdbc Template
  5. Mybatis
  6. Redis
  7. MongoDB

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tuyrk@qq.com

文章标题:767-2小时学会Spring Boot

文章字数:2k

本文作者:神秘的小岛岛

发布时间:2019-06-05, 23:54:25

最后更新:2019-11-05, 19:15:03

原始链接:https://www.tuyrk.cn/imooc/767-2Hours-SringBoot/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏