Spring boot 框架部署

Spring boot 框架部署

概述

從SSM(spring spring MVC mybatis)到spring bootjava

本文前置知識點,spring, mybatis, tomcat等,這部分細節不在細講mysql

spring是一個你們族,spring MVC, spring boot都是其中的一部分web

其中spring 提供了著名的IOC 和 AOPspring

IOC就是所謂控制反轉,我要一個類,我不去本身new,而去拿一個,這樣咱們就能夠中框架的自動裝配或者是xml配置下降耦合,提升效率。sql

AOP是面向切面編程,一種編程思路,咱們須要修改沒寫邏輯不去修改代碼,而是添加執行該函數前作什麼。減小對原代碼的修改需求。數據庫

spring MVC是一個web模塊,在原來的SSM框架中,用戶瀏覽器請求,交給spring MVC處理,返回頁面。而如何處理,咱們單獨出來一個業務層。這部分來寫咱們的邏輯代碼。apache

而業務層又但願不用管數據庫相關的問題,就多出了一個dao層,也就是數據可持久化層。編程

而spring boot視乎只是代替了原SSM層中 spring MVC的做用。他們對業務的抽象是同樣的。瀏覽器

準備工做

首先我須要準備

spring boot

打開網站後填寫信息,在右側依賴添加

Web, DevTools, Aspects, Thymeleaf, Mysql, MyBatis

DevTools:熱部署

Thymeleaf: 一種控制器數據交互方式

Mysql,MyBatis 數據庫依賴

點擊建立後,會自動下載一個包,用IDEA打開包裏面的pom.xml便可打開項目

等待項目加載。。。

初始目錄以下

cwl@cwl-PC:~/web/spring boot init$ tree
.
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── demo
    │   │               └── DemoApplication.java
    │   └── resources
    │       ├── application.properties
    │       ├── static
    │       └── templates
    └── test
        └── java
            └── com
                └── example
                    └── demo
                        └── DemoApplicationTests.java

14 directories, 6 files
wenda數據庫下的test表
+----------+----------+
| username | password |
+----------+----------+
| cwl      | cwl      |
+----------+----------+

最終咱們須要實現一個頁面訪問數據庫的過程

Controller部分

用戶發起瀏覽器請求頁面,被咱們交給控制器處理

咱們添加項目結構文件夾

咱們在main.java.com.example.demo目錄下建立四個文件夾

controller

dao

model

service

在main.resources下建立文件夾mapper後面放咱們的映射文件

controller是咱們的控制器,咱們在controller目錄下建立一個類

MainController表明咱們的主頁控制器

一個普通的類,咱們須要在類上面添加註解@Controller

而後編寫一個方法,getMainWeb以下

MainController.java

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MainController {

    @RequestMapping(path = "/", method = RequestMethod.GET)
    @ResponseBody
    public String getMainWeb() {
        return "main";
    }

}

@Controller表明咱們這是一個控制器

@RequestMapping(path = "/", method = RequestMethod.GET)

表明咱們瀏覽器訪問「/"路徑會被交給這個方法

@ResponseBody 表示返回的是字符串。也就是頁面的字符串,

到這裏咱們已經配置完頁面了,都是因爲咱們引入了數據庫模塊,可是咱們沒有配置數據庫,依舊跑步起來。因此咱們作先在appilcation.properties下填上一下內容,具體須要配置成你本地的參數

# mysql 配置
# 數據庫配置 wenda是數據庫的名字
spring.datasource.url=jdbc:mysql://localhost/wenda
spring.datasource.username=root
spring.datasource.password=1143316492

