Springboot筆記

来源:https://www.cnblogs.com/LoginX/archive/2022/10/03/Login_X53.html
-Advertisement-
Play Games

SpringBoot HelloWorld 1.創建Meven工程 2.引入依賴 pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifact ...


SpringBoot

HelloWorld

1.創建Meven工程

2.引入依賴

pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

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

3 .創建主程式

/**
 * 主程式類
 * @SpringBootApplication:一個springboot應用
 */
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class,args);
    }
}

4.寫業務

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String handle01(){
        return "Hello SpringBoot2!";
    }
}

5.運行main,瀏覽器打開localhost:8080/hello

6.簡化配置

application.properties

server.port=8888

7.簡化部署

打包方式jar

把項目打成jar包,直接在目標伺服器執行即可

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

自動配置原理

1.依賴管理

  • 父項目做依賴管理
依賴管理
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

他的父項目
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>
  • 開發導入starter場景啟動器
1、見到很多 spring-boot-starter-* : *就某種場景
2、只要引入starter,這個場景的所有常規需要的依賴我們都自動引入
3、SpringBoot所有支持的場景
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
4、見到的  *-spring-boot-starter: 第三方為我們提供的簡化開發的場景啟動器。
5、所有場景啟動器最底層的依賴
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.3.4.RELEASE</version>
    <scope>compile</scope>
</dependency>
  • 無需關註版本號,自動版本仲裁
1、引入依賴預設都可以不寫版本
2、引入非版本仲裁的jar,要寫版本號。
  • 可以修改版本號
1、查看spring-boot-dependencies裡面規定當前依賴的版本用的key。
2、在當前項目裡面重寫配置
<properties>
    <mysql.version>5.1.43</mysql.version>
</properties>

2.自動配置

  • 自動配好Tomcat
    • 引入Tomcat依賴
    • 配置Tomcat
  • 自動配好SpringMVC
    • 引入SpringMVC全套組件
    • 自動配好SpringMVC常用組件(功能)
  • 自動配好Web常見功能,如字元編碼問題
    • SpringBoot幫我們配置好了web開發常見場景
  • 預設的包結構
    • 主程式所在包及其子包中的組件預設會被掃描
    • 無需配置包掃描
    • 改變掃描路徑@SpringBootApplication(scanBasePackages="com.xust")或@ComponentScan 指定掃描路徑
  • 各種配置擁有預設值
    • 預設配置最終都是映射到某個類上,如:MultipartProperties
    • 配置文件的值最終會綁定每個類上,這個類會在容器中創建對象
  • 按需載入所有預設配置項

配置文件

1.文件類型

yaml

適合做以數據為中心的配置文件

基本語法
  • key: value,value前有空格
  • 大小寫敏感
  • 使用縮進表示層級關係
  • 縮進不允許用tab,只能用空格
  • 縮進的空格數不重要,只要同層級元素左對齊就行
  • 表示註釋

  • 字元串不需要加引號,‘ ’和“ ”表示轉義/不轉義,'\n'不換行,"\n"換行
數據類型
  • 字面量:單個的、不可再分的值。date、boolean、string、number、null
k: v
  • 對象:鍵值對的集合。map、hash、set、object
行內寫法:k: {k1:v1,k2:v2,k3:v3}
#或
k: 
	k1: v1
	k2: v2
	k3: v3
  • 數組:一組按次序排列的值。array、list、queue
行內寫法:  k: [v1,v2,v3]
#或者
k:
 - v1
 - v2
 - v3
舉例
@ConfigurationProperties(prefix = "person")
@Component
@ToString
@Data
public class Person {
    private String userName;
    private Boolean boss;
    private Date birth;
    private Integer age;
    private Pet pet;
    private String[] interests;
    private List<String> animal;
    private Map<String, Object> score;
    private Set<Double> salarys;
    private Map<String, List<Pet>> allPets;

    public Person() {
    }
}

@Data
@ToString
public class Pet {
    private String name;
    private Double weight;
}

application.yaml

person:
  userName: zhangsan
  boss: false
  birth: 2019/12/12 20:12:33
  age: 18
  pet:
    name: tomcat
    weight: 23.4
  interests: [籃球,游泳]
  animal:
    - jerry
    - mario
  score:
    english:
      first: 30
      second: 40
      third: 50
    math: [131,140,148]
    chinese: {first: 128,second: 136}
  salarys: [3999,4999.98,5999.99]
  allPets:
    sick:
      - {name: tom}
      - {name: jerry,weight: 47}
    health: [{name: mario,weight: 47}]

2.自定義綁定的配置提示

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

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-configuration-processor</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

Web開發

簡單功能分析

靜態資源

(1)靜態資源目錄

img1

將靜態資源放在/static,/public,/resources,/META-INF/resources

訪問:當前項目根路徑/+靜態資源名

優先順序:resources>static>public

