SpringBoot初识

SpringBoot初识

SpringBoot初识

2.常见面试题

  1. springboot的优点有哪些?
  2. springboot中注解有哪些?

3.本章重点

  1. 使用IDEA快速搭建SpringBoot程序
  2. 使用Maven搭建SpringBoot整合MyBatis
  3. lombok的使用
  4. springboot项目热部署

4.内容详解

4.1 SpringBoot简介

4.1.1 spring优缺点分析

4.1.1.1 Spring的优点分析

​ Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。

4.1.1.2 Spring的缺点分析

​ 虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。

​ 所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。

​ 除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

4.1.2 SpringBoot能否解决上述问题,什么是springboot?

​ SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

​ springboot是spring生态圈的一个轻量级框架,换句话说springboot就是spring,是spring的一个衍生版本 springboot是对spring的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行切换,全身心投入到业务逻辑中,从而提高开发效率,缩短项目开发周期。
​ springboot其实就是集成好了很多框架的spring,直接根据springboot所提供的标准化编写配置即可,不再需要编写xml配置文件,springboot官方给出的解释就是干掉xml文件,使用Java代码进行编写配置

4.1.3 SpringBoot的优点

  • 内嵌Tomcat或Jetty等Servlet容器;
  • 提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
  • 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求,尽可能自动配置Spring容器;
  • 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
  • SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式

4.1.4 SpringBoot核心功能

  • 起步依赖

    起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西合在一起即支持某项功能。

    起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

  • 自动配置

    Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

4.2 使用IDEA快速搭建SpringBoot程序

  1. 创建项目,选择Spring Initializr

  2. 填写组织名和项目名

  3. 修改application.properties,修改端口号和部署名

    server.port=8087
    server.servlet.context-path=/qy105/
    
  4. 在resources的templates目录下,新建一个 index.html,打印输出

  5. controller中编写简单代码demo

    @Controller
    public class UserController {
        @RequestMapping("getUser")
        public String getUser() {
            System.out.println("request in");
            return "index";
        }
    }
    
  6. 打成jar包,直接在命令行运行springboot,用cmd命令行或者XShell都可

  7. target目录删除,达成war包也可直接运行

  8. 简单的demo程序完成

4.3 手动搭建SpringBoot整合MyBatis

4.3.1 程序搭建

  1. 搭建maven程序,pom中引入对应依赖(直接从上个项目中拷贝),一个个解释pom文件中的起步依赖,结合上述的文档描述起步依赖其实是一组坐标的打包。

     <properties>
            <!--<maven.compile.version></maven.compile.version>-->
            <java.version>11</java.version>
        </properties>
    
        <!--父子工程,所有的springboot项目都必须要继承spring-boot-starter-parent
           其实其内部帮我们定义好了一部分的版本的控制-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.0.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <dependencies>
            <!--thymeleaf的启动依赖,thymeleaf是一个前端模板引擎,它可以完全替代JSP -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <!--web功能的启动依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--springboot集成junit测试功能的启动依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
  2. 编写启动类,注意启动类必须位于最上层

    @SpringBootApplication
    public class WebApplication {
        public static void main(String[] args) {
            SpringApplication.run(WebApplication.class, args);
        }
    }
    
  3. 编写controller以及配置文件,配置端口号和部署名,和templates目录中存放的是index.html.

  4. 注意点,templates名字是默认的,名字要保持一致,目前没有结合后台数据库的程序已经搭建完毕,可以直接运行,与第一个demo程序一样。

  5. 添加 MyBatis的启动依赖,通过名字看出来,这个启动依赖是MyBatis自己开发的,而不是spring体系中的项目,添加数据源的坐标,如果不添加版本号会报错,因为是外来者,父级工程里面并没有定义版本号因此需要添加MyBatis的版本号,同样的,数据库连接池必须添加版本号。数据库连接驱动可以重写父类的版本号。

     		<!--MyBatis与springboot集成的启动依赖-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
            </dependency>
    
      		   <!--druid数据库连接池的依赖-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.20</version>
            </dependency>
    
    		<!--添加数据库连接驱动的依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <!--可以重写父类的版本号-->
                <version>5.1.26</version>
            </dependency>
    
    		<!--lombok的依赖,快速生成getter setter方法,不需要version,因为父类工程中有依赖-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
  6. 开始编写controller,service,model,mapper,编写model的时候使用 lombok注解,实体类必须实现序列化,使用Lombok,Idea必须安装插件,两个步骤使用Lombok,帮我们解决了一些没有技术含量的代码编写

    @Setter
    @Getter
    @ToString
    @EqualsAndHashCode
    public class Account implements Serializable {
        private Integer accId;
        private String accName;
        private String accMoney;
    }
    
  7. 编写配置文件,先使用的是注解方式,一步步调试

    #配置的是服务端口,服务名的信息
    server.port=8087
    server.servlet.context-path=/qy105/
    #配置数据源连接参数
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/spring01
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    
  8. 编写mapper接口,先使用注解格式的,再使用xml格式的

    @Mapper
    public interface UserMapper {
        /**
         * 获取所有账户
         * @return
         */
        @Select("select * from account")
        List<Account> getAllAccount();
    }
    
  9. controller中要想把account打印出来,配置文件必须把驼峰标志启动,使用xml必须把注解的信息去除,以及需要添加别名

    #sql映射文件的位置
    mybatis.mapper-locations=classpath:mapper/*Mapper.xml
    #开启驼峰自动映射
    mybatis.configuration.map-underscore-to-camel-case=true
    #开启别名,给整个包起别名
    mybatis.type-aliases-package=com.qy105.aaa
    
  10. 把数据显示在页面上,也就是编写前端页面显示。

    Thymeleaf 是一个和FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎有如下优点:

    • Thymeleaf 在有网络和无网络的环境下皆可运行,它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式,当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。

    • Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。

    • . Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能

    • 使用thymeleaf需要添加

      <html xmlns:th="http://www.thymeleaf.org">
      
    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <table>
        <tr>
            <td>账户编号</td>
            <td>账户名</td>
            <td>账户余额</td>
        </tr>
        <tr th:each="user,index:${accList}">
            <td th:text="${index.count}"></td>
            <td th:text="${user.accName}"></td>
            <td th:text="${user.accMoney}"></td>
        </tr>
    </table>
    </body>
    </html>
    
  11. log的添加和使用,使用的是slf的log

    logging.file.name=demo.log
    

    Java代码中添加

    private static Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
    
  12. 小彩蛋 banner.txt位置放在 resource的路径下面

4.3.2 Lombok使用

自动生成get set 方法,减少了没有技术含量的代码的编写

@Setter
@Getter
@ToString(exclude = {"accId","accName"})
@EqualsAndHashCode
@AllArgsConstructor //带有所有参数的构造方法
@NoArgsConstructor //无参的构造方法
public class Account implements Serializable {
    private Integer accId;
    private String accName;
    private String accMoney;
}

4.3.3 热部署

作用:修改html页面会自动加载,修改java代码会自动重启项目

  1. 在pom文件中添加

          <!--热部署的配置依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
    
  2. 修改setting 的配置,勾选 build project automatically

  3. 快捷键,CTRL,shift,alt,+ /

5.总结--留给大家喽

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://championmi.cn/archives/springboot初识

Buy me a cup of coffee ☕.