Spring boot 整合各種功能

来源:https://www.cnblogs.com/226zjw/archive/2023/08/23/17650130.html
-Advertisement-
Play Games

# 1. 回顧 ``` 1. springboot框架。簡化spring項目的初始化搭建和配置的。 2. springboot的配置文件種類: (1)properties (2)yml application 3. java讀取springboot配置文件中的內容。 4. springboot註冊w ...


1. 回顧

1. springboot框架。簡化spring項目的初始化搭建和配置的。
2. springboot的配置文件種類: (1)properties (2)yml ===application
3. java讀取springboot配置文件中的內容。
4. springboot註冊web組件。
5. springboot包掃描的原理---自定義包掃描的路徑

2. 正文

1.springboot自動裝配原理
2.springboot整合數據源--連接資料庫
3.springboot整合mybatis框架。
4.springboot整合pageHelper分頁插件
5.springboot整合定時器。
6.springboot整合swagger介面文檔
7.springboot整合mp[mybatis-plus]

3.springboot自動裝配原理

我們在使用springboot時,並沒有像之前項目載入我們的前端控制DispatcherServlet,也沒有寫編碼過濾器。但是springboot可以完成請求以及編碼的設置。

原理: 主啟動類上的@SpringBootApplication註解上,而該註解是一個複合組件,而在複合註解中存在@EnableAutoConfiguration, 這個@EnableAutoConfiguration註解也是一個複合註解,包含@Import---而@Import註解導入一個AutoConfigurationImportSelector 【自動配置選擇器】,在該類中存在一個方法getAutoConfigurationEntry --作用:得到自動配置類的實體。而這些自動配置類會完成相應的自動裝配。

1692339955602

1692340445662

4. springboot整合數據源--連接資料庫

連接我們的資料庫----druid數據源----預設的數據源

4.1 設置預設數據源

(1)引入相關依賴

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
   </dependency>

springboot自動配置會載入jdbc的自動配置類---讀取springboot配置文件中數據源的信息,從而完成數據源的自動配置。

1692341696864

(2)application配置文件中配置數據源.

#配置數據源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/aaa?serverTimezone=Asia/Shanghai

(3)測試

@SpringBootTest
class Qy168Springboot03ApplicationTests {

    @Autowired
    private DataSource dataSource;//springboot幫你完成數據源的自動裝配
    @Test
    void contextLoads() throws SQLException {
        System.out.println(dataSource.getConnection());
    }

}

4.2 設置Druid數據源


        <!--druid數據源的依賴-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.1</version>
        </dependency>

修改配置文件

spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.url=jdbc:mysql://localhost:3306/aaa?serverTimezone=Asia/Shanghai
#初始化的連接對象的個數
spring.datasource.druid.initial-size=5
#最多的連接數
spring.datasource.druid.max-active=10

測試:

1692342662203

5. springboot整合mybatis框架

ssm===>spring框架需要配置SqlSesssionFactoryBean對象,還有配置DAO介面的代理實現類。

springboot會自動配置SqlSesssionFactoryBean對象,必須引入starter依賴

(1) 依賴

        <!--mybatis和springboot整合的依賴-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

(2)創建實體類

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String name;
    private Double balance;
}

(3)dao介面

public interface UserDao {
    public List<User> findAll();
}

(4)mapper映射文件

<?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">
<!--namespace必須和dao介面的名稱一模一樣-->
<mapper namespace="com.aaa.qy168springboot03.dao.UserDao">

    <select id="findAll" resultType="com.aaa.qy168springboot03.entity.User">
        select * from t_user 
    </select>
</mapper>

(5)修改配置文件的內容

1692343825365

(6)在主啟動類上dao介面的掃描配置

1692344096676

(7)測試

1692344189546

6. springboot整合pageHelper分頁插件

        <!--pageHelper的依賴-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.5</version>
        </dependency>

測試:

 @Test
    public void testFindAll(){
        PageHelper.startPage(1,3);//攔截器: select * from t_user
        List<User> all = userDao.findAll();
        //把查詢的結果封裝到PageInfo類中
        PageInfo<User> pageInfo=new PageInfo<>(all);
        System.out.println("總條數:"+pageInfo.getTotal());
        System.out.println("總頁數:"+pageInfo.getPages());
        System.out.println("當前頁的記錄:"+pageInfo.getList());
    }

