1. 程式人生 > >從.Net到Java學習第六篇——SpringBoot+mongodb&Thymeleaf&模型驗證

從.Net到Java學習第六篇——SpringBoot+mongodb&Thymeleaf&模型驗證

SpringBoot整合mongodb

  MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。
如果你沒用過MongoDB,可以先去看下我的文章:https://www.cnblogs.com/jiekzou/category/851166.html
  接上一篇,修改pom.xml,新增mongodb的依賴

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

  新增mongodb資料庫連線,修改application.yml

spring:
  profiles:
    active: dev
  #  mongodb
  data:
    mongodb:
      database: test
      port: 27017
      host: 192.168.1.18

 修改原來的Person實體類

public class Person {
    @Id
    private Long id;

    public Long getId() {
        return
id; } public void setId(Long id) { this.id = id; } private String name; private String sex; public Person() { } public Person(Long id,String name, String sex) { this.id=id; this.name = name; this.sex = sex; }
public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }

新建包repository,然後在包下建立一個數據操作層介面PersonRepository,繼承MongoRepository,程式碼如下:

public interface PersonRepository extends MongoRepository<Person,Long> {
}

建立一個controller類PersonController進行增刪改查測試

@RestController
public class PersonController {
    @Autowired
    private PersonRepository userRepository;

    @GetMapping("save")
    public String save() {
        Person userInfo = new Person(System.currentTimeMillis(),"李尋歡","男");
        userRepository.save(userInfo);
        return "success";
    }

    @GetMapping("getUserList")
    public List<Person> getUserList() {
        List<Person> userInfoList = userRepository.findAll();
        return userInfoList;
    }

    @GetMapping("delete")
    public String delete(Long id) {
        userRepository.delete(id);
        return "success";
    }

    @GetMapping("update")
    public String update(Long id, String username, String password) {
        Person userInfo = new Person(id, username, password);
        userRepository.save(userInfo);
        return "success";
    }
}

訪問http://localhost:8083/boot/save,刷幾遍,新增幾條資料

然後再訪問http://localhost:8083/boot/getUserList檢視資料

當然,我們也可以使用視覺化的mongodb管理工具去檢視,這裡我使用的是robo3t

在配置了mysql、mongodb等資料庫連線之後我們發現,基本上我們都離不開如下幾個步驟:

  1. 加入對應依賴
  2. 配置檔案配置對應資料庫資訊
  3. 資料操作層繼承想要的repository

SpringBoot引用Thymeleaf

Thymeleaf就是一個模板引擎和.net的razor一樣。Spring boot 推薦用來代替jsp。
Thymeleaf的優點

  •     Thymeleaf 在有網路和無網路的環境下皆可執行,即它可以讓美工在瀏覽器檢視頁面的靜態效果,也可以讓程式設計師在伺服器檢視帶資料的動態頁面效果。(當有資料返回到頁面時,Thymeleaf 標籤會動態地替換掉靜態內容,使頁面動態顯示。)
  •     Thymeleaf 開箱即用的特性。(它提供標準和spring標準兩種方言,可以直接套用模板實現JSTL、 OGNL表示式效果。)
  •     Thymeleaf 提供spring標準方言和一個與 SpringMVC 完美整合的可選模組,可以快速的實現表單繫結、屬性編輯器、國際化等功能。

另外,Thymeleaf是一個XML/XHTML/HTML5模板引擎,可用於Web與非Web環境中的應用開發。它是一個開源的Java庫,基於Apache License 2.0許可,由Daniel Fernández建立,該作者還是Java加密庫Jasypt的作者。

由於Thymeleaf使用了XML DOM解析器,因此它並不適合於處理大規模的XML檔案。也就是說它的效能是有一定問題的,如果檔案較大的情況下。

SpringBoot引用Thymeleaf依賴

修改pom.xml,新增如下依賴

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

這裡有個坑,預設情況下hymeleaf中所有的標籤都必須成對出現,否則IDEA執行時就會報錯:" 必須由匹配的結束標記終止..“。

據說spring boot 2.0已結修復了這個標籤的問題,但是我這裡目前用的版本是低於2.0的,所以需要額外處理。

繼續新增依賴

        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>1.9.22</version>
        </dependency>

然後修改application.yml中的配置,

spring:
  profiles:
    active: dev
  thymeleaf:
    mode: LEGACYHTML5

新建一個控制器類來做測試,AreaPageController,

@Controller
public class AreaPageController{
    @Autowired
    private AreaService areaService;

