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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...