Spring Boot學習隨筆-SpringBoot的引言,回顧傳統SSM開發

来源:https://www.cnblogs.com/eyewink/archive/2023/12/06/17880752.html
-Advertisement-
Play Games

首先回顧了傳統SSM開發步驟,介紹了項目實現過程,從需求分析、設計、編碼到測試的流程。展示了一個簡單的員工信息管理功能,並提供了環境搭建及相關依賴配置的詳細代碼和配置。接著,提出了SSM開發存在的問題,如配置繁瑣和版本相容性。第二章介紹了Spring Boot的引言,解釋了Spring Boot的概... ...


學習視頻:【編程不良人】2021年SpringBoot最新最全教程

第一章、傳統SSM開發回顧以及問題

Spring + SpringMVC + Mybatis SSM 實現一個簡單功能 員工添加、查詢…

SSM項目簡單實現

  • 項目

    需求分析 —>概要設計 —>(庫表設計) —> 詳細設計 —>(驗證庫表正確性) —> 編碼(環境搭建+業務代碼)—>測試 —>部署上線

    這是一般整個項目的開發步驟,但是我們選擇簡單項目實現

  • 功能:員工添加、查詢所有

    選擇mysql資料庫,庫:ssm,表:emp,欄位:id name birthday salary

  • 編碼

    sql建庫建表

    create DATABASE ssm;
    use ssm;
    create TABLE emp(
    id int(11) auto_increment PRIMARY KEY,
    name VARCHAR(40),
    birthday TIMESTAMP,
    salary DOUBLE
    )
    

    環境搭建 引入依賴

    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
      </dependency>
    
      <!--spring-->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.6</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>5.3.6</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.3.6</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.6</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.6</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.6</version>
      </dependency>
      <!--springmvc-->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.6</version>
      </dependency>
      <!--mybatis-->
      <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
      </dependency>
      <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>3.0.0</version>
      </dependency>
      <!--mysql-->
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
      </dependency>
      <!--druid-->
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.19</version>
      </dependency>
      <!--aspect-->
      <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.8</version>
      </dependency>
      <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.3</version>
      </dependency>
      <!--jackson 轉換json-->
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.14.2</version>
      </dependency>
    </dependencies>
    

    spring.xml

    <!--開啟註解掃描-->
    <context:component-scan base-package="com.baizhi.service"/>
    <!--創建數據源-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <!--創建sqlSessionFactory-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:com.baizhi.mapper/*.xml"/>
        <property name="typeAliasesPackage" value="com.baizhi.entity"/>
    </bean>
    <!--創建DAO-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.baizhi.dao"/>
    </bean>
    <!--創建事務管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--開啟註解事務生效-->
    <tx:annotation-driven/>
    

    Mapper配置文件

    <!--useGeneratedKeys:開啟自動生成主鍵,keyProperty:讓該欄位自動生成主鍵; 該功能僅MySQL支持-->
    <insert id="save" parameterType="Emp" useGeneratedKeys="true" keyProperty="id">
        INSERT into emp values(#{id},#{name},#{birthday},#{salary})
    </insert>
    <select id="findAll" resultType="com.baizhi.entity.Emp">
        select id,name,birthday,salary from emp
    </select>
    
    @Service
    @Transactional
    	public class EmpServiceImpl implements EmpService {
    
        private final EmpDAO empDAO;
    
        @Autowired
        public EmpServiceImpl(EmpDAO empDAO) {
            this.empDAO = empDAO;
        }
    
        @Override
        public void save(Emp emp) {
            empDAO.save(emp);
        }
    
        @Override
        public List<Emp> findAll() {
            return empDAO.findAll();
        }
    }
    

    一步一步來,先測試Spring+Mybatis:

    public class TestEmpServiceImpl {
        public static void main(String[] args) {
            //1.運行工廠
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
            //2.工廠中獲取對象
            EmpService empService = (EmpService) context.getBean("empServiceImpl");
            empService.save(new Emp(null, "小米", new Date(), 44.564));
            //3.調用方法
            empService.findAll().forEach(emp -> System.out.println(emp));
    
        }
    }
    

    可以正常執行,進入下一步mvc的整合,springmvc.xml

    <!--開啟註解掃描-->
    <context:component-scan base-package="com.baizhi.controller"/>
    <!--開啟mvc註解驅動-->
    <mvc:annotation-driven/>
    <!--配置視圖解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    

    web.xml

    <!-- 載入spring.xml-->
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring.xml</param-value>
    </context-param>
    <!--配置spring工廠啟動-->
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!--配置springmvc-->
    <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
      </init-param>
    </servlet>
    <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    控制器

    @RestController //代表類中返回值轉為json響應到瀏覽器
    public class EmpController {
        private final EmpService empService;
    
        @Autowired
        public EmpController(EmpService empService) {
            this.empService = empService;
        }
    
        //保存
        @RequestMapping("save")
        public void save(Emp emp) {
            empService.save(emp);
        }
    
        //查詢所有
        @RequestMapping("findAll")
        public List<Emp> findAll() {
            return empService.findAll();
        }
    }
    

    測試結果,可以正常添加和查詢所有

現有SSM開發存在問題

  1. 配置繁瑣:SSM框架需要進行大量的配置,包括XML配置文件、註解配置、依賴註入等。這些配置可能會變得繁瑣,以及maven配置的冗餘代碼。
  2. 版本相容性:maven引入的庫,他們的版本必須一致,否則產生版本不相容的問題

第二章、Spring Boot的引言

2.1 Spring Boot是什麼

Spring Boot是由Pivotal團隊提供的一套開源框架,Spring Boot的目標是讓開發者更多地關註業務特性。它通過自動配置來簡化開發流程,例如,當檢測到Spring MVC在類路徑上時,Spring Boot會自動添加必要的bean,該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。

Spring Boot 作用:簡化Spring應用初始搭建和開發過程

如何簡化:開發使用SpringBoot只要基於特定方式進行配置,就可以簡化Spring使用

SpringBoot 微框架:5分鐘完成之前ssm中的項目搭建,大大提高開發效率

SpringBoot (微框架)= SpringMVC(控制器) + Spring core(項目管理)

2.2 Spring Boot的優勢

  1. 創建完整獨立的Spring應用程式 ,只有一個容器;父子容器間的問題不存在。
  2. 嵌入的Tomcat,無需部署WAR文件 應用跑在內嵌伺服器
  3. 簡化Maven配置,自動配置Spring,沒有XML配置

2.3 Spring Boot的約定

  • SpringBoot遵循“約定優於配置”的原則,提供了一些預設的約定必須遵守,以簡化項目的配置和開發流程:
    1. 入口類:Spring Boot 項目必須設置入口類,通常位於項目的根目錄下,命名為 Application 或 Main,並且使用 @SpringBootApplication 註解進行標記。
    2. 配置文件:Spring Boot 必須在項目根目錄存在一個名為application.propertiesapplication.yml的配置文件。這些配置文件通常位於 src/main/resources 目錄下。
    3. 項目結構:Spring Boot 項目通常採用標準的 Maven 或 Gradle 項目結構,主要包括 src 目錄、main 目錄和 test 目錄。主要的 Java 代碼文件通常位於 src/main/java 目錄下,資源文件位於 src/main/resources 目錄下。

作者:揚眉劍出鞘
出處: https://www.cnblogs.com/eyewink/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


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

-Advertisement-
Play Games
更多相關文章
  • 大家好,我是獨孤風,從本周開始,爭取每周為大家帶來一個優秀的開源項目推薦。 開源項目不僅促進了技術的發展和普及,還為全球範圍內的開發者和用戶社區建立了一個共用知識、協作和創新的平臺。站在巨人的肩膀上才能看的更遠,我們平時也應該多多關註開源項目,不僅學習其豐富的知識,也要找機會為開源事業做出自己的貢獻 ...
  • 實現原理是使用TWEEN.Tween實現動畫效果 實現 汽車模型載入 使用Promise編寫模型的非同步載入方法 參數position是汽車初始位置,參數rotation是汽車初始朝向 Car.prototype.loadCar = function (position, rotation) { le ...
  • 人生的游戲不在於拿了一副好牌,而在於怎樣去打好壞牌,世上沒有常勝將軍,勇於超越自我者才能得到最後的獎盃。 1. 父子組件通信方式 1.1 父組件傳遞到子組件 直接通過屬性進行傳遞,數據的傳遞可以提高組件的復用性。 1.2 子組件傳遞到父組件 通過回調函數(callback)來實現。 ref 標記:父 ...
  • 本文本記錄了使用 Vue3+Vite+ElementPlus 從0開始搭建一個前端工程會面臨的常見問題,沒有技術深度,但全都是解決實際問題的乾貨,可以當作是問題手冊以備後用。本人日常工作偏後端開發,因此,文中的一些前端術語描述可能不嚴謹,敬請諒解。重點是:這裡記錄的解決方案都是行之有效果的,拿來即可 ...
  • Vite 是一種新型前端構建工具,在我們保險前端項目中已經推動並應用很久了,Vite 能夠顯著降低構建時間,提升前端開發效率。 ...
  • 上一章講完如何獲取用戶信息授權 後,下一步就可以進行小程式支付了。 本期就來介紹下支付寶小程式支付如何實現。 PS:接入前的準備工作可以參考:接入準備;接入指南可參考:接入指南~ 獲取小程式支付許可權 獲取許可權分為三步:分別是 賬號開通 JSAPI 支付、賬號與小程式賬號綁定 以及 小程式綁定 JSA ...
  • 元素分類 一、行內元素 1.不獨占一行,高寬由內容撐開 2.無法設置width和height 3.margin(單用無效,配合別的標簽可以有效,下麵案例中有解釋)/padding的上下無效,但是左右有效 <a></a> <strong></strong> <span></span> 二、行內塊元素 ...
  • 一、定義 提供一種方法順序訪問一個聚合對象中的各個元素,且不用暴露該對象的內部表示。迭代器模式是一種對象行為型模式,又稱為游標(Cursor)模式。 二、描述 在軟體系統中,聚合對象擁有兩個職責:一是存儲數據,二是遍曆數據。從依賴性來看,前者是聚合對象的基本職責,而後者既是可變化的,又是可分離的。因 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...