spring boot實現ssm(1)功能

来源:http://www.cnblogs.com/elvinle/archive/2017/12/05/7977453.html
-Advertisement-
Play Games

面完成了ssm的整合, 整個過程可以說很繁雜, 各種配置, 很容易讓人暈掉. 這裡使用spring boot 的方式來實現 ssm(1) 中的功能. 一. 建項目 1. 使用 idea 來創建 spring boot 項目, 是比較簡單的, 如果使用eclipse的話, 要裝插件, 比較麻煩, 那這 ...


 面完成了ssm的整合, 整個過程可以說很繁雜, 各種配置, 很容易讓人暈掉. 

這裡使用spring boot 的方式來實現 ssm(1) 中的功能.

一. 建項目

1. 使用 idea 來創建 spring boot 項目, 是比較簡單的, 如果使用eclipse的話, 要裝插件, 比較麻煩, 那這裡, 就直接使用idea來做吧

2. 這裡只需要修改下麵圈出來的部分. Java Version最好使用>=8.

3. 這裡直接選擇web就可以了, 缺什麼, 可以在後面加就好

4. 選擇路徑

經過這麼幾步操作, 就完成了基本的新建工作.

在新建的過程中, 可能會非常的慢, 因為第一次建, 要下載很多jar包. 而且可能下載還比較慢.

這裡可以在maven 的 setting.xml文件中, 加入一個阿裡雲的鏡像, 對於下載更新jar包, 是有幫助的.

<mirrors>
    <mirror>
            <id>nexus-aliyun</id>
            <mirrorOf>*</mirrorOf>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors>

 

二. 目錄結構

拿到剛建的項目後, 我在裡面新增了幾個package. 在這裡, 除了controller要建之外, 別的都可以先空著.

 

三. 配置文件 -- 這一步直接跳過, 也是能正常運行的. 不急的話, 就先看看這裡把

 預設的配置文件是 application.properties, 這裡我並沒有使用這個格式的文件, 而是使用了 yml 格式的文件, 配置起來, 更加的簡潔, 且效果是一樣的.

先來看一下application.yml文件

#標明引入那個配置文件
spring:
  profiles:
    active: dev

#自定義屬性
elvin:
  name: elvinle
  age: 28
  birthday: 1990-12-02

#自定義屬性
content: "elvin's name is ${elvin.name} and age is ${elvin.age} and birthday is ${elvin.birthday}"

開發的過程中, 可能會部署到好幾個環境, 比如開發環境, 測試環境, 那麼這裡的spring.profiles.active就起作用了, 可以新建多個文件, 這裡配置, 後面使用哪個文件的配置.

再來看看application-dev.yml文件

#配置項目埠和根路徑
server:
  port: 8080
  context-path: /boot

spring:
  #配置項目的資料庫鏈接信息
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///test?useUnicode=true&characterEncoding=utf-8
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

server.port 和 server.context-path 分別表示埠和根路徑. 它們都是可以不配置的. 後面的配置, 暫時不用看

在這兩個文件中, 可以看到, 我定義了自己的屬性. 那麼他們怎麼接收呢

在目錄中, 有個properties的文件夾, 我在裡面建了個類來接收

package org.elvin.boot.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * author: Elvin
 * Date: 2017/12/4 15:10
 * Description:
 */
@Component
@ConfigurationProperties(prefix = "elvin")
public class ElvinProperties {

    private String name;

    private Integer age;

    private String birthday;

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Elvin{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", birthday='" + birthday + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
}

使用的地方在controller中.

 

四. 實體類

package org.elvin.boot.pojo;

/**
 * author: Elvin
 * Date: 2017/12/4 15:37
 * Description:
 */

public class Book {

    private Integer id;

    private String name;

    private String publishTime;

    private Integer price;

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", publishTime='" + publishTime + '\'' +
                ", price=" + price +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPublishTime() {
        return publishTime;
    }

