SpringBoot項(xiàng)目創(chuàng)建與第一個SSM項(xiàng)目示例

本節(jié)介紹SpringBoot創(chuàng)建第一個示例SSM項(xiàng)目的完整過程觅廓,使用工具STS衣形,與IDEA操作基本類似。

示例代碼在:https://github.com/laolunsi/spring-boot-examples


前言

根據(jù)幾位網(wǎng)友反饋的結(jié)果,重新編輯了這篇文章肋坚。此篇文章先從環(huán)境配置開始,然后到項(xiàng)目創(chuàng)建肃廓,最后講述SSM框架整合智厌,展現(xiàn)一個完整SpringBoot項(xiàng)目創(chuàng)建與使用的過程。

基于maven搭建直接SSM或者SSH框架的麻煩之處盲赊,被各種配置文件(尤其是xml)折磨的在座各位應(yīng)該深有體會铣鹏。而SpringBoot的出現(xiàn)正好解決了這個問題,拋棄各種繁瑣的配置哀蘑,我們只需要一個application.properties文件就可以解決這些問題诚卸。

下面進(jìn)入正題葵第。


一、環(huán)境搭建

首先下載一個專為Spring設(shè)計的eclipse版本——Spring Tool Suite合溺,簡稱STS卒密。它是Eclipse的一個特殊版本,界面和操作與Eclipse都非常類似棠赛,下載zip包可以直接運(yùn)行哮奇。
注:IDEA和STS創(chuàng)建springboot項(xiàng)目的步驟和界面是完全一樣的。創(chuàng)建的項(xiàng)目結(jié)構(gòu)也相近睛约,sts創(chuàng)建的項(xiàng)目可以直接導(dǎo)入IDEA使用鼎俘。

先看一下界面:


file

二、創(chuàng)建SpringBoot項(xiàng)目

解壓壓縮包后運(yùn)行下面的exe文件(上面有綠色圖標(biāo)的)辩涝,然后你會看到上面的界面贸伐。
然后點(diǎn)擊左上角,F(xiàn)ile——new——Spring Starter Project怔揩。下面是詳細(xì)步驟:
第一步捉邢,new——>Spring Starter Project.


file

接著,name填入項(xiàng)目名稱商膊,group隨意歌逢,其他的不用管,這里的service URL指Spring boot官網(wǎng)地址翘狱。


file

然后秘案,version默認(rèn)選擇,Available中輸入查找潦匈,選中以下五項(xiàng):Web阱高、DevTools、MySQL茬缩、Mybatis赤惊、Thymeleaf。
(注:這里的環(huán)境可以先不選凰锡,之后根據(jù)需要在maven的依賴配置文件pom.xml中添加即可未舟。我這里先行加上,等會兒一一介紹用途)掂为。


file

最后點(diǎn)擊next/finish均可裕膀,等待一會兒,項(xiàng)目創(chuàng)建完畢勇哗,目錄如下:


file

注:如果resources下的static或者templates文件夾不存在的話昼扛,不用著急,這個是因?yàn)槲疑厦孢x擇了那些依賴才創(chuàng)建的欲诺,后面手動加一下也沒關(guān)系抄谐。


三渺鹦、項(xiàng)目啟動

到目前為止,SpringBoot項(xiàng)目已經(jīng)創(chuàng)建完畢了蛹含。
我們可以看到啟動類SpringBootDemoApplication.java這個類毅厚。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootDemoApplication {

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

這個類是干嘛的呢?
我們看到其中有main方法浦箱。
沒錯吸耿,SpringBoot項(xiàng)目就是使用這個類啟動的,右擊這個類憎茂,run as——Spring Boot App,項(xiàng)目就會啟動锤岸。
這里有一個誤區(qū):為什么按照我這里步驟創(chuàng)建會報錯竖幔。
這是由于我之前選擇添加了Web等依賴,此時項(xiàng)目是無法直接執(zhí)行的——看控制臺日志就能看出是數(shù)據(jù)庫沒有配置的原因是偷。而如果我沒有添加這些依賴拳氢,直接運(yùn)行SpringBootWebApplication.java文件,就可以啟動項(xiàng)目了蛋铆。
下面馋评,我們講解一下環(huán)境配置的問題——配置完成后就可以運(yùn)行這個空的SSM項(xiàng)目了哦。


四刺啦、環(huán)境配置

4.1 maven之pom.xml

為什么要先講maven呢留特?
因?yàn)槲抑罢fSSM——Spring+SpringMVC+Mybatis項(xiàng)目。這個應(yīng)該是大家比較感興趣的——目前企業(yè)里這一類項(xiàng)目大多數(shù)都是SSM框架了玛瘸。以前很火的SSH現(xiàn)在被使用的并不多蜕青。說個盤外話,SSH真的坑糊渊。
看一下我的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>com.example</groupId>
    <artifactId>SpringBootDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>SpringBootDemo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.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>
        <!-- springboot推薦的模板引擎,要想映射HTML/JSP渺绒,必須引入thymeleaf -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!-- 熱部署用贺喝,改變代碼不需要重啟項(xiàng)目  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        
        <!-- mysql連接  -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>


