前面完成了ssm的整合, 整个过程可以说很繁杂, 各种配置, 很容易让人晕掉.

这里使用spring boot 的方式来实现ssm(1)中的功能.

一. 建项目

1. 使用 idea 来创建 spring boot 项目, 是比较简单的, 如果使用eclipse的话, 要装插件, 比较麻烦, 那这里, 就直接使用idea来做吧

2. 这里只需要修改下面圈出来的部分. Java Version最好使用>=8.

3. 这里直接选择web就可以了, 缺什么, 可以在后面加就好

4. 选择路径

经过这么几步操作, 就完成了基本的新建工作.

在新建的过程中, 可能会非常的慢, 因为第一次建, 要下载很多jar包. 而且可能下载还比较慢.

这里可以在maven 的 setting.xml文件中, 加入一个阿里云的镜像, 对于下载更新jar包, 是有帮助的.

<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>

二. 目录结构

拿到刚建的项目后, 我在里面新增了几个package. 在这里, 除了controller要建之外, 别的都可以先空着.

三. 配置文件 -- 这一步直接跳过, 也是能正常运行的. 不急的话, 就先看看这里把

默认的配置文件是 application.properties, 这里我并没有使用这个格式的文件, 而是使用了 yml 格式的文件, 配置起来, 更加的简洁, 且效果是一样的.

先来看一下application.yml文件

#标明引入那个配置文件
spring:
profiles:
active: dev #自定义属性
elvin:
name: elvinle
age: 28
birthday: 1990-12-02 #自定义属性
content: "elvin's name is ${elvin.name} and age is ${elvin.age} and birthday is ${elvin.birthday}"

开发的过程中, 可能会部署到好几个环境, 比如开发环境, 测试环境, 那么这里的spring.profiles.active就起作用了, 可以新建多个文件, 这里配置, 后面使用哪个文件的配置.

再来看看application-dev.yml文件

#配置项目端口和根路径
server:
port: 8080
context-path: /boot spring:
#配置项目的数据库链接信息
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///test?useUnicode=true&characterEncoding=utf-8
username: root
password: root
jpa:
hibernate:
ddl-auto: update
show-sql: true

server.port 和 server.context-path 分别表示端口和根路径. 它们都是可以不配置的. 后面的配置, 暂时不用看

在这两个文件中, 可以看到, 我定义了自己的属性. 那么他们怎么接收呢

在目录中, 有个properties的文件夹, 我在里面建了个类来接收