    public void setPublishTime(String publishTime) {
        this.publishTime = publishTime;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }
}

這裡實體類就隨便建一下了, 這裡還不是他的完全體, 在下一篇, 會進行部分修改

 

五. controller

package org.elvin.boot.controller;

import org.elvin.boot.pojo.Book;
import org.elvin.boot.properties.ElvinProperties;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;

/**
 * author: Elvin
 * Date: 2017/12/4 15:08
 * Description:
 */
@RestController
@RequestMapping("first")
public class FirstController {

    @Autowired
    private ElvinProperties elvinProperties;

    //接收配置文件中,自定義的content屬性
    @Value("${content}")
    private String content;

    @GetMapping("properties")
    public Map<String, Object> properties(){
        Map<String, Object> map = new HashMap<>();
        map.put("content", content);
        map.put("elvinProperties", elvinProperties);
        return map;
    }

    @PostMapping("all")
    public List<Book> all() {
        return getBookList();
    }

    //region private method
    private List<Book> getBookList() {
        List<Book> bookList = new ArrayList<>();
        String[] nameStrs = {"吳", "一", "雪", "動", "額", "阿", "前", "里", "排"};
        Random r = new Random();
        String timeStr = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        for (int i = 0; i < 10; i++) {
            Book b = new Book();
            b.setId(i + 1);
            b.setName(nameStrs[r.nextInt(5)] + nameStrs[r.nextInt(9)]);
            b.setPublishTime(timeStr);
            b.setPrice(r.nextInt(100));
            bookList.add(b);
        }
        return bookList;
    }
    //endregion
}

如果是做前後端分離的話, 那麼到這裡, 就告一段落了. 先來看看訪問結果吧.

 

六. 結果(前後端分離)

1. 使用postman發送get請求

這裡可以看到, 自定義配置, 都能夠正常獲取到

2. 使用postman來發送post請求.

如果還是希望使用返回頁面數據的方式, 則還要繼續一步配置.

個人還是推薦使用前後端分離的開發方式的. 怎麼說呢, 大家都知道, mvc中的v指的就是視圖, 在mvc中, 是需要讀取視圖, 然後解析視圖, 最後返回解析完的視圖數據的. 過程還是比較複雜和繁瑣的, 而且這部分的邏輯處理, 全都在伺服器端完成, 即使這裡使用了緩存, 對伺服器還是有性能損耗的. 如果把這部分損耗轉嫁到客戶端的瀏覽器中去, 可以節省不少的性能和空間. 

 

七. view

1. 在pom.xml中, 加入一個配置. 

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

這裡引入的是 Spring boot 推薦使用的 thymeleaf 模板, 和freemarker, jsp 功能是差不多的

2. 開髮狀態下, 去yml文件中, 修改下緩存配置

spring:
  thymeleaf:
    cache: false
    #以下都是預設配置,可以不寫
    prefix: /templates/
    suffix: .html
    mode: HTML5
    encoding: UTF-8
    content-type: text/html

3. controller 

在包裡面重新建一個控制器文件 TwoController. 

package org.elvin.boot.controller;

import org.elvin.boot.pojo.Book;
import org.joda.time.DateTime;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * author: Elvin
 * Date: 2017/12/4 16:35
 * Description:
 */
@Controller
@RequestMapping("two")
public class TwoController {
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("hello", "TwoController.hello()");
        return "hello";
    }

    @GetMapping("index")
    public String index(){
        return "/two/index";
    }

    @GetMapping("detail")
    public String detail(Model model){
        Book book = new Book();
        book.setName("book");
        book.setId(1);
        book.setPrice(110);
        book.setPublishTime(new DateTime().toString("yyyy-MM-dd"));
        model.addAttribute("book", book);
        return "two/detail";
    }
}

4. view