4.2 配置文件application.properties

SpringBoot項(xiàng)目的配置是基于application.properties這個文件的。在里面配置數(shù)據(jù)庫宗兼、Mybatis映射文件乃至更高級的Redis躏鱼、RabbitMQ等等(這里的配置文件重新修改過,github上為最新)殷绍。
注意:下面配置的數(shù)據(jù)庫地址挠他、賬號和密碼,必須完全與你本機(jī)一樣篡帕!如果你的數(shù)據(jù)庫賬號是其他名字殖侵,比如admin贸呢,請修改下面的配置。

# server config
server.port: 8081

# mysql
spring.datasource.url: jdbc:mysql://localhost:3306/umanager?useSSL=false&autoReconnect=true
spring.datasource.username: root
spring.datasource.password: root
spring.datasource.driver-class-name: com.mysql.jdbc.Driver
spring.datasource.dbcp2.validation-query: 'select 1'
spring.datasource.dbcp2.test-on-borrow: true
spring.datasource.dbcp2.test-while-idle: true
spring.datasource.dbcp2.time-between-eviction-runs-millis: 27800
spring.datasource.dbcp2.initial-size: 5
spring.datasource.dbcp2.min-idle: 5
spring.datasource.dbcp2.max-idle: 100
spring.datasource.dbcp2.max-wait-millis: 10000

# thymleaf
spring.thymeleaf.cache : false
    
# mybatis
mybatis.mapper-locations: classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case: true

4.3 啟動項(xiàng)目

找到SpringBootDemoApplication類拢军,Run As——Spring Boot App楞陷,項(xiàng)目啟動成功,控制臺不報錯茉唉。


file

五固蛾、SpringBoot+SSM框架整合示例

第一步,建立數(shù)據(jù)庫——這個很重要哦度陆。根據(jù)我們在application.properties的配置建立數(shù)據(jù)庫及表艾凯,我這里使用了umanager數(shù)據(jù)庫,以及user表懂傀,下面貼上我的建庫建表語句:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'ja', '123', '江蘇');
INSERT INTO `user` VALUES ('2', 'BL', '123', '新加坡');

第二步趾诗,創(chuàng)建BasicController.java(完整的項(xiàng)目目錄看最下面)

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import com.example.demo.model.bean.User;
import com.example.demo.model.dao.UserDAO;

// @RestController = @Controller + @ResponseBody
@RestController 
public class BasicController {
    
    @Autowired
    private UserDAO userDAO;
    
    @GetMapping(value = "")
    public String index() {
        return "login"; // 此處表示返回值是一個值為“l(fā)ogin”的String。不指向界面的原因是類的注解是@RestController
    }
    
    
    @GetMapping(value = "index.do")
    public ModelAndView index2() {
        return new ModelAndView("login"); // 此處指向界面
    }
    
    
    @GetMapping(value = "login.do")
    public Object login(String name, String password) {
        System.out.println("傳入?yún)?shù):name=" + name + ", password=" + password);
        if (StringUtils.isEmpty(name)) {
            return "name不能為空";
        } else if (StringUtils.isEmpty(password)) {
            return "password不能為空";
        }
        User user = userDAO.find(name, password);
        if (user != null) {
            return user;
        } else {
            return "用戶名或密碼錯誤";
        }
    }

}

這個類使用了User類和注入了UserDAO接口蹬蚁。我們同樣創(chuàng)建這兩個類:

public class User implements Serializable {
    
    private static final long serialVersionUID = -5611386225028407298L;
    
    private Integer id;
    private String name;
    private String password;
    private String address;

