传统ssm开发回顾以及SpringBoot引言、优势、环境搭建

1. 传统的ssm开发

我们先来使用传统的ssm开发一个具有添加员工查询所有的功能。

开发一个项目的基本流程

# 项目
开发一个项目的基本流程
- 需求分析	概要设计(库表设计)	详细设计(验证库表正确性)	编码(环境搭建+业务代码)	测试	部署上线

本次开发的基本流程

# 员工添加 查询所有功能  SSM
- 库表   库: ssm   数据库:mysql  表: id name birthday salary

# 编码 环境搭建 ssm  spring  springmvc   一个团队开发 无缝整合
- springmvc  spring  mybatis

因为本次实现的是一个简单的小功能,所以很多项目开发的步骤不需要,省略了。

  1. 概要设计(库表设计)

在这里插入图片描述

在这里插入图片描述

  1. 编码(环境搭建+业务代码)
  • ssm环境搭建,在pom.xml中引入相关依赖
    • spring
    • springmvc
    • mybatis
    • mysql
    • druid
    • mybatis-spring
    • 转换json的依赖
    • aop的依赖
    <!--spring-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.6</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.3.6</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.3.6</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.6</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>5.3.6</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.6</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.6</version>
    </dependency>

    <!--spring web mvc-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.6</version>
    </dependency>
    
    <!--druid-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.4</version>
    </dependency>

    <!--mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>

    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>

	<!--mybatis-spring-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.6</version>
    </dependency>

    <!--  jackson 转换json-->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.3</version>
    </dependency>

    <!-- aspectj aop切面-->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.5</version>
    </dependency>

    <!--aspectj-->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.9.5</version>
    </dependency>

ssm这三个框架是由spring框架作为中间桥梁,spring框架和springmvc框架是天生的无缝整合,但是和mybatis框架并不是如此,所以我们接下来要做的是先整合spring框架和mybatis框架(配置spring.xml配置文件)。

spring整合mybatis的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">


    <!--开启注解扫描-->
    <context:component-scan base-package="com.baizhi.service"/>
    <!--创建数据源-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
    <!--创建sqlSessionFactory-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean" name="sqlSessionFactory">
        <property name="dataSource" ref="dataSource"/>
        <!-- mapper配置文件的位置 -->
        <property name="mapperLocations" value="classpath:com/baizhi/mapper/*.xml"/>
        <!-- 实体别名 类名    类名小写-->
        <property name="typeAliasesPackage" value="com.baizhi.eneity"/>
    </bean>
    <!--创建DAO-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.baizhi.dao"/>
    </bean>
    <!--创建事务管理器-->
    <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--开启注解事务生效 @Transactional-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

在这里插入图片描述

# 小知识点

对于java包下的文件来说java包就是根目录

在java包(及子包)中下级文件用  .    比如建eneity包时   com.baizhi.eneity



对于resources包下的文件来说resources包就是根

在resources包(及子包)中下级文件用  / 	比如建mapper包时   com.baizhi.mapper

下面我们需要开发实体类DAO接口Mapper配置文件,我们先看一下它们在项目中的位置

在这里插入图片描述

实体类Emp

public class Emp {

    private Integer id;
    private String name;
    private Date birthday;
    private double salary;

	// 有参、无参构造、get、set、to_String这些方法都是要写的
    // 为了不影响阅读,这里没有粘,但实际上是有的
}

EmpDAO接口

public interface EmpDAO {

    // 保存
    void save(Emp emp);

    // 查询所有
    List<Emp> findAll();
}

EmpMapper配置文件