package org.elvin.boot.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* author: Elvin
* Date: 2017/12/4 15:10
* Description:
*/
@Component
@ConfigurationProperties(prefix = "elvin")
public class ElvinProperties { private String name; private Integer age; private String birthday; public String getName() {
return name;
} @Override
public String toString() {
return "Elvin{" +
"name='" + name + '\'' +
", age=" + age +
", birthday='" + birthday + '\'' +
'}';
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getBirthday() {
return birthday;
} public void setBirthday(String birthday) {
this.birthday = birthday;
}
}

使用的地方在controller中.

四. 实体类

package org.elvin.boot.pojo;

/**
* author: Elvin
* Date: 2017/12/4 15:37
* Description:
*/ public class Book { private Integer id; private String name; private String publishTime; private Integer price; @Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", publishTime='" + publishTime + '\'' +
", price=" + price +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPublishTime() {
return publishTime;
} public void setPublishTime(String publishTime) {
this.publishTime = publishTime;
} public Integer getPrice() {
return price;
} public void setPrice(Integer price) {
this.price = price;
}
}

这里实体类就随便建一下了, 这里还不是他的完全体, 在下一篇, 会进行部分修改

五. controller

package org.elvin.boot.controller;

import org.elvin.boot.pojo.Book;
import org.elvin.boot.properties.ElvinProperties;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.*; /**
* author: Elvin
* Date: 2017/12/4 15:08
* Description:
*/
@RestController
@RequestMapping("first")
public class FirstController { @Autowired
private ElvinProperties elvinProperties; //接收配置文件中,自定义的content属性
@Value("${content}")
private String content; @GetMapping("properties")
public Map<String, Object> properties(){
Map<String, Object> map = new HashMap<>();
map.put("content", content);
map.put("elvinProperties", elvinProperties);
return map;
} @PostMapping("all")
public List<Book> all() {
return getBookList();
} //region private method
private List<Book> getBookList() {
List<Book> bookList = new ArrayList<>();
String[] nameStrs = {"吴", "一", "雪", "动", "额", "阿", "前", "里", "排"};
Random r = new Random();
String timeStr = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
for (int i = 0; i < 10; i++) {
Book b = new Book();
b.setId(i + 1);
b.setName(nameStrs[r.nextInt(5)] + nameStrs[r.nextInt(9)]);
b.setPublishTime(timeStr);
b.setPrice(r.nextInt(100));
bookList.add(b);
}
return bookList;
}
//endregion
}

如果是做前后端分离的话, 那么到这里, 就告一段落了. 先来看看访问结果吧.

六. 结果(前后端分离)

1. 使用postman发送get请求

这里可以看到, 自定义配置, 都能够正常获取到

2. 使用postman来发送post请求.

如果还是希望使用返回页面数据的方式, 则还要继续一步配置.

个人还是推荐使用前后端分离的开发方式的. 怎么说呢, 大家都知道, mvc中的v指的就是视图, 在mvc中, 是需要读取视图, 然后解析视图, 最后返回解析完的视图数据的. 过程还是比较复杂和繁琐的, 而且这部分的逻辑处理, 全都在服务器端完成, 即使这里使用了缓存, 对服务器还是有性能损耗的. 如果把这部分损耗转嫁到客户端的浏览器中去, 可以节省不少的性能和空间.

七. view

1. 在pom.xml中, 加入一个配置.

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

这里引入的是 Spring boot 推荐使用的 thymeleaf 模板, 和freemarker, jsp 功能是差不多的

2. 开发状态下, 去yml文件中, 修改下缓存配置

spring:
thymeleaf:
cache: false
#以下都是默认配置,可以不写
prefix: /templates/
suffix: .html
mode: HTML5
encoding: UTF-8
content-type: text/html

3. controller

在包里面重新建一个控制器文件 TwoController.

package org.elvin.boot.controller;

import org.elvin.boot.pojo.Book;
import org.joda.time.DateTime;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; /**
* author: Elvin
* Date: 2017/12/4 16:35
* Description:
*/
@Controller
@RequestMapping("two")
public class TwoController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("hello", "TwoController.hello()");
return "hello";
} @GetMapping("index")
public String index(){
return "/two/index";
} @GetMapping("detail")
public String detail(Model model){
Book book = new Book();
book.setName("book");
book.setId(1);
book.setPrice(110);
book.setPublishTime(new DateTime().toString("yyyy-MM-dd"));
model.addAttribute("book", book);
return "two/detail";
}
}

4. view

我这里建了三个 html 文件, hello和index就不看了, 里面没有什么内容, 主要看detail.html文件

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>detail</title>
</head>
<body>
<h1 th:inline="text">two/detail.html</h1>
<p th:text="${book.id}"></p>
<p th:text="${book.name}"></p>
<p th:text="${book.price}"></p>
<p th:text="${book.publishTime}"></p>
</body>
</html>

5. 结果

八. 配置文件

做完了这么多, 来看看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>org.elvin</groupId>
<artifactId>boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>boot</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.6</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

本身就不多的pom文件里面, 绝大部分都是spring boot 自己生成的, 只有 joda-time 和 thymeleaf 是我手动添加的.

从这里的pom文件上看, 少了绝大部分的jar包引用, 十分的方便.

而项目中的yml配置, 如果只是使用最基本的功能, 可以一个都不配置, 照样跑的好好的.