7. 綜合案例

springboot+mybatis+druid+pageHelper: CRUD

(1)創建springboot工程並引入相關的依賴

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

(2)修改配置文件

#修改埠號
server.port=8888
#數據源
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.url=jdbc:mysql://localhost:3306/qy168?serverTimezone=Asia/Shanghai
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=10

#mybatis映射文件的路徑
mybatis.mapper-locations=classpath:/mapper/*.xml

(3)實體類

tbl_dept

@Data
public class Dept {
    private Integer did;
    private String dname;
    private String loc;
}

tbl_emp

@Data
public class Emp {
    private Integer id;
    private String name;
    private double salary;
    private Date birthday;
    private String headImg;
    private Integer deptId;

    //查詢員工時需要攜帶該員工對應的部門信息.
    private Dept dept;
}

(4)dao介面和映射文件

public interface EmpDao {
    
    //增加
    public int insert(Emp emp);
    
    //刪除
    public int deleteById(Integer id);
    
    //修改
    public int update(Emp emp);
    
    //根據id查詢員工信息
    public Emp selectById(Integer id);
    
    //查詢所有
    public List<Emp> selectAll();
}

<?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">
<!--namespace必須和dao介面的名稱一模一樣-->
<mapper namespace="com.ykq.dao.EmpDao">

    <!--返回你添加時資料庫生成的主鍵值-->
    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        insert into tbl_emp values(null,#{name},#{salary},#{birthday},#{deptId},#{headImg})
    </insert>
    <update id="update">
        update tbl_emp set name=#{name},salary=#{salary},birthday=#{birthday},dept_id=#{deptId},headImg=#{headImg}
        where id=#{id}
    </update>
    <delete id="deleteById">
        delete from tbl_emp where id=#{id}
    </delete>
    <!--sql片段-->
    <sql id="empSql">
        id,name,salary,birthday,dept_id deptId,headImg
    </sql>
    <select id="selectById" resultType="com.ykq.entity.Emp">
         select
          <include refid="empSql"/>
          from tbl_emp where id=#{id}
    </select>

    <!--查詢所有員工攜帶部門信息-->
    <resultMap id="baseEmpMapper" type="com.ykq.entity.Emp" autoMapping="true">
          <id property="id" column="id"/>
        <result property="deptId" column="dept_id"/>
        <association property="dept" javaType="com.ykq.entity.Dept" autoMapping="true">
             <id property="did" column="did"/>
             <result property="dname" column="d_name"/>
        </association>
    </resultMap>
    <select id="selectAll" resultMap="baseEmpMapper">
        select * from tbl_emp e join tbl_dept d on e.dept_id=d.did
    </select>


</mapper>

(5)service業務層

public interface EmpService {
    
    public Result deleteById(int id);
    
    public Result update(Emp emp);
    
    public Result insert(Emp emp);
    
    public Result findById(Integer id);
    
    public Result findAll(Integer current,Integer pageSize);
}
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpDao empDao;
    @Override
    @Transactional
    public Result deleteById(int id) {
        int row = empDao.deleteById(id);
        return row>0?new Result(200,"刪除成功",null):new Result(500,"刪除失敗",null);
    }

    @Override
    public Result update(Emp emp) {
        int row = empDao.update(emp);
        return row>0?new Result(200,"刪除成功",null):new Result(500,"刪除失敗",null);
    }

    @Override
    public Result insert(Emp emp) {
        int row = empDao.insert(emp);
        return row>0?new Result(200,"刪除成功",emp):new Result(500,"刪除失敗",null);
    }

    @Override
    public Result findById(Integer id) {
        Emp emp = empDao.selectById(id);
        return new Result(200,"查詢成功",emp);
    }

    @Override
    public Result findAll(Integer current, Integer pageSize) {
        PageHelper.startPage(current,pageSize);
        List<Emp> emps = empDao.selectAll();
        PageInfo<Emp> pageInfo=new PageInfo<>(emps);
        return new Result(200,"查詢成功",pageInfo);
    }
}

(6)controller介面層

package com.zjw.controller;

import com.zjw.entity.Emp;
import com.zjw.service.EmpService;
import com.zjw.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/emp")
public class EmpController {
    @Autowired
    private EmpService empService;
    @DeleteMapping
    public Result deleteById(Integer id){
        return empService.deleteById(id);
    }

    @PostMapping
    public Result insert(@RequestBody Emp emp){
        return empService.insert(emp);
    }

    @PutMapping
    public Result update(@RequestBody Emp emp){
        return empService.update(emp);
    }

    @GetMapping
    public Result getById(Integer id){
        return empService.findById(id);
    }


    @GetMapping("/getAll")
    public Result getAll(Integer current,Integer pageSize){
        return empService.findAll(current, pageSize);
    }
}

8. springboot整合定時器。

可以在規定的時間內執行相應的代碼。

比如: OSS文件上傳---OSS的文件冗餘的文件。----OSS的浪費。---->指定的時間自動刪除。[夜間刪除]

比如: 下單--->30分鐘未支付---取消訂單。

(1)引入定時器的依賴--


        <!--引入定時器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

(2)編寫定義的業務代碼

@Component
public class My {

    @Autowired
    private EmpDao empDao;
    //定時任務執行的代碼
    @Scheduled(cron = "0 0 2 * * ?")
    public void show(){
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~");
        //可以寫自己的寫完代碼
        empDao.delete();
    }
}

(3)開啟定時的註解驅動

1692349987813

本文來自博客園,作者:知行合二為一,轉載請註明原文鏈接:https://www.cnblogs.com/226zjw/p/17650130.html


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

-Advertisement-
Play Games
更多相關文章
  • 本文已收錄至GitHub,推薦閱讀 👉 [Java隨想錄](https://github.com/ZhengShuHai/JavaRecord) 微信公眾號:Java隨想錄 > 原創不易,註重版權。轉載請註明原作者和原文鏈接 [TOC] 某天,爪哇星球上,一個普通的房間,正在舉行一場秘密的面試: ...
  • ITGeeker技術奇客發佈的開源Word文字替換小工具更新到v1.0.1.0版本啦,現已支持Office Word文檔頁眉和頁腳的替換。 同時ITGeeker技術奇客修複了v1.0.0.0版本因替換數字引起的in ‘ requires string as left operand, not int ...
  • 本文已收錄至GitHub,推薦閱讀 👉 [Java隨想錄](https://github.com/ZhengShuHai/JavaRecord) 微信公眾號:Java隨想錄 > 原創不易,註重版權。轉載請註明原作者和原文鏈接 [TOC] 前面我們講了可達性分析和根節點枚舉,介紹完了GC的前置工作, ...
  • LibCurl是一個開源的免費的多協議數據傳輸開源庫,該框架具備跨平臺性,開源免費,並提供了包括`HTTP`、`FTP`、`SMTP`、`POP3`等協議的功能,使用`libcurl`可以方便地進行網路數據傳輸操作,如發送`HTTP`請求、下載文件、發送電子郵件等。它被廣泛應用於各種網路應用開發中,... ...
  • 我們在`jupyter notebook`中使用`pandas`顯示`DataFrame`的數據時,由於屏幕大小,或者數據量大小的原因,常常會覺得顯示出來的表格不是特別符合預期。 這時,就需要調整`pandas`顯示`DataFrame`的方式。`pandas`為我們提供了很多調整顯示方式的參數,具 ...
  • 事務管理,一個被說爛的也被看爛的話題,還是八股文中的基礎股之一。​本文會從設計角度,一步步的剖析 Spring 事務管理的設計思路(都會設計事務管理器了,還能玩不轉?) ...
  • # 前言 不知道大家有沒有發現,設計模式學習起來其實不容易,並不是說它難,主要是它表達的是思想層面或者說抽象層面的東西,如果你沒有實踐經歷過,感覺就是看了就懂,過了就忘。 所以本人現在也不多花費時間去專門學習設計模式,而是平時在看一些框架源碼時,多留意,多學習別人的設計方法和實現思路,在平時工作中, ...
  • ## 一、前言 一個後端介面大致分為四個部分組成:**介面地址(url)、介面請求方式(get、post等)、請求數據(request)、響應數據(response)**。雖然說後端介面的編寫並沒有統一規範要求,而且如何構建這幾個部分每個公司要求都不同,沒有什麼“一定是最好的”標準,但其中最重要的關 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...