    // 省略get和set方法恃泪,大家自己設(shè)置即可
}
package com.example.demo.model.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.example.demo.model.bean.User;

@Mapper
public interface UserDAO {
    
    public User find(@Param("name")String name, @Param("password")String password);

    // 注: CRTL+Shift+O,快捷導(dǎo)入所有import
}

下面還需要mybatis映射接口到SQL語句的文件犀斋,根據(jù)application.properties中的配置mybatis.mapper-locations: classpath:mapper/*.xml,在resources文件夾下新建mapper文件夾贝乎,下面放入Mybatis的xml文件。
此處寫一個UserDAO.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.model.dao.UserDAO">
  <select id="find" resultType="com.example.demo.model.bean.User">
    SELECT id, name, password, address from user where name = #{name} and password = #{password}
  </select>
</mapper>

還需要一個login.html頁面叽粹,放在resources/templates文件夾下:

<!DOCTYPE html>
<html>
<!-- meta這一句指定編碼格式览效,能夠防止中文亂碼  -->
<meta charset="UTF-8" />
<head>
  <title>登錄</title>
</head>
<body>
  <form action="/login.do" method="GET">
          用戶名:<input type="text" id="name" name="name" />
          密碼:  <input type="password" id="password" name="password" />
    <input type="button" value="登錄" onclick="submit()" />
  </form>
</body>
</html>

下面,我們來看一下項(xiàng)目目錄結(jié)構(gòu):
![在這里插入圖片描述](02-SpringBoot SSM.assets/70-20191211222243726.png)


file

六虫几、啟動和測試

到目前為止朽肥,我們已經(jīng)在SpringBoot中整合了SSM框架,下面運(yùn)行看一下效果持钉。啟動Application類后衡招,控制臺無錯。在瀏覽器輸入:http://localhost:8081/每强,看到如下界面:

file
file

這個login字符串始腾,就是請求http://localhost:8081/經(jīng)BasicController處理獲得的。

下面測試一下登錄功能空执,輸入http://localhost:8081/index.do浪箭,看到如下界面:

file

輸入你的數(shù)據(jù)庫user表中的一個正確用戶,點(diǎn)擊登錄辨绊,獲得如下示例數(shù)據(jù):


file

如果輸入錯誤的數(shù)據(jù)奶栖,則:


file

這說明SSM框架已經(jīng)整合成功了!我們的SpringBoot+SSM第一個示例也就圓滿完成!P伞袍镀!


交流學(xué)習(xí)

個人網(wǎng)站:http://www.eknown.cn

GitHub:https://github.com/laolunsi

公眾號:猿生物語,"分享技術(shù)冻晤,也感悟人生"苇羡,歡迎關(guān)注!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鼻弧,一起剝皮案震驚了整個濱河市设江,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌攘轩,老刑警劉巖叉存,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異度帮,居然都是意外死亡歼捏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門够傍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甫菠,“玉大人挠铲,你說我怎么就攤上這事冕屯。” “怎么了拂苹?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵安聘,是天一觀的道長。 經(jīng)常有香客問我瓢棒,道長浴韭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任脯宿,我火速辦了婚禮念颈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘连霉。我一直安慰自己榴芳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布跺撼。 她就那樣靜靜地躺著窟感,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歉井。 梳的紋絲不亂的頭發(fā)上柿祈,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼躏嚎。 笑死蜜自,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的紧索。 我是一名探鬼主播袁辈,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼珠漂!你這毒婦竟也來了晚缩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤媳危,失蹤者是張志新(化名)和其女友劉穎荞彼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體待笑,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸣皂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了暮蹂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寞缝。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖仰泻,靈堂內(nèi)的尸體忽然破棺而出荆陆,到底是詐尸還是另有隱情,我是刑警寧澤集侯,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布被啼,位于F島的核電站,受9級特大地震影響棠枉,放射性物質(zhì)發(fā)生泄漏浓体。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一辈讶、第九天 我趴在偏房一處隱蔽的房頂上張望命浴。 院中可真熱鬧,春花似錦贱除、人聲如沸生闲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跪腹。三九已至,卻和暖如春飞醉,著一層夾襖步出監(jiān)牢的瞬間冲茸,已是汗流浹背屯阀。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留轴术,地道東北人难衰。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像逗栽,于是被迫代替她去往敵國和親盖袭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容