6.SSM

编程入门 行业动态 更新时间:2024-10-26 16:28:28

6.<a href=https://www.elefans.com/category/jswz/34/1769255.html style=SSM"/>

6.SSM

1.SpringBoot简介

1.1 入门案例

1.新建SpringBoot项目
若是start.spring.io连接超时可采用

2.编写BookController

package com.example.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/books")
public class BookController {@GetMapping("{id}")public String getById(@PathVariable Integer id){System.out.println("id ==> " + id);return "hello springboot";}
}

3.启动springboot
运行Springboot01Application.java

遇到问题:ERROR 5328 — [ main] o.a.catalina.core.AprLifecycleListener
原因是C:\Windows\System32下缺少的tcnative-1.ddl
去.2.14/binaries/下载插件: tomcat-native-1.2.14-win32-bin.zip
解压后将tcnative-1.ddl拷贝到C:\Windows\System32目录下重启项目即可

最简单SpringBoot程序所包含的基础文件
pom.xml
Application类

Spring程序与SpringBoot程序对比

类/配置文件SpringSpringBoot
pom文件中的坐标手工添加勾选添加
web3.0配置类手工制作
Spring/SpringMVC配置类手工制作
控制器手工制作手工制作

也可以直接在Sping官网创建项目
/
下载并导入idea

1.2 SpringBoot项目快速启动

① 对SpringBoot项目打包(执行Maven构建指令package)
maven ==> package打包成jar包
打好的jar包在target目录下

② 执行启动指令:
java -jar .\springboot_01-0.0.1-SNAPSHOT.jar

注意事项:jar支持命令行执行需要maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.7.RELEASE</version><configuration><mainClass>com.example.Springboot01Application</mainClass></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions>
</plugin>

1.3 SpringBoot概述

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程

  • Spring程序缺点
    • 配置繁琐
    • 依赖设置繁琐
  • SpringBoot程序有点
    • 自动配置‘
    • 起步依赖(简化依赖配置)
    • 辅助功能(内置服务器,…)

SpringBoot起步依赖

  • starter

    • SpringBoot 中常见项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的
  • parent

    • 所有 SpringBoot 项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
    • spring-boot-starter-parent (2.5.0)与 spring-boot-starter-parent (2.4.6)共计57处坐标版本不同
  • 实际开发

    • 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供
      • G:groupid
      • A:artifactId
      • V:version
    • 如发生坐标错误,再指定version(要小心版本冲突)

1.4 SpringBoot启动程序

启动方式

package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Springboot01Application {public static void main(String[] args) {SpringApplication.run(Springboot01Application.class, args);}}

SpringBoot在创建项目时,采用jar的打包方式
SpringBoot的引导类是项目的入口,运行main方法就可以启动项目

使用Jetty代替Tomcat
使用maven依赖管理变更起步依赖项

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

Jetty比Tomcat更轻量级,可扩展性更强(相当于Tomcat),谷歌应用引擎(GAE)已经全面借还为Jetty

2. 基础配置

修改服务器端口
SpringBoot提供了多种属性配置方式
① application.properties
server.port=80

② application.yml (主要使用方式)
server:
 port: 81

③ application.yaml
server:
 port: 82

SpringBoot配置文件加载顺序
application.properties > application.yml > application.yaml

2.1 yaml

YAML 一种数据序列化格式

  • 优点:

    • 容易阅读
    • 容易与脚本语言互动
    • 以数据为核心,重数据轻格式
  • YAML文件扩展名

    • .yml(主流)
    • .yaml

yaml语法规则
1.大小写敏感
2.属性层级关系使用多行描述,每行结尾使用冒号结束
3.使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
4.空格的个数并不重要,只要保证同层级的左侧对齐即可。
5.属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
6.#表示注释
核心规则:数据前面要加空格与冒号隔开
7.数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔,例如

enterprise:name: exampleage: 16tel: 123456789subject:- Java- 前端- 大数据

YAML数据读取方式(3种)
1.使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名…}
2.封装全部数据到Environment对象
3.自定义对象封装指定数据

实验
需要读取的配置文件数据

server:port: 80lesson: SpringBootenterprise:name: exampleage: 16tel: 123456789subject:- Java- 前端- 大数据

① Enterprise对象用于加载enterprise数据

