SpringBoot

一、SpringBoot 简介

  • SpringBoot:build anything、集成大量的第三方库配置、无容器的web应用程序体系结构、“零配置” out of the box
  • 优点:基于Spring、简化编码、简化配置、简化部署、简化监控

二、SpringBoot 快速入门

  • IDEA 构建 SpringBoot 项目并启动测试
    • 打开 IDEA 选择新建 Spring Initializr 项目
    • spring boot1.png
    • 点击下⼀步继续创建,设置项目名,包名,语言描述等信息(特别注意项目名在IDEA 中必须小写):
    • spring boot2.png
    • 下⼀步开发工具里面选择热部署和lombok
    • spring boot3.png
    • web里面选择Spring Web
    • spring boot4.png
    • 设置项目的路径然后点击完成
    • spring boot5.png
    • SpringBoot项目的基本目录结构生成,第⼀时间选择自动导入
    • spring boot6.png
    • 在这个目录下新增一个类
    • spring boot7.png
    • 新增类
    • spring boot8.png
    • 分别新增包和类controller.HelloController
    • spring boot9.png
    • 生成类后编写代码
    • spring boot10.png
    • 打开自动生成的类中的main方法
    • spring boot11.png
    • 选择运行该main方法
    • spring boot12.png
    • 启动项目
    • spring boot13.png
    • 打开浏览器输入地址信息http://localhost:8080/并运行
    • spring boot14.png
    • 到此为止Spring Boot项目搭建完毕

三、SpringBoot的项目结构

  • pom文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
        https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <!-- 设置当前项⽬的⽗项⽬为spring-boot-starter-parent 标记当前项⽬为⼀个springboot的项⽬版本为2.2.6 -->
     <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.2.6.RELEASE</version>
       <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <groupId>com.qfedu</groupId>
     <artifactId>days01_springboot_demo01</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <name>days01_springboot_demo01</name>
     <description>Demo project for Spring Boot</description>
     <properties><java.version>1.8</java.version></properties>
     <dependencies>
         <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
         <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-devtools</artifactId>
           <scope>runtime</scope>
           <optional>true</optional>
         </dependency>
         <dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
           <optional>true</optional>
         </dependency>
         <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>
     <build>
       <plugins>
         <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
       </plugins>
     </build>
    </project>
    
  • src目录结构

    • spring boot15.png
    • 说明:注意Days01SpringbootDemo01Application这个类咱们刚刚在项目向导生成过程中放到了com.qfedu 下,该类是当前项目的主启动类。
    • 我们在 com.qfedu 包下新建的 controller 子包后才建的HelloController类,只有在子包下才会被扫描到 resources 下放的都是资源文件,里面有:
      • static 目录:主要放静态资源;
      • templates目录:里面放模版文件;
      • application.properties文件:主要用来配置当前的 SpringBoot项目。
  • maven构建SpringBoot工程

    • 在maven项目中将当前项目的⽗项目设置为SpringBoot项目,那么当前项目也就是⼀个SpringBoot项目,添加SpringBoot⼀样的依赖即可

四、SpringBoot的启动类

  • @SpringBootApplication注解介绍

    • @SpringBootApplication is a convenience annotation that adds all of the following:
    • @Configuration:Tags the class as a source of bean definitions for the application context.
    • @EnableAutoConfiguration:Tells Spring Boot to start adding beans based on classpath settings, other beans, and various property settings. For example, if spring-webmvc is on the classpath, this annotation flags the application as a web application and activates key behaviors, such as setting up a DispatcherServlet .
    • @ComponentScan:Tells Spring to look for other components, configurations, and services in the com/example package, letting it find the controllers.
  • @Configuration注解介绍

    • @Configuration:Tags the class as a source of bean definitions for the application context.
  • @Bean注解介绍
    对于Spring而言,所有的对象都可以被认为是bean对象,Spring会管理所有的对象

  • starter介绍

    • starter简单介绍

