天天看點

SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐

文章目錄

  • 47.1 什麼是SpringBoot
  • 47.2 SpringBoot的特點
  • 47.3 Spring Boot 快速入門
    • 47.3.1 建立項目
    • 47.3.2 添加依賴
    • 47.3.3 啟動類
    • 47.3.4 編寫controller
    • 47.3.5 啟動測試
  • 47.4 Java配置
    • 47.4.1 Spring 曆史
    • 47.4.2 java配置
    • 47.4.3 Spring Boot 屬性注入
      • 47.4.3.1 注入方式一
      • 47.4.3.2 注入方式二
      • 47.4.3.3 注入方式三
  • 47.5 Spring Boot 實踐
    • 47.5.1 整合SpringMVC
      • 47.5.1.1 修改端口
      • 47.5.1.2 通路靜态資源
      • 47.5.1.3 日志級别控制
    • 47.5.2 整合jdbc和事務
    • 47.5.3 整合MyBatis
      • 47.5.3.1 mybatis
      • 47.5.3.2 通用mapper

47.1 什麼是SpringBoot

  • SpringBoot是Spring項目中的一個子工程,與我們所熟知的Spring-framework 同屬于spring的産品:
    SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐
用一些固定的方式來建構生産級别的spring應用。Spring Boot 推崇約定大于配置的方式以便于你能夠盡可能快速的啟動并運作程式。
其實人們把Spring Boot 稱為搭建程式的

腳手架

。其最主要作用就是幫我們快速的建構龐大的spring項目,并且盡可能的減少一切xml配置,做到開箱即用,迅速上手,讓我們關注與業務而非配置。
Spring Boot 簡化了基于Spring的應用開發,隻需要“run”就能建立一個獨立的、生産級别的Spring應用。Spring Boot為Spring平台及第三方庫提供開箱即用的設定(提供預設設定,存放預設配置的包就是啟動器),這樣我們就可以簡單的開始。多數Spring Boot應用隻需要很少的Spring配置。

47.2 SpringBoot的特點

  • 為所有 Spring 的開發者提供一個非常快速的、廣泛接受的入門體驗;
  • 開箱即用(啟動器starter-其實就是SpringBoot提供的一個jar包),但通過自己設定(.properties),即可快速擺脫這種方式;
  • 提供了一些大型項目中常見的非功能性特性,如内嵌伺服器、安全、名額,健康檢測、外部化配置等;
  • 絕對沒有代碼生成,也無需 XML 配置。

47.3 Spring Boot 快速入門

47.3.1 建立項目

SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐
  • 使用mavem建構項目
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐
  • 填寫項目坐标
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐
  • 項目結構
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐

47.3.2 添加依賴

  • SpringBoot提供了一個名為spring-boot-starter-parent的工程,裡面已經對各種常用依賴(并非全部)的版本進行了管理,我們的項目需要以這個項目為父工程,這樣我們就不用操心依賴的版本問題了,需要什麼依賴,直接引入坐标即可!
  • 添加父工程坐标
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
    </parent>
           
  • 添加web啟動器
    • 為了讓SpringBoot幫我們完成各種自動配置,我們必須引入SpringBoot提供的自動配置依賴,我們稱為

      啟動器

      。因為我們是web項目,這裡我們引入web啟動器:
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>
    </dependencies>
           
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐

47.3.3 啟動類

  • Spring Boot項目通過main函數即可啟動,我們需要建立一個啟動類:
package com.xww;

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

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

           
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐

47.3.4 編寫controller

package com.xww.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.sql.DataSource;

@Controller
public class HelloController {

    @GetMapping("hello")
    @ResponseBody
    public String hello(){
        return "hello";
    }
}

           
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐

47.3.5 啟動測試

SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐

47.4 Java配置

47.4.1 Spring 曆史

  • Spring1.0時代
    • 在此時因為jdk1.5剛剛出來,注解開發并未盛行,是以一切Spring配置都是xml格式。
  • Spring2.0時代
    • Spring引入了注解開發,但是因為并不完善,是以并未完全替代xml,此時的程式員往往是把xml與注解進行結合,貌似我們之前都是這種方式。
  • Spring3.0及以後
    • 3.0以後Spring的注解已經非常完善了,是以Spring推薦大家使用完全的java配置來代替以前的xml,不過似乎在國内并未推廣盛行。然後當SpringBoot來臨,人們才慢慢認識到java配置的優雅。