<?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.baizhi.dao.EmpDAO">

    <!--保存-->
    <insert id="save" parameterType="com.baizhi.eneity.Emp" useGeneratedKeys="true" keyProperty="id">
        insert into emp values(#{id}, #{name}, #{birthday}, #{salary})
    </insert>

    <!--查询所有-->
    <select id="findAll" resultType="com.baizhi.eneity.Emp">
        select id, name, birthday, salary from emp;
    </select>
</mapper>

在这里插入图片描述

这里其实应该测试一下,但是由于这个业务比较简单,所以我们把它和service放到一起测试。

接下来需要开发EmpService接口EmpService接口的实现类,还要进行测试,我们先来看一下它们在项目中的位置。

在这里插入图片描述

EmpService接口

public interface EmpService {

    // 保存
    void save(Emp emp);

    // 查询所有
    List<Emp> findAll();
}

实现EmpService接口的实现类EmpServiceImpl

@Service
@Transactional
public class EmpServiceImpl implements EmpService{

    private EmpDAO empDAO;

    @Autowired
    public void setEmpDAO(EmpDAO empDAO) {
        this.empDAO = empDAO;
    }

    @Override
    public void save(Emp emp) {
        empDAO.save(emp);
    }

    @Override
    public List<Emp> findAll() {
        return empDAO.findAll();
    }
}

在这里插入图片描述

测试类

public class TestEmpServiceImpl {

    public static void main(String[] args) {
        // 1. 运行工厂
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

        // 2. 工厂中获取对象
        EmpService empService = (EmpService) context.getBean("empServiceImpl");

        empService.save(new Emp(null, "小陈", new Date(), 23.23));
        
        // 3. 调用方法
        empService.findAll().forEach(emp -> System.out.println(emp));

    }
}

在这里插入图片描述

mybatis和spring已经整合完了,接下来开始springmvc的整合,

springmvc的配置文件springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <!--开启注解扫描-->	<!--子工厂,只扫描controller包即可-->
    <context:component-scan base-package="com.baizhi.controller"/>
    <!--开启mvc注解驱动-->
    <mvc:annotation-driven/>
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

在这里插入图片描述

在服务器启动的时候需要把springmvc的工厂启动起来,所以我们需要配置web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!-- 加载spring.xml -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>
  <!-- 配置spring工厂启动 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 配置springmvc,springmvc是控制器,要告诉它要拦截哪些请求 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <!--配置servlet的映射-->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

在这里插入图片描述

开发控制器

@RestController     // 代表类中返回值转为json响应到浏览器
public class EmpController {

    private EmpService empService;

    @Autowired
    public void setEmpService(EmpService empService) {
        this.empService = empService;
    }

    // 保存
    @RequestMapping("save")
    public void save(Emp emp){
        empService.save(emp);
    }

    // 查询所有
    @RequestMapping("findAll")
    List<Emp> findAll(){
        return empService.findAll();
    }
}

2. 现有SSM开发存在问题

  • 大量maven冗余配置
  • 每次构建项目都要书写大量相同配置极大浪费了项目开发时间
  • 每次整合第三方技术都需要编写相关配置文件
  • 项目测试每次都需要部署到tomcat

注意:这就是早期的SSM或者SSH开发存在问题,是不是很麻烦☹️☹️☹️

3. SpringBoot的引言

SpringBoot是由Pivotal团队提供的全新框架,其设计的目的是用来简化Spring应用的 初始搭建以及开发过程。该框架使用了特定的方式进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

SpringBoot 全新框架 作用:简化Spring应用初始搭建和开发过程。

如何简化:开发人员使用SpringBoot只要基于特定方式进行配置 简化spring使用

SpringBoot 微框架:5分钟完成之前ssm中环境搭建

springboot(微框架)= springmvc(控制器)+ spring core(项目管理)

4. SpringBoot的优势

  1. 创建完整的独立的Spring引用程序 springboot只有一个容器
    1. 从根本上避免了父子容器污染问题(传统的ssm中父、子容器不能污染,父容器:spring,子容器:springmvc,不能污染,即子容器不能扫描到父容器,父容器不能扫描到子容器)
  2. 嵌入的Tomcat,无需部署WAR文件 springboot内嵌tomcat 应用跑在内嵌服务器
  3. 简化Maven配置,自动配置Spring SpringMVC,没有XML配置 springboot中只需要引几个依赖
    1. 用了springboot,spring应用再无xml

5. SpringBoot的约定

在这里插入图片描述

  • springboot 项目中必须在src/main/resources中放入application.yml(.properties)核心配置文件 名字必须为:application

  • springboot 项目中必须在src/main/java中所有子包之外构建全局入口类型,xxApplication,入口类一个springboot项目只能有一个

在这里插入图片描述

6. SpringBoot环境搭建

环境要求

# 1. System Requirements
	JDK 1.8+
	MAVEN 3.2+
	Spring Framework 5.x+
	
# 2. ServletContainers
	Tomcat 9.0+
	
# 3. 开发工具
	IDEA	2021版本

新建项目

在这里插入图片描述

在下面环境搭建过程中包结构

在这里插入图片描述

在pom.xml文件中引入依赖

<!--继承springboot的父项目 便于维护版本-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.0</version>
</parent>

<dependencies>
    <!--引入springboot的web支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>


<!--因为引入依赖很慢,所以我们可以使用阿里云镜像,在pom.xml文件下加入下面语句-->
<repositories>
    <repository>
        <id>aliyun-repos</id>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>aliyun-plugin</id>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

在这里插入图片描述

创建application.yml配置文件

配置文件里面什么都不写就行

在这里插入图片描述

创建入口类

// 这个注解:修饰范围:用在类上   只能用在入口类上  只能出现一次
// 作用:标志这个类是springboot的入口类  启动整个springboot项目的总入口
@SpringBootApplication
public class SpringBootDay1Application {

    public static void main(String[] args) {

        // 启动springboot应用 参数1:指定入口类的类对象 .class  参数2:main函数参数
        SpringApplication.run(SpringBootDay1Application.class, args);
    }
}

在这里插入图片描述

注:到这里项目环境已经搭建成功了,仅需要5分钟

springboot搭建环境总结

  1. pom.xml文件引入依赖
  2. resources目录生成application.yml
  3. 创建入口类加入@SpringBootApplication注解 在main函数中启动应用

接下来我们来测试一下

开发一个Controller

@RestController
public class HelloController {

    // 测试控制器 测试地址:在以前使用ssm开发时测试http://localhost:端口号/项目名/请求路径
    // 但是,注意:springboot项目默认启动没有项目名 http://localhost:8080/hello
    @RequestMapping("hello")
    public String Hello(){
        System.out.println("hello springboot......");
        return "hello springboot";
    }
}

注意:springboot项目默认启动没有项目名

如果想要修改内嵌服务器的端口号,则在application.xml文件中加入:

#后面的是注释

server:
  port: 8081  # 修改内嵌服务器的端口号

springboot默认在访问时不需要项目名,如果想要在访问时指定项目名,则可以在application.xml文件中加入:

server:
  servlet:
    context-path: /springboot_day1 # 修改项目名  注意:项目名必须 "/" 开头

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值