我這裡建了三個 html 文件, hello和index就不看了, 裡面沒有什麼內容, 主要看detail.html文件

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>detail</title>
</head>
<body>
<h1 th:inline="text">two/detail.html</h1>
<p th:text="${book.id}"></p>
<p th:text="${book.name}"></p>
<p th:text="${book.price}"></p>
<p th:text="${book.publishTime}"></p>
</body>
</html>

5. 結果

八. 配置文件

做完了這麼多, 來看看pom.xml文件吧

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.elvin</groupId>
    <artifactId>boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>boot</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

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

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


</project>

本身就不多的pom文件裡面, 絕大部分都是spring boot 自己生成的, 只有 joda-time 和 thymeleaf 是我手動添加的. 

從這裡的pom文件上看, 少了絕大部分的jar包引用, 十分的方便.

而項目中的yml配置, 如果只是使用最基本的功能, 可以一個都不配置, 照樣跑的好好的.

 


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

-Advertisement-
Play Games
更多相關文章
  • 本著開發與實施分離的思想,設計一個通用的報表設計窗體顯得尤為重要(下圖為圖一): 要求與優點: I、報表設計窗體支持所有單據調用,一種單據支持多個列印模板。 II、報表模板存儲在資料庫中。一是支持客戶端設計及保存模板,二是一次修改所有客戶端生效。 III、點擊保存是將模板保存在資料庫中,點擊另存為可 ...
  • 周日外出去玩,出行方式有步行,騎行,公車。每個人因人或環境等等因素而選擇的方式有所不同。簡單工廠是符合此類型的。只有在運行時,才知道使用的哪種方法。創建一個抽象類Base: public abstract class Base { public abstract string Mode(); } 下 ...
  • 一、WCF服務應用程式與WCF服務庫 我們在平時開發的過程中常用的項目類型有“WCF 服務應用程式”和“WCF服務庫”。 WCF服務應用程式,是一個可以執行的程式,它有獨立的進程,WCF服務類契約的定義,可以直接看到運行的效果。此項目模板基於IIS托管的程式,如本系列的第一節所示。在開發基於IIS托 ...
  • (一)搭建Spring.NET環境常見的DLL 1.spring.core --整個框架的基礎,實現了依賴註入的功能 2.Spring.AOP--提供面向方面編程(aop)的支持 3.Spring.Data--a定義了一個抽象的數據訪問層,可以跨越各種數據訪問技術(從ADO.NET到各種orm)進行 ...
  • mysql安裝後服務啟動不了 1.1 前言 最近真的是倒霉到家,裝個mysql都能把所有的問題給問候了一遍······不過這也是一個寶貴的經驗,得好好總結下,畢竟也不知道以後會不會再次遇到。如果有網友也能像我這樣倒霉,但是能夠幸運地看到我這個文章,並且真正解決問題,那我就欣慰了。 1.2 我的倒霉過 ...
  • 我想寫一個簡單的系列文章。主題很簡單,就是記錄下麵對上傳視頻需求時,攻城獅和普通人(泛指所有非技術人員)的一些區別。當然,從需求分析到最終完整實現,每個步驟都是有乾貨。我會儘量避免一些偏情緒化的表述。更多的時候,我們應該把註意力集中在各個需求點本身的技術實現上。 這個系列的主要目的,就是秀一下我們... ...
  • 上一篇: "Docker 三劍客之 Docker Compose" 閱讀目錄: Docker Machine 創建 Docker 主機 Docker Swarm 配置集群節點 Docker Service 部署單個集群服務 Docker Stack 部署多個集群服務,以及 GUI 管理頁面 dock ...
  • 前言:在應用於集團版客戶或SAAS平臺服務的業務系統中,流程管理系統需要支持多用戶組織模型。其中包括角色數據、流程定義數據和流程實例數據的多用戶標識綁定。本文旨在全面描述如何基於SlickOne敏捷開發框架實現上述基礎服務功能,形成一個完整的支持多用戶查看和維護各自流程數據的管理後臺系統。 1. 基 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...