47.4.2 java配置

  • java配置主要靠java類和一些注解,比較常用的注解有:
    • @Configuration

      :聲明一個類作為配置類,代替xml檔案
    • @Bean

      :聲明在方法上,将方法的傳回值加入Bean容器,代替

      <bean>

      标簽
    • @value

      :屬性注入
    • @PropertySource

      :指定外部屬性檔案
  • 首先引入Druid連接配接池依賴:
<dependencies>
        <dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>
    </dependencies>
           
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐
  • 建立一個jdbc.properties檔案,編寫jdbc屬性:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot
jdbc.username=root
jdbc.password=root
           
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐
  • 編寫配置類:
    • @Configuration

      :聲明我們

      JdbcConfig

      是一個配置類
    • @PropertySource

      :指定屬性檔案的路徑是:

      classpath:jdbc.properties

    • 通過

      @Value

      為屬性注入值
    • 通過@Bean将

      dataSource()

      方法聲明為一個注冊Bean的方法,Spring會自動調用該方法,将方法的傳回值加入Spring容器中。
    • 然後我們就可以在任意位置通過

      @Autowired

      注入DataSource了!
package com.xww.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {

    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driverClassName}")
    String driverClassName;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;

    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

           
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐
  • HelloController

    中測試:
package com.xww.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.sql.DataSource;

@Controller
public class HelloController {

    @Autowired
    private DataSource dataSource;

    @GetMapping("hello")
    @ResponseBody
    public String hello(){
        return "hello";
    }
}

           
SpringBoot_hehe.employment.4747.1 什麼是SpringBoot47.2 SpringBoot的特點47.3 Spring Boot 快速入門47.4 Java配置47.5 Spring Boot 實踐

47.4.3 Spring Boot 屬性注入

47.4.3.1 注入方式一

  • application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot
jdbc.username=root
jdbc.password=root
           
  • JdbcProperties.java
package com.xww.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "jdbc")
@Data
public class JdbcProperties {

    String url;
    String driverClassName;
    String username;
    String password;
}

           
  • JdbcConfig.java
package com.xww.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
//@PropertySource("classpath:application.properties")
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {

    @Bean
    public DataSource dataSource(JdbcProperties prop){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(prop.getDriverClassName());
        dataSource.setUrl(prop.getUrl());
        dataSource.setUsername(prop.getUsername());
        dataSource.setPassword(prop.getPassword());
        return dataSource;
    }
}

           

47.4.3.2 注入方式二

  • application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot
jdbc.username=root
jdbc.password=root
           
  • JdbcProperties.java
package com.xww.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
public class JdbcProperties {

    String url;
    String driverClassName;
    String username;
    String password;
}

           
  • JdbcConfig.java
package com.xww.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
public class JdbcConfig {

    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource(){
        return new DruidDataSource();
    }
}

           

47.4.3.3 注入方式三

  • yaml配置: application.yaml
jdbc:
  driverClassName: com.mysql.jdbc.Driver
  url: jdbc:mysql://127.0.0.1:3306/springboot
  username: root
  password: root
           

47.5 Spring Boot 實踐

47.5.1 整合SpringMVC

47.5.1.1 修改端口

server:
  port: 8088
           

47.5.1.2 通路靜态資源

  • 預設的靜态資源路徑為:
    • classpath:/META-INF/resources/

    • classpath:/resources/

    • classpath:/static/

    • classpath:/public

  • 隻要靜态資源放在這些目錄中任何一個,SpringMVC都會幫我們處理。
  • 我們習慣會把靜态資源放在

    classpath:/static/

    目錄下。

47.5.1.3 日志級别控制

logging:
  level:
    com.xww: debug
    org.springframework: debug
           

47.5.2 整合jdbc和事務

  • 導入依賴
<!--連接配接池-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--資料庫驅動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
           
  • 通過注解控制事務
@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User queryById(Long id){
        return this.userMapper.selectByPrimaryKey(id);
    }

    @Transactional
    public void deleteById(Long id){
        this.userMapper.deleteByPrimaryKey(id);
    }
}
           

47.5.3 整合MyBatis

47.5.3.1 mybatis

  • 導入依賴
<!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
           
  • 配置
mybatis:
  configuration:
    map-underscore-to-camel-case: true
  # mybatis 别名掃描
  type-aliases-package: com.xww.pojo
# mapper/*.xml檔案位置,如果沒有映射檔案,請注釋掉
# mapper-locations: mapper/*.xml
           

47.5.3.2 通用mapper

  • 導入依賴
<!-- 通用mapper -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.0.2</version>
</dependency>
           

繼續閱讀