從.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() { returnid; } 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等資料庫連線之後我們發現,基本上我們都離不開如下幾個步驟:
- 加入對應依賴
- 配置檔案配置對應資料庫資訊
- 資料操作層繼承想要的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學習第九篇——SpringBoot下Thymeleaf
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