    @GetMapping("/addArea")
    public String addArea(Model model) {
        model.addAttribute("area", new Area());
        return "addArea";
    }
    @RequestMapping(value = "/addArea",method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
    public String addArea(@Valid @ModelAttribute Area area, BindingResult bindingResult){
        if (bindingResult.hasErrors()) {
            return "addArea";
        }else{
            Map<String,Object> modelMap= new HashMap<String,Object>() ;
            modelMap.put("success",areaService.addArea(area));
            return "result";
        }
    }
}

修改之前的Area實體類,這東西就跟.net mvc 裡面的模型驗證一樣

package com.yujie.model;

import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;

public class Area {
    private Integer areaId;
    @NotEmpty
    @Size(min=2, max=30)
    private String areaName;
    @NotNull
    @Min(1)
    @Max(200)
    private Integer priority;
    private Date createTime;
    private Date lastEditTime;
  ......
}

templates目錄是存放html檔案的,在templates目錄下面新建一個html檔案addArea.html,這個就相當於.net mvc中的razor檢視。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"><!--引入thymeleaf-->
<head>
    <meta charset="UTF-8" />
    <title>新增區域</title></head>
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<body>
    <h2 style="color:green;text-align: center;">新增區域</h2>
    <form class="form-horizontal" role="form" action="#" th:action="@{/addArea}" th:object="${area}" method="post">
        <div class="form-group"><label for="name" class="col-sm-2 control-label">區域名稱:</label>
            <div class="col-sm-8"><input type="text" th:field="*{areaName}" class="form-control" id="areaName"
                                          placeholder="輸入區域名稱"></div>
            <label class="col-sm-2" style="color:red" th:if="${#fields.hasErrors('areaName')}" th:errors="*{areaName}">區域名稱錯誤</label></div>
        <div class="form-group"><label for="priority" class="col-sm-2 control-label">優先順序</label>
            <div class="col-sm-8"><input type="text" th:field="*{priority}" class="form-control" id="priority"
                                          placeholder="輸入優先順序"></div>
            <label class="col-sm-2" style="color:red" th:if="${#fields.hasErrors('priority')}" th:errors="*{priority}">優先順序錯誤</label></div>
        <div class="form-group">
            <div class="col-sm-12" style="text-align: center">
                <button type="submit" class="btn btn-primary" id="btn">Submit</button>
                <input type="reset" class="btn btn-warning" value="Reset"/></div>
        </div>
    </form>
</body>
</html>

執行結果如下:

 

相關推薦

.Net到Java學習——SpringBoot+mongodb&Thymeleaf&模型驗證

SpringBoot整合mongodb   MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。如果你沒用過MongoDB,可以先去看下我的文章:https://www.cnblogs.com/jiekzou/category/851166.ht

.Net到Java學習——SpringBootThymeleaf

Thymeleaf概述   Thymeleaf 是一個流行的模板引擎,該模板引擎採用java語言開發。模板引擎是一個技術名稱,是跨領域平臺的概念,在java語言體系下有模板引擎,在C#、PHP語言體系下也有模板引擎,甚至在JavaScript中也會用到模板引擎技術。Java生態下的模板引擎有Thymel

.Net到Java學習——SpringBoot實現session共享和國際化

區分 cal request 展示 hang 輸入 nds www target SpringBoot Session共享 修改pom.xml添加依賴 <!--spring session--> <dependen

.Net到Java學習——SpringBoot Redis 快取穿透

場景描述:我們在專案中使用快取通常都是先檢查快取中是否存在,如果存在直接返回快取內容,如果不存在就直接查詢資料庫然後再快取查詢結果返回。這個時候如果我們查詢的某一個數據在快取中一直不存在,就會造成每一次請求都查詢DB,這樣快取就失去了意義,在流量大時,可能DB就掛掉了。 穿透:頻繁查詢一個不存在的資料,

SpringBoot 2.X課程學習 | :挖掘配置檔案的祕密

