文章目录

  • 配置springboot
  • 修改内嵌服务器内容
  • 注解
  • 工厂模式
  • 属性注入
  • 集成JSP模板
  • MyBatis的整合
  • 本地测试
  • 热部署
  • 日志处理


配置springboot

在springboot中为了方便版本的管理,不引入任何依赖,统一继承父项目的版本

写在pom.xml

<!--继承springboot的父项目-->
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.5.5</version>
    </parent>

继承父项目之后才开始引入我们需要的依赖,引入的依赖都是springboot封装完成后的依赖

在dependencies标签中放入依赖

例如如下的web依赖

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

需要在main- resource中新建一个配置文件,且文件名必须是

application.yml

如果不出错,文件图标会变成一个小树叶

在java中创建一个入口类 必须有一个main函数 且必须加一个注解 @SpringBootApplication

  • 修饰范围:作用在类上,只能用在入口类上,只能出现一次
  • 作用:标志这个类是一个springboot的入口类,用来启动整个springboot项目的总入口

在main函数中,需要启动springboot应用,且用两个参数

  • 类对象,类对象不同于类的对象,类对象是xxx.class,类的对象通常是new出来的对象
  • main函数的参数,通常为args
public class application {
    public static void main(String[] args) {
        SpringApplication.run(application.class, args);
    }
}

至此SpringBoot才算搭建完成

总结:

  • pom文件引入依赖
  • resource生成application.yml
  • 创建入口类且加入@SpringBootApplication注解
  • 在main中启动应用

修改内嵌服务器内容

application.yml 中进行修改

# 修改端口号
server:
  port: 8000
  servlet:
    context-path: /spring # 修改项目名,且必须斜杠开头,默认是没有的

注解

@SpringBootApplication:注解

  • 组合注解:就是由多个注解组合而成的一个注解
  • 元注解:JDK自带的注解且用来修饰注解的注解
  • @Target:指定注解作用范围
  • @Retention:指定注解什么时候有效
  • @SpringBootApplication主要由三个注解组成
  • @SpringBootConfiguration:这个注解就是用来自动配置Spring SpringMVC(初始化,servlet …)相关环境;
  • @EnableAutoConfiguration:开启自动配置 自动配置Spring相关环境 自动与项目中引入第三方技术自动配置其环境;
  • @ComponentScan:组件扫描,根据注解发挥注解作用,默认扫描当前包及其子包;

工厂模式

SpringBoot = Spring(工厂) + SpringMVC(控制器)

相当等于一个脚手架,如VUE的vue-cil

Spring工厂创建对象:

  • 基于配置文件创建对象:在spring.xml文件中写入<bean id = “" class=“xxx.xxx”/>
  • 基于注解方式创建对象
  • @Component:在工厂中创建对象,通用的对象注解
  • @Controller:创建控制器注解;
  • @Service:创建业务层注解;
  • @Repository:创建dao层注解;

SpringBoot工厂创建对象:

  • 使用原始spring框架中注解创造对象;
  • 使用配置方式创建对象:
  • @Configuration
  • 修饰范围:作用在类上;
  • 作用:代表这个类是一个SpringBoot中配置类;
  • @Bean
  • 作用:创建对象;相当于spring.xml书写bean;
@Configuration
public class BeansConfig{
	@Bean
	public User user(){
		return new User();
	}
}

属性注入

Spring的属性注入:

  • 引入类型(对象)属性注入:
  • @Autowired:spring提供的 默认根据类型注入
  • @Resource:javaEE 规范 默认根据名称注入
  • 八种基本类型+日期类型+数组+集合类型属性注入:
<bean>

    	<property name="name" value="urbaneh">

    </bean>

SpringBoot的属性注入:

  • @Value:通过yml文件可将属性注入
@Value("${name}")
private String name;
name: UrbaneH # 字符串
age: 18 # int
price: 12.12 # float & double
arrs: 12,12,34,456 # 数组,需要使用,进行隔开
lusts: zhangsan, lisi, wangwu # 列表,需要使用,进行隔开
tf: true # 布尔值
times: 2012/12/12 12:12:12 # 默认使用 yyyy/mm/dd HH:MM:ss的格式
maps: "{'name': 'UrbaneH', 'age': '18'}" # map类型,在双引号内用单引号包裹键值对 注入时必须使用#{${属性}} 使用json格式赋值
  • @ConfigurationProperties:对象赋值
orders:
  id: 20
  name: UrbaneH
  price: 99.99