spring boot实现ssm(1)功能的更多相关文章

  1. spring boot实现ssm(2)功能

    spring 和 mybatis 整合的那篇: ssm(2) . 配置文件比ssm(1) 更多, 在做项目的时候, 配置文件是一个让人头大的事情. 那么在spring boot中, 实现相同功能, 需 ...

  2. 自我救赎 → 利用 IDEA 和 Spring Boot 搭建 SSM

    前言 开心一刻 儿子读高中放学回来了,一向不管他学习的我突然来了兴趣,想看看他的学习他的状况,抄起他的数学习题看了起来,当看到 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x ...

  3. spring Boot 简单的登录功能,利用了jdbcTemplate.class完成sql语句的执行,无需service层、dao层和.xml文件

    1.搭建SpringBoot项目首先我们先在IDEA上创建一个SpringBoot的Web项目(1)file ——> new ——> project——> Spring Initia ...

  4. spring boot集成spring-boot-starter-mail邮件功能

    前情提要 以目前IT系统功能来看,邮件功能是非常重要的一个功能.例如:找回密码.邮箱验证,邮件动态码.忘记密码,邮件营销等,都需要用到邮件功能.结合当下最流行的spring boot微服务,推出了sp ...

  5. Spring Boot 实现看门狗功能 (调用 Shell 脚本)

    需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启.程序升级(如果只需要实现自动升级功能可以使用 inotify)等功 ...

  6. spring boot 开启Druid监控功能

    1.配置yml spring: datasource: # 数据源基本配置 username: song password: 123456 driver-class-name: com.mysql.j ...

  7. Spring Boot Admin 日志查看功能

    按照官方配置POM和配置文件后,能够结合Eureka查看各微服务状态,但是日志始终查看不了,出现406等错误. 最后偶然发现,是在在从官方网站拷贝配置的时候,出现的问题. logging.file=* ...

  8. [Spring Boot 系列] 集成maven和Spring boot的profile功能

    由于项目的需要, 今天给spirng boot项目添加了profile功能.再网上搜索了一圈,也没有找到满意的参考资料,其实配置并不难,就是没有一个one stop(一站式)讲解的地方,所以有了写这篇 ...

  9. Spring Boot入门(11)实现文件下载功能

      在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能.   还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会.   本次建立的Spring Boot项目的主要功能 ...

随机推荐

  1. A Magic Lamp -- hdu -- 3183

    http://acm.hdu.edu.cn/showproblem.php?pid=3183 A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)   ...

  2. AngularJS 路由 resolve属性

    当路由切换的时候,被路由的页面中的元素(标签)就会立马显示出来,同时,数据会被准备好并呈现出来.但是注意,数据和元素并不是同步的,在没有任何设置的情况下,AngularJS默认先呈现出元素,而后再呈现 ...

  3. day05_雷神_函数进阶

    #day05 1.迭代器 1.1可迭代对象 str,list,tuple,dict,set,range,文件句柄 等都是可迭代对象 第一种方法:在该对象中,含有__iter__方法的就是可迭代对象,遵 ...

  4. 微擎开启性能优化里面的性能优化memcache内存优化及数据库读写分离

    http://www.mitusky.com/forum.php?mod=viewthread&tid=3135 [微擎 安装使用] 微擎开启性能优化里面的性能优化memcache内存优化及数 ...

  5. Martin Fowler 分层测试概念博文分享

    在我们测试工作中,常常遇到这样的问题:开发与测试团队分属不同的不同(部门隔离.沟通不畅),质量职责划分不清(出现bug往往都是测试人员背锅),需求的不确定和易变性(需求不断变化导致代码不停更新.产品重 ...

  6. 第二节:创建模型,使用Code First,配置映射关系

    这一节,实现模型的创建,配置映射关系 使用Code First数据迁移. 创建模型 一,首先创建几个接口:实体接口,聚合根接口,值对象接口 1,实体接口: 2,聚合根接口: 3,值对象接口: 二,模型 ...

  7. 浏览器环境下Javascript脚本加载与执行探析之DOMContentLoaded

    在”浏览器环境下Javascript脚本加载与执行探析“系列文章的前几篇,分别针对浏览器环境下JavaScript加载与执行相关的知识点或者属性进行了探究,感兴趣的同学可以先行阅读前几篇文章,了解相关 ...

  8. 林纳斯·托瓦兹和Linux行为准则:揭穿7个谬论

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 作者:史蒂芬·沃恩·尼古斯(Steven J.Vaughan-Nichols),从事Linux开源工作 时间:格林威治标准时间2018年9月25日— ...

  9. SAS Shortcut Keys

    最常用的键有F3(运行代码).F6(查看log信息).Ctrl + / (注释代码).Ctrl + Shift + / (取消代码注释) SAS系统一共有4类快捷键,其中部分有重复, 第一类可自定义. ...

  10. Python zip() 与 map()的用法

    zip(): 将多个可迭代对象按序取出相同索引的元素(当长度最小的对象为准), 组成一个个元组,并封装在一个可迭代对象中 a = [1, 2, 3, 4] b = [5, 6, 7, 8] c = z ...