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

SpringBoot系列目錄css

SpringBoot整合mongodb

  MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。
若是你沒用過MongoDB,能夠先去看下個人文章:https://www.cnblogs.com/jiekzou/category/851166.html
  接上一篇,修改pom.xml,添加mongodb的依賴html

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

  添加mongodb數據庫鏈接,修改application.ymljava

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

 修改原來的Person實體類mysql

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進行增刪改查測試spring

@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,刷幾遍,添加幾條數據sql

而後再訪問http://localhost:8083/boot/getUserList查看數據mongodb

固然,咱們也可使用可視化的mongodb管理工具去查看,這裏我使用的是robo3t數據庫

在配置了mysql、mongodb等數據庫鏈接以後咱們發現,基本上咱們都離不開以下幾個步驟:json

  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文件。也就是說它的性能是有必定問題的,若是文件較大的狀況下。

關於Thymeleaf的語法能夠參考官網:https://www.thymeleaf.org/documentation.html

spring boot(四):thymeleaf使用詳解

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>

運行結果以下:

 

其它學習資料:Spring Web MVC框架(十二) 使用Thymeleaf

相關文章
相關標籤/搜索