public void setName(String name) {
        this.name = name;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setPrice(float price) {
        this.price = price;
    }

注意:使用次方法,一定要构建SET函数,否则将无法获取到相应的数据,@ConfigurationProperties需要设置Value属性,属性的值与对象名称相同;

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
<!--            不会将此依赖传递下去-->
            <optional>true</optional>
        </dependency>

用于配置注解处理器以生成元数据,作用不是很大,主要是看着舒服一点然后会有提示,没有报错;

集成JSP模板

<!--        c标签库-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

<!--        让tomcat可以解析jsp-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>

一般jsp文件时放在main文件夹中的webapp文件夹当中

且需要加一个头部,在jsp文件当中 <%@page pageEncoding="UTF-8" contentType="text/html; UFT-8" isELIgnored="false" %>

当文件都准备完成时,需要在application.yml文件当中配置jsp视图前缀和后缀

spring:
  mvc:
    view:
      prefix: /
      suffix: .jsp

prefix : 是指访问页面的前缀,指定页面存放的文件夹

suffix : 是指文件的后缀名,常见的后缀名有html,jsp,php,txt,mp3

server:
  servlet:
    jsp:
      init-parameters:
        development: true

打开jsp的开发模式,即修改jsp模板后,不需要重启SpringBoot服务,刷新即可

MyBatis的整合

  • 引入依赖:SpringBoot-web,mysql相关,mysql驱动,druid数据源,mybatis相关的(mybatis-spring-boot-stater)包含了(mybatis和mybatis-spring)
<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.7</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
  • 书写配置:
  • 开启注解扫描:省略
  • 创建数据源:
  • 指定数据源类型
  • 指定数据库的驱动
  • 指定url
  • 指定username
  • 指定password
# 整合mybatis的相关配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    # mysql 8.x.x 的驱动
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/bootssm?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=true
    username: root
    password: 88888888
  • 创建sqlsessionFactory
  • 指定mapper配置文件的位置
  • 指定实体所在的包位置(起别名)
mybatis:
  # 指定mapper的配置文件位置 创建文件时一定要使用/而不是.
  mapper-locations: classpath:com/urbaneh/mapper/*.xml
  #  指定实体类的包名 默认别名: 类名 类名首字母小写
  type-aliases-package: com.example.demo.entity
  • 创建DAO
  • 指定DAO接口所在的包:在入口类使用注解==@MapperScan(“com.example.demo.dao”)==用来扫描dao接口所在的包,同时将所有dao接口在工厂中创建对象
  • 创建事务管理器 开启注解式事务生效 省略
  • 测试:
  • 建表
  • 开发实体类:在entity文件夹中创建表的实体类,将表内的列声明为变量,生成GET和SET方法以及带参和不带参的构造方法;
  • 开发DAO接口
public interface UserDao{
    // 插叙所有
    List<User> findAll();
}
  • 开发Mapper配置文件
<?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.urbaneh.dao.UserDao">
    <select id="findAll" resultType="User">
        SELECT * FROM user;
    </select>
</mapper>
  • 开发Service接口
public interface UserService {

    List<User> findAll();
}
  • 开发ServiceImpl实现类
@Service
@Transactional
public class UserServiceImpl implements UserService {
    private UserDao userDao;

    @Autowired
    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public List<User> findAll() {
        return userDao.findAll();
    }
}
  • 测试ServiceImpl

本地测试

  • 引入结合junit与SpringBoot依赖,如果是官网生成的代码文件中会自带;
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
<!--            只能在测试里面使用-->
            <scope>test</scope>
        </dependency>
  • 启动SpringBoot应用,才能启动Spring工厂,注入测试对象,@SpringBootTest
  • 修饰范围:用在类上;
  • 作用:用来启动本地Spring环境

热部署

SpringBoot提供了全局项目热部署,在开发过程中修改了部分代码以及相关配置文件后,不需要每次重启SpringBoot服务来使其生效,开启热部署后,只需修改后等待几秒即可立即生效;

如果想使用热部署(devtools)工具就必须每一个项目都引入热部署的依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <!--optional表示该依赖是否可以传递,true表示不传递只在当前项目可用-->
            <optional>true</optional>
        </dependency>

如果使用IDEA需要开启自动构建项目!

开启高级设置中 -> 编译器 -> 即使当前正在运行所开发的应用程序也允许启动自动生成!

日志处理

SpringBoot内集成了logback日志;

ALL TRACE DEBUG INFO WARN ERROR FATAL OFF

  • OFF:关闭,最高级别 不打印日志;
  • FATAL:致命,指明非常严重的可能会导致应用终止执行的错误事件;
  • ERROR: 错误,指明错误事件 但应用程序可能还会继续运行;
  • WARN: 警告,指明可能潜在的危险状况;
  • INFO: 信息,指明描述信息,从粗粒度上描述了应用运行过程;
  • DEBUG: 调试,指明细致的事件信息,对调试应用最用;
  • TRACE: 跟踪,指明程序运行轨迹,比DEBUG级别的粒度更细;
  • ALL: 所有,所有日志级别,包括定制级别;

级别越高输出的日志信息越少;

日志一般分为两类

  • 一类是rootlogger(根全局日志):用来监听项目中所有的运行日志 包括引入依赖jar中的日志;
  • 一类是logger(指定包级别日志):用来监听项目中指定包中的日志信息;

在SpringBoot中默认的日志级别是INFO