五、SpringBoot的配置文件

  • yml文件的介绍

    • YAML(Yet Another Markup Language)(发音 /ˈjæməl/ ) ⼀种基于Unicode容易阅读,容易和脚本语言交互的,用来表达资料序列的编程语言。
    • 适应场景 脚本语言:由于实现简单,解析成本很低,YAML 特别适合在脚本语言中使用序列化:YAML是由宿主语言数据类型直转,的比较适合做序列化。
    • 配置文件:写 YAML 要比写 XML 快得多(无需关注标签或引号),并且比 INI 文档功能更强。由于兼容性问题,不同语言间的数据流转建议不要用 YAML。
    • 语言优点:YAML易于⼈们阅读。 YAML数据在编程语言之间是可移植的。 YAML匹配敏捷语言的本机数据结构。 YAML具有⼀致的模型来⽀持通用工具。 YAML支持单程处理。 YAML具有表现力和可扩展性。 YAML易于实现和使用。
    • YAML 语法:使用空格 Space 缩进表示分层,不同层次之间的缩进可以使用不同的空格数目,但是同层元素⼀定左对齐,即前面空格数目相同(不能使用 Tab,各个系统 Tab对应的 Space 数目可能不同,导致层次混乱)
    • ‘#’表示注释,只能单行注释,从#开始处到行尾
    • 破折号后面跟⼀个空格(a dash and space)表示列表
    • 用冒号和空格表示键值对 key: value 简单数据(scalars,标量数据)可以不使用引号括起来,包括字符串数据。
    • 用单引号或者双引号括起来的被当作字符串数据,在单引号或双引号中使用C风格的转义字符 Sequence of Scalars 简单数据列表
  • yml文件的使用

    • 配置对象数据语法:key:key1: value1key2: value2 或者:key: {key1: value1,key2: value2}。示例代码:
    person:
       name: AAA
       age: 18
       addr: AA
    #或者
    person: {name: AAA,age: 18,addr: AA}
    
    • 注意:key1前面的空格个数不限定,在yml语法中,相同缩进代表同⼀个级别
      配置Map数据同上面的对象写法同上面的对象写法
      配置数组(List、Set)数据语法:key:- value1- value2 或者:key: [value1,value2]。示例代码:
    my:
    city:
     - AAA
     - BBB
     - CCC
     - DDD
     - EEE
    #或者
    my:
    city: [AAA,BBB,CCC,DDD,EEE]
    #集合中的元素是对象形式
    student:
      -name: A
       age: 18
       score: 100
      -name: B
       age: 28
       score: 88
      -name: C
       age: 38
       score: 90
    
    • 注意:value1与之间的 - 之间存在⼀个空格

六、 SpringBoot常用配置

  • 多环境
  • @ConfigurationProperties