## Mybatis 配置
# model要改爲模型的包
# 映射的包
mybatis.typeAliasesPackage=com.webdemo.demo.model
mybatis.mapperLocations=classpath:mapper/*.xml

數據庫部分咱們先放一邊,這麼作只是爲了框架不報錯

這樣運行項目輸入localhost:8080 就能訪問到一個只有」main「字符串的頁面,咱們能夠吧main換成html代碼的字符串,當時這樣未免太麻煩了。

因而:

咱們在resources目錄下templates建立home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home</title>
</head>
<body>
    <h1>This is home pages</h1>
</body>
</html>

MainController.java

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MainController {

    @RequestMapping(path = "/", method = RequestMethod.GET)
    //@ResponseBody
    public String getMainWeb() {
        return "home";
    }

}

注意上面咱們註釋掉的部分,那部分的註釋咱們是告訴框架咱們返回的是字符串,去掉後,框架就會去templates下面去找home文件。前綴後綴的具體細節能夠在application.properties裏面配置。

到這裏咱們解決了Controller層的問題。

另外還有一些Controller層的細節

如何交互數據,這裏咱們用的是thymeleaf模板的內容

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MainController {

    @RequestMapping(path = "/", method = RequestMethod.GET)
    //@ResponseBody
    public String getMainWeb(Model model) {
        model.addAttribute("message", "this is main page");
        return "home";
    }

}

咱們修改MainController的內容,注意咱們添加了一個參數列表,調用了一個addAttribute.這個意思是咱們加入了一個映射,在頁面中咱們去message的值會編程後面那個字符串。具體怎麼取,就是thymeleaf的定義了,咱們在html頁面中修改

<h1 th:text="${message}"></h1>

這樣控制層和頁面的數據交互解決了。更多細節咱們去查那個框架便可。

Dao層

數據訪問層,dao層,有人人用mapper層,實際上是一個意思,爲了方便,咱們演示的時候直接從控制層調用數據庫部分

咱們添加模型類User數據,放在model文件夾下,類型根據咱們的數據庫來,這部分是Mybatis的知識,這裏不在贅述。

package com.example.demo.model;

public class User {

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

在dao目錄下咱們建立UserDao的接口

package com.example.demo.dao;

import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface UserDao {

    @Select({"select username, password from test where username = #{name}"})
    User getUserByUsername(String name);

}

一些註解的說明

@Component ——表示一個自動掃描 component
@Repository ——表示持久化層的 DAO component
@Service ——表示業務邏輯層的 Service component
@Controller ——表示表示層的 Controller component

@Mapper通過個人測試無效,不知道什麼回事,若是隻這樣寫會加載不到這個bean

另外一種解決方法是在入口處手動配置

package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.demo.dao")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

上面的@MapperScan

而後在Controller層

package com.example.demo.controller;

import com.example.demo.dao.UserDao;
import com.example.demo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MainController {

    @Autowired
    UserDao userDao;

    @RequestMapping(path = "/", method = RequestMethod.GET)
    public String getMainWeb(Model model) {
        User user = userDao.getUserByUsername("cwl");
        System.out.println(user.getUsername() + " " + user.getPassword());
        return "home";
    }
}

上面的userDao是一個接口,可是咱們的框架會給咱們自動裝載爲bean

@Selcet替咱們實現方法,可是更復雜的部分須要用mapper手動寫

咱們註釋掉剛剛的@select

在mapper下添加xml,效果是同樣的

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.dao.UserDao">
    <resultMap id="userResultMap" type="com.example.demo.model.User">
        <result column="username" property="username" />
        <result column="password" property="password" />
    </resultMap>

    <select id="getUserByUsername" parameterType="com.example.demo.model.User" resultMap="userResultMap">
        select *
        from test
        where username = #{name}
    </select>

</mapper>

到這裏咱們核心問題都解決了,上面咱們雖然經過controller調用dao層,可是核心已經出來了,添加業務中間層已經不是框架的問題了,不在細講了。

最後項目結構

.
├── demo.iml
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── demo
│   │   │               ├── controller
│   │   │               │   └── MainController.java
│   │   │               ├── dao
│   │   │               │   └── UserDao.java
│   │   │               ├── DemoApplication.java
│   │   │               ├── model
│   │   │               │   └── User.java
│   │   │               └── service
│   │   └── resources
│   │       ├── application.properties
│   │       ├── mapper
│   │       │   └── UserMapper.xml
│   │       ├── static
│   │       └── templates
│   │           └── home.html
│   └── test
│       └── java
│           └── com
│               └── example
│                   └── demo
│                       └── DemoApplicationTests.java
└── target
    ├── classes
    │   ├── application.properties
    │   ├── com
    │   │   └── example
    │   │       └── demo
    │   │           ├── controller
    │   │           │   └── MainController.class
    │   │           ├── dao
    │   │           │   └── UserDao.class
    │   │           ├── DemoApplication.class
    │   │           └── model
    │   │               └── User.class
    │   ├── mapper
    │   │   └── UserMapper.xml
    │   └── templates
    │       └── home.html
    ├── generated-sources
    │   └── annotations
    ├── generated-test-sources
    │   └── test-annotations
    └── test-classes
        └── com
            └── example
                └── demo
                    └── DemoApplicationTests.class
相關文章
相關標籤/搜索