原理:靜態映射/**

請求進來,先去找Controller看能不能處理。不能處理的所有請求又去交給靜態資源處理器。如果靜態資源也找不到則響應404頁面

(2)靜態資源訪問首碼

預設無首碼

application.yaml中配置訪問首碼為res,改變預設靜態資源路徑

spring:
  mvc:
    static-path-pattern: /res/**
  web:
    resources:
      static-locations: [classpath:/hehe/]

歡迎頁支持

  • 靜態資源路徑下index.html
    • 可以修改靜態資源預設訪問路徑,但是不能配置訪問首碼,否則會導致index.html文件不能被預設訪問
  • controller處理index.html
favicon圖標

將圖標圖片名稱改為favicon.ico置於靜態資源目錄下即可

配置訪問首碼會使該功能失效

模板引擎

SpringBoot不支持jsp,需要引入第三方模板引擎進行頁面渲染

模板引擎-Thymeleaf

Thymeleaf的使用

1.引入starter
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.自動配置好了Thymeleaf

預設前尾碼

將html頁面置於resources/templates目錄下即可自動渲染

public static final String DEFAULT_PREFIX = "classpath:/templates/";

public static final String DEFAULT_SUFFIX = ".html";  //xxx.html
3.頁面開發

引入名稱空間xmlns:th="http://www.thymeleaf.org"

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1 th:text="${msg}">哈哈</h1>
<h2>
    <a href="www.test.com" th:href="${link}">去百度1</a><br>
    <a href="www.test.com" th:href="@{link}">去百度2</a>
</h2>
</body>
</html>
@Controller
public class ViewTestController {
    @GetMapping("/xust")
    public String xust(Model model){
        //model中的數據會被放在請求域中,相當於request.setAttribute("a",aa)
        model.addAttribute("msg","你好,xust");
        model.addAttribute("link","http://www.baidu.com");
        return "success.html";
    }
}

構建後臺管理系統

攔截器

文件上傳

數據訪問

數據源的自動配置-HikariDataSource

導入jdbc場景

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

資料庫驅動(預設8.0.22)

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

修改配置項

application.yaml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_account
    username: root
    password: xpx24167830
    driver-class-name: com.mysql.cj.jdbc.Driver

Test

@Slf4j
@SpringBootTest
class Boot03WebAdminApplicationTests {

    @Autowired
    JdbcTemplate jdbcTemplate;


    @Test
    void contextLoads() {
        Long aLong = jdbcTemplate.queryForObject("select count(*) from t_emp", Long.class);
        log.info("記錄總數:{}",aLong);
    }
}

Druid數據源

自定義方式

依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.17</version>
</dependency>

整合MyBatis

pom.xml

<!--第三方-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

application.yaml

server:
  port: 8888

spring:
  datasource:
    username: root
    password: xpx24167830
    #?serverTimezone=UTC解決時區的報錯
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  type-aliases-package: com.xust.pojo
  mapper-locations: classpath:mybatis/mapper/*.xml

UserMapper.java

@Mapper
@Repository
public interface UserMapper {
    List<User> queryUserList();
}

UserMapper.xml

<mapper namespace="com.xust.mapper.UserMapper">
    <select id="queryUserList" resultType="User">
        select * from t_emp
    </select>
</mapper>

UserController.java

@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/queryUserList")
    private List<User> queryUserList(){
        List<User> userList = userMapper.queryUserList();

        for (User user:userList){
            System.out.println(user);
        }
        return userList;
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 事務是資料庫操作最基本的單元,是邏輯上的一組操作,這一組操作在同一個會話中要麼都執行成功,要麼都失敗,這也是事務的最基本特性--原子性。事務的作用是為了保證系統數據的正確性,因此,資料庫應用程式中是會經常用到事務。下麵就說一下在Spring里怎麼做事務操作。 Spring事務使用方式 Spring事 ...
  • 參考自以下鏈接處:http://t.csdn.cn/4ws4t 下麵直接看代碼,代碼中會有註意事項。 `timescale 1ns/10ps module traffic_lights ; reg clk ; reg red ; reg amber ; reg green ; //產生時鐘脈衝的al ...
  • 大家好,我是沙漠盡頭的狼。 最近幾天在看一本Go的書籍,看了100來頁,感覺不錯,分享給大家​。​ 書籍基本信息 書籍信息: 書名:Go Web編程 作 者:(新加坡)鄭兆雄(Sau Sheong Chang) 著;黃健巨集 譯 著作 定 價:79 出 版 社:人民郵電出版社 出版日期:2017年12 ...
  • 簡述 類型:結構型 目的:解決介面不相容問題。 話不多說,看個案例吧。 優化案例 最初版v0 在真實的開發場景中,系統的每個模塊都是分配給不同的團隊或個人來開發的。這使得事前溝通變得尤為重要,且溝通問題也時有發生。現在公司有兩個模塊無法相容,難道只能重寫其中的一個嗎? class User { St ...
  • 編碼 ASCII:用八位二進位的低七位,一共規定了128個字元的編碼,一個位元組表示一個字元, 擴展ASCII:第八位為1,規定了以1開頭的128個字元 Unicode:固定大小的編碼,通常兩個位元組表示一個字元,字母和漢字統一用兩個位元組,浪費空間 UTF-8:是一種變長的編碼方式。字母用一個位元組,漢字 ...
  • 一、前期準備 1.新建一個django項目 2.連接mysql資料庫(註意需要在init文件裡面書寫import pymysql),告訴django使用pymysql連接資料庫 3.靜態文件路徑在settings里配置一下,並且在項目文件夾下新建一個靜態文件夾 二、bbs項目表設計 做一個項目最首要 ...
  • 2022-10-03 url中的位置參數 位置參數存放的位置 是子應用中的自定義的“urls.py”文件中的路由中。 位置參數的設置: 如果位置參數很多,那麼在自定義中的路由文件中可以使用正則表達式。位置參數就是在瀏覽器搜索中對應的關鍵詞時,能夠跳轉到相應的界面。界面內容的設置是在子應用的“view ...
  • Git操作入門 Git 是一個快速、可擴展的 分散式版本控制系統 ,它具有極為豐富的命令集,對內部系統提供了高級操作和完全訪問.Git與你熟悉的大部分版本控制系統的差別是很大的。相似的還有Subversion、 CVS 、Perforce、Mercurial 等等,他們 使用“增量文件系統” (De ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...