七、 SpringBoot整合Mybatis

  • 基本配置

    • pom.xml文件添加依赖
      <dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>1.3.2</version>
      </dependency>
      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
         <version>1.0.28</version>
      </dependency>
      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
      </dependency>
    
    • 在resources下新增⼀个application.yml
    spring:
       datasource:
         url: jdbc:mysql://localhost:3306/supermarket?useSSL=true&serverTimezone=UTC&characterEncoding=UTF-8
         driver: com.mysql.jdbc.Driver
         username: james
         password: 123456
         type: com.alibaba.druid.pool.DruidDataSource
    mybatis:
         type-aliases-package: com.qfedu.pojo
         mapper-locations: classpath:mapper/*Mapper.xml
    
  • 代码实现

    • 新增⼀个User类
    @Data
    public class User {
       private String uid;
       private String username;
       private String password;
       private String email;
       private String tel;
       private int level;
       private int integral;
       private int ifNew;
    }
    
    • 新增⼀个Controller类
    @RestController
    public class UserController {
       @Resource
       private IUserService userService;
       @GetMapping("/Users")
       public List<User> getAllUsers(){
       return userService.getAllUsers();
      }
    }
    
    • 新增⼀个Service接口
    public interface IUserService {
       List<User> getAllUsers();
    }
    
    • 新增该service接口的实现类
    @Service
    public class UserServiceImpl implements IUserService {
       @Resource
       private IUserDao userDao;
       @Override
       public List<User> getAllUsers() {
           return userDao.getAllUsers();
       }
    }
    
    • 新增一个Dao接口
    @Mapper
    public interface IUserDao {
       List<User> getAllUsers();
    }
    
    • 在resources下新增⼀个mapper目录,新增⼀个 UserMapper.xml 文件
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        <!-- 整个映射文件为 mapper 节点,里面包含 namespace 属性 -->
        <mapper namespace="com.qfedu.dao.IUserDao">
           <select id="getAllUsers" resultType="user">
              select user_id uid, user_name username, password , email, tel, level,integral, if_new ifNew from users
         </select>
         <select id="getUserByUid" resultType="users">
              select * from users where uid = #{uid}
         </select>
         <update id="updateUsers">
             update users set username = #{username}, password = #{password}, tel=#{tel}, addr=#{addr} where uid = #{uid}
         </update>
         <update id="deleteUserByUid">
             delete from users where uid = #{uid}
         </update>
         <update id="saveUsers">
             insert into users values(null, #{username}, #{password}, #{tel}, #{addr})
         </update>
         <update id="deleteUsers">
             delete from users where uid = #{uid}
         </update>
    </mapper>
    
  • 看看数据库的表结构

  • spring boot16.png
  • 看看表里的数据

  • spring boot17.png
  • 看看运行结果:浏览器中访问http://localhost:8080/Users

  • spring boot18.png
  • 到此为止,SpringBoot 整合 MyBatis 完成

八、SpringBoot 整合 JSP

  • 基本的配置
    • 修改 pom.xml 文件,添加新的依赖
      <!-- 添加 servlet 依赖模块 -->
      <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>javax.servlet-api</artifactId>
         <scope>provided</scope>
      </dependency>
      <!-- 添加 jstl 标签库依赖模块 -->
      <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>jstl</artifactId>
      </dependency>
      <!--添加 tomcat 依赖模块.-->
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
         <scope>provided</scope>
      </dependency>
      <!-- 使用 jsp 引擎,springboot 内置 tomcat 没有此依赖 -->
      <dependency>
         <groupId>org.apache.tomcat.embed</groupId>
         <artifactId>tomcat-embed-jasper</artifactId>
         <scope>provided</scope>
      </dependency>
    
  • 修改yml文件: 新增 spring mvc 的前后缀
    spring:
       mvc:
       view:
       prefix: /WEB-INF/jsp/
       suffix: .jsp
    
  • 代码实现
    • 修改controller.java
    @Controller
    public class UserController {
       @Resource
       private IUserService userService;
       @GetMapping("/Users")
       @ResponseBody
       public List<User> getAllUsers(){
           return userService.getAllUsers();
       }
       @GetMapping("/UsersPage")
       public String showUsers(Model model){
           model.addAttribute("list", userService.getAllUsers());
           return "users";
       }
    }
    
  • 修改pom文件的打包方式为war,在 main下新增目录webapp,以及WEB-INF目录,在WEB-INF下新增 JSP 目录,JSP 目录下新增 Users.jsp 文件
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>users</title>
    </head>
    <body>
        <h1>this is users jsp page</h1>
        <% out.println("hello"); %>
        <table border="0" width="80%" align="center">
        <c:forEach items="${list}" var="u">
           <tr>
             <td>${u.uid}</td>
             <td>${u.username}</td>
             <td>${u.password}</td>
             <td>${u.tel}</td>
             <td>${u.email}</td>
             <td>${u.level}</td>
           </tr>
        </c:forEach>
        </table>
    </body>
    </html>
    
  • 访问地址:http://localhost:8080/UsersPage
  • spring boot19.png
  • 至此 SpringBoot 整合 JSP 配置完成
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容