package com.example.domain;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.Arrays;@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {private String name;private Integer age;private String tel;private String[] subject;@Overridepublic String toString() {return "Enterprise{" +"name='" + name + '\'' +", age=" + age +", tel='" + tel + '\'' +", subject=" + Arrays.toString(subject) +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public String[] getSubject() {return subject;}public void setSubject(String[] subject) {this.subject = subject;}
}

② Controller类

package com.example.controller;import com.example.Springboot01Application;
import com.example.domain.Enterprise;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/books")
public class BookController {
//    方式一@Value("${lesson}")private String lesson;@Value("${server.port}")private Integer port;@Value("${enterprise.subject[0]}")private String subject_00;//    方式二@Autowiredprivate Environment environment;//    方式三@Autowiredprivate Enterprise enterprise;@GetMapping("{id}")public String getById(@PathVariable Integer id){System.out.println("id ==> " + id);System.out.println(lesson);System.out.println(port);System.out.println(subject_00);System.out.println("-------------------");System.out.println(environment.getProperty("lesson"));System.out.println(environment.getProperty("server.port"));System.out.println(environment.getProperty("enterprise.age"));System.out.println(environment.getProperty("enterprise.subject[1]"));System.out.println("------------------");System.out.println(enterprise.toString());return "hello springboot";}
}

③ 测试:发送get请求:http://localhost/books/2

自定义对象封装数据警告解决方案

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

2.2 多环境开发

多环境开发配置

#设置启用的环境
spring:profiles:active: pro---
#开发
spring:profiles: dev
server:port: 80
---
#生产
spring:profiles: pro
server:port: 81---
#测试
spring:profiles: test
server:port: 82

多环境命令行启动参数设置
打包之前先把idea编码设置为utf-8
maven ==> clean 清除记录
maven ==> package 打包

带参数启动SpringBoot

java -jar .\springboot_01-0.0.1-SNAPSHOT.jar --spring.profiles.active=devjava -jar .\springboot_01-0.0.1-SNAPSHOT.jar --server.port=88java -jar .\springboot_01-0.0.1-SNAPSHOT.jar --server.port=88 --spring.profiles.active=dev

参数加载优先级:
.html#features.external-config

2.3 Maven与SpringBoot多环境兼容

① Maven中设置多环境属性

<profiles><!--开发环境--><profile><id>dev</id><properties><profile.active>dev</profile.active></properties></profile><!--生产环境--><profile><id>pro</id><properties><profile.active>pro</profile.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><!--测试环境--><profile><id>test</id><properties><profile.active>test</profile.active></properties></profile>
</profiles>

② SpringBoot中引用Maven属性

#设置启用的环境
spring:profiles:active: ${profile.active}---
#开发
spring:profiles: dev
server:port: 80
---
#生产
spring:profiles: pro
server:port: 81---
#测试
spring:profiles: test
server:port: 82

③ 对资源文件开启默认占位符的解析

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><configuration><encoding>UTF-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration>
</plugin>

④ 打包

2.4 配置文件分类

  • SpringBoot中4级配置文件

    • 1级:classpath:application.yml
    • 2级:classpath:config/application.yml
    • 3级:file :application.yml
    • 4级:file :config/application.yml
      说明:级别越高优先级越高
  • 作用

    • 3级与4级留作系统打包后设置通用属性
    • 1级与2级用于系统开发阶段设置通用属性

3.整合第三方技术

3.1 整合JUnit

BookService

package com.example.service;public interface BookService {public void save();
}

BookServiceImpl

package com.example.service.impl;import com.example.service.BookService;
import org.springframework.stereotype.Service;@Service
public class BookServiceImpl implements BookService {@Overridepublic void save() {System.out.println("book save ...");}
}

SpringBott整合JUnit(test包下自动生成的测试类)

package com.example;import com.example.service.BookService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class Springboot01ApplicationTests {@Autowiredprivate BookService bookService;@Testpublic void testSave(){bookService.save();}}

测试类注解
@SpringBootTest
设置JUnit加载的SpringBoot启动类

3.2 整合Mybatis

① 新建工程
勾选Mybatis Framework 和 MySQL Driver

② 环境准备
Book类

package com.example.domain;public class Book {private Integer id;private String name;private String type;private String description;@Overridepublic String toString() {return "Book{" +"id=" + id +", name='" + name + '\'' +", type='" + type + '\'' +", description='" + description + '\'' +'}';}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 getType() {return type;}public void setType(String type) {this.type = type;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}
}

BookDao接口(需要加@Mapper注解)

package com.example.dao;import com.example.domain.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;@Mapper
public interface BookDao {@Select("select * from tbl_book where id = #{id}")public Book getById(Integer id);
}

② 配置文件(application.yml)根据自己的数据库设置参数

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.1.224:3306/ssm_db?characterEncoding=utf8username: rootpassword: 123456

③ 测试

package com.example;import com.example.dao.BookDao;
import com.example.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class Springboot02ApplicationTests {@Autowiredprivate BookDao bookDao;@Testvoid testGetById() {Book book = bookDao.getById(1);System.out.println(book);}}

如果出现空指针异常,则SpringBoot改为2.5.0版本
springboot2.4.3以前的版本url需要加时区
如:url: jdbc:mysql://192.168.1.224:3306/ssm_db?serverTimezone=UTC

3.2.1 使用druid数据源

① 添加坐标

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version>
</dependency>

② 修改配置

spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.1.224:3306/ssm_db?characterEncoding=utf8username: rootpassword: 123456

③ 运行测试类

3.3 基于SpringBoot的SSM整合案例

1.pom.xml
配置起步依赖,必要的资源坐标(druid)

2.application.yml
设置数据源、端口等

3.配置类
全部删除

4.dao
设置@Mapper

5.测试类

6.页面
放在resources目录下的static目录中

实验
① 创建项目,勾选Spring Web,Mybatis Framework 和 MySQL Driver

② 把springmvc做的项目中dao,domain,exception,controller,service拷贝到com.example包下

③ 添加依赖

<!--TODO 添加必要的依赖坐标-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version>
</dependency>

③ 配置类(application.yml)

# DOTO 配置数据源相关信息
server:port: 80
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.1.224:3306/ssm_dbusername: rootpassword: 123456

④ BookDao设置@Mapper

//TODO 添加@Mapper
@Mapper
public interface BookDao 

⑤ 测试类测试功能

package com.example.service;import com.example.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;@SpringBootTest
public class BookServiceTest {@Autowiredprivate BookService bookService;@Testpublic void testGetById(){Book book = bookService.getById(1);System.out.println(book);}@Testpublic void testGetAll(){List<Book> list = bookService.getAll();System.out.println(list);}
}

⑥ 将springMVC的项目中的页面拷贝到resources.static包下

⑦ 访问:http://localhost/pages/books.html

更多推荐

6.SSM

本文发布于:2024-02-12 08:37:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1686995.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:SSM

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!