  一、兩種配置檔案獲取值的方式         因為普遍屬性

機器學習

文件分類 是機器智慧的一個應用,最有價值的包括垃圾資訊過濾。 早期對垃圾資訊進行過濾所用的是基於規則的分類器,使用時事先設計好一組規則,用以指明某條資訊是否屬於垃圾資訊。典型的規則包括英文大寫字母的過度使用、與醫藥相關的單詞,或是過於花哨的HTML用色等 新: 程式在開始階段和逐漸收

Python 語言學習 :迭代和解析

Python 語言學習 第六篇:迭代和解析 Python中的迭代是指按照元素的順序逐個呼叫的過程,迭代概念包括:迭代協議、可迭代物件和迭代器三個概念。 迭代協議是指有__next__()函式的物件會前進到下一個結果,而到達系列的末尾時,則會引發StopIteration異常。為了支援迭代協議

c++學習(拷貝建構函式)

1.當函式的引數為類的物件時 #include<iostream> using namespace std; class CExample { private:     int a; public:     CExample(int b) &n

思維導圖學習 | :java學習特別,10-15k薪資應具備的技能

配套Ximnd學習導圖下載地址 寫在最後 歡迎關注、喜歡、和點贊後續將推出更多的思維導圖教程,敬請期待。 歡迎關注我的微信公眾號獲取更多更全的學習資源,視訊資料,技術乾貨! 公眾號回覆“學習”

初步學習Django-:models.py模型定義

one 字符串 arch rim 需要 tof file 排序 tar 一. 上面的代碼中: 1. 每個數據模型都繼承django.db.models.Model。他們的父類Model包含了所有必要的和數據庫交互的方法,並提供了一個簡介漂亮的數據庫定義語法。

Python 語言學習 :動態型別模型

Python的變數不用宣告,賦值之後就可以直接使用,型別是在執行過程中自動確定的,這就是動態型別模型。該模型把變數和物件設計成兩個不同的實體,物件是儲存資料的地方,物件的型別是由初始值自動決定的,而變數僅僅是物件的引用。變數是通用的,同一個變數名可以引用任何型別的物件。 一,變數、物件和引用 動態型別模型

Python 學習日記 -- 深淺拷貝

python深淺拷貝: 1、字符串和數字import copy #淺拷貝 copy.copy() #深拷貝 copy.deepcopy() #################################################################################

mongodb文章~關於mongodb的自動備份腳本

add use print tar upd dmi log mkdir -p ddr 一 簡介:今天恰好寫了一個關於mongodb的備份腳本,分享下 二 前沿:此腳本適用於單實例和副本集,不適用於分片集群 三 內容: #!/bin/sh user=

小白學習windows------備份/磁盤卷

windows第一部分 備 份一、什麽是備份? 備份,即另外準備一– 為應付文件、數據丟失或損壞等可能出現的意外情況,將電子計算機存儲設備中的數據復制到大容量存儲設備中二、備份對象的類別1、系統備份– 針對整個操作系統進行備份– 當操作系統損壞或者無法啟動時,能通過備份快速恢復2、數據備份–

.Net到Java學習——spring boot+mybatis+mysql

jar fig targe list pro ble TE png tween 環境:mysql5.7 新建mysql數據庫demo,然後執行如下sql腳本進行數據表創建和數據初始化: -- ---------------------------- -- Tabl

MongoDB基礎教程系列-- MongoDB 索引

https://www.cnblogs.com/liruihuan/p/6682575.html 使用索引可以大大提高文件的查詢效率。如果沒有索引,會遍歷集合中所有文件,才能找到匹配查詢語句的文件。這樣遍歷集合中整個文件的方式是非常耗時的,特別是處理大資料時,耗時幾十秒甚至幾分鐘都是有可能的。

零開始學產品:更強大的測試,自動化測試和效能測試

本篇為【從零開始學產品】系列課第1章第5節 歡迎到公眾號選單欄,獲取產品經理課程更多資料     “測試就是拿點滑鼠在電腦上瞎點,或者是用手機隨便戳幾下麼?” “不,是有計劃有意圖的測試,比如說,邊界測試,隨機測試,端到端測試等等。

「Odoo 基礎教程系列」—— Todo 應用開始(5)

大家好鴨,我又來更新啦!還記得我們在第二篇教程中提到過的動作(actions)嗎,今天我們就來專門講講在 Odoo 中的 action,學習不同型別的動作對應的應用場景,並且在我們的 Todo 應用中使用上其中一些型別的動作。 視窗動作 視窗動作在 Odoo 中是

SpringBoot統一異常處理

一、什麼是異常處理 異常(Exception)是程式在執行時可能出現的會導致程式執行終止的錯誤。這種錯誤是不能通過編譯系統檢查出來的,如果不進行異常處理,程式將中斷無法提供服務。 二、如何使用Spring Boot異常處理 案例: 獲取某個女生的年齡並判斷小於10,返

】Qt學習與使用---在qt中列印PDF檔案(不是生成PDF)

1、目的 如題,列印pdf檔案中的內容。 2、思路 (1)思路1:可以通過Poppler類來讀取pdf中的內容,並轉化成圖片,再 列印這些圖片。這個方法的瑕疵是,需要在列印的時候準確的寫出一頁圖片在A4紙上的列印座標和大小。否則會導致與原文不同。 (2)思路2:呼叫系統介面,讓win