SpringBoot


一.引言和优势

 二.项目约定

        传统项目开发:

                maven:项目构建工具

               ssm:

ssm:    
    src/main/java    用来存放运行时java代码
        com.cwj.entity  
                .dao
                .util
                .service
                .....
    src/main/resource    用来存放运行时需要的配置文件
        spring.xml
        springmvc.xml
        mybatis  mapper
        log4j.properties
        ......
    src/test/java    用来存放测试时的Java代码
    src/test/resource    用来存放测试时的需要配置文件
        spring.xml
        springmvc.xml
        mybatis  mapper
        log4j.properties

 springboot:

       约定:

        1.spring boot约定spring boot项目中有且只能存在一个入口类(Class)

        类名推荐:XXX(项目名)Application.java

                a.入口类必须在所有子包之上

                b.入口类中必须存在一个启动项项目main函数

         2.springboot项目约定必须在项目根目录中存在一个名字为application.yml |或application.properties

springboot:
  
    src/main/java    用来存放运行时java代码
        com.cwj.entity  
                .dao
                .util
                .service
            .sys.xxx
            Application----------- 
                .....
    src/main/resource    用来存放运行时需要的配置文件
        application.yml
        application.properties     ------->springboot配置文件
        ......
    src/test/java    用来存放测试时的Java代码
    src/test/resource    用来存放测试时的需要配置文件
        spring.xml
        springmvc.xml
        mybatis  mapper
        log4j.properties

三.环境搭建

环境要求:

 

1.引依赖 

    <!--继承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>

  2.在resources中创建application.yml

  3.创建XXXApplication入口类,必须有main函数 必须加注解@Spring boot Application 必须在main函数中加入SpringApplication.run()方法

package com.cwj;

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

//修饰范围:用在类上 只能用在入口类上,只能出现一次
//作用:表示这个类是一个spring boot的入口类 启动整个spring boot项目总入口
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        //启动springBoot应用 参数1:入口类的类对象 .class 参数2:main函数参数
        SpringApplication.run(Application.class,args);
    }
}

4.运行main启动项目

出现以上日志证明启动成功

5.测试springboot(微框架) = springmvc(控制器) + spring 

package com.cwj.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    //测试控制器  测试地址://localhost:端口号/项目名/请求路径
    //注意: springboot项目默认启动 没有项目名 http://localhost:8080/hello
    @RequestMapping("hello")
    public String hello(){
        System.out.println("springboot!");
        return "spring boot";
    }
}

      

有此证明验证成功

6.修改tomcat内嵌端口 以及 项目名

由此端口即可修改成功 

四.相关注解说明

五.配置文件拆分以及加载外部配置

1.配置文件拆分

 2.外部配置

 项目启动之前加(--spring.config.location=)等号后写绝对路径

 

六.管理对象的创建

     工厂创建对象

        创建单个对象

springboot(微框架)=spring(工厂)用来管理项目对象  创建项目中对象
                   +
                  springmvc (控制器)controller
spring 工厂:创建对象?
    2种形式:
        1.基于配置文件形式创建对象
           spring.xml
            <bean id="", class="XXX.xxServiceImpl"/>
        2.基于注解方式创建对象
            @Component   作用:就是在工厂中创建对象 通用的对象创建
                @Controller 控制器
                @service    业务层
                @Repository Dao mybatis用不到
springBoot:如何创建对象? 
    a.使用原始spring框架中注解创建对象?
        @Component   作用:就是在工厂中创建对象 通用的对象创建
                @Controller 控制器
                @service    业务层
                @Repository Dao mybatis用不到
    b.使用配置方式创建对象
         @Configuratioin:修饰范围:用在类上 ====> spring.xml
                作用:代表这个类是一个spring boot中配置类
            @Bean注解:作用:创建对象  相当于 spring.xml 书写bean
            
            @Configuration
            public class BeanConfig{
                
                @Bean
                public User user(){
                    return new User();
                }
                
                @Bean
                public User user(){
                    return new User();
                }
                .....
                可以创建多个对象    
            }

            创建多个对象

 

 工厂中获取日历对象,获取当前时间

注意:1.@Configuration:用来在工厂中一次性创建多个对象

          2.@Component        用来创建单个对象

七.属性注入 

 基本属性注入

        1.@Value 属性注入  重点

package com.cwj.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 用来测试属性注入
 *
 * */
@RestController
public class InjectionController {

    @Value("${name}")
    private String name;

    @Value("${age}")
    private Integer age;

    @Value("${price}")
    private Double price;

    @Value("${birthday}")
    private Date birthday;

    @Value("${sex}")
    private Boolean sex;

    @Value("${qqs}")
    private String[] qqs;

    @Value("${lists}")
    private List<String> lists;

    @Value("#{${maps}}")
    private Map<String,String> maps;

    @RequestMapping("/inject")
    public String inject(){
        System.out.println("Inject ok---------");
        System.out.println("name = " + name);
        System.out.println("age = " + age);
        System.out.println("price = " + price);
        System.out.println("birthday = " + birthday);
        System.out.println("sex = " + sex);
        System.out.println("遍历数组:");
        for (String qq : qqs) {
            System.out.println("qq = " + qq);
        }
        System.out.println("-------------------------");
        System.out.println("遍历list");
        lists.forEach(lists-> System.out.println("lists = " + lists));
        System.out.println("==========================");
        System.out.println("遍历Map");
        maps.forEach((key,value)-> System.out.println("key = " + key+"value ="+value));
        System.out.println("++++++++++++++++++++++++++");

        return "Inject ok";

    }
}

   2.在配置文件中定义注入值 

 对象注入

1.编写对象注入

package com.cwj.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 测试对象注入
 */

@RestController
@ConfigurationProperties(prefix = "orders")//此处可以使用prefix也可以使用value底层可以看出
    //修饰范围:用在类上 作用:用来将指定前缀的属性 注入到当前对象中属性名一致属性中
    //注意:使用这个注解为属性一次性赋值 必须为属性提供set方法
public class injectionObjectController {

    private Integer id;
    private String name;
    private Double price;

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

    public void setName(String name) {
        this.name = name;
    }

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

    @RequestMapping("/injectObject")
    public String injectObject(){
        System.out.println("injectObject ok!!!");
        System.out.println("id = " + id);
        System.out.println("name = " + name);
        System.out.println("price = " + price);
        return "injectObject ok";
    }

}

2.编写配置文件

 

 3.引入依赖构建自定义注入元数据

 <dependencies>
        
        <!--此依赖可以根据@ConfigurationProperties构建自定义注入元数据-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <!--代表这个依赖不会被传递 仅此项目使用子项目不会使用-->
            <optional>true</optional>
        </dependency>

    </dependencies>

八.Jsp模板集成

在springBoot框架中默认模板推荐使用Thymeleaf模板,此处先使用jsp后续会更新Thymeleaf模板

1.引入jsp集成jar包

        <!--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>

2.引入jsp运行插件

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

小插曲:快速创建一个jsp页面("!"+TAB)创建完成后缺少一个头:

<%@page pageEncoding="UTF-8" contentType="text/html; UTF-8" isELIgnored="false" %>

 3.配置视图解析器

总结:第一步引依赖,二:创建webapp,三:配置视图解析器前缀后缀

九.整合mybatis框架

 springboot框架整合mybatis:

1.引依赖

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

        <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.4</version>
        </dependency>

        <!--mybatis-spring-boot-starter-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

2.配置yml

a.创建数据源

 b.创建sqlsessionFactory

 c.创建Dao

在入口类上加@MapperScan注解

3.测试

1.建表

2.开发实体类

 3.开发Dao接口

package com.cwj.dao;

import com.cwj.entity.UserEntity;

import java.util.List;

public interface UserDao {
    //查所有
    List<UserEntity> findAll();

    void save(UserEntity userEntity);
}

4.开发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.cwj.dao.UserDao">
    <select id="findAll" resultType="UserEntity">
        select id,name,birthday,salary
        from user
    </select>

    <insert id="save" keyProperty="id" useGeneratedKeys="true" parameterType="UserEntity">
        insert into user values (#{id},#{name},#{birthday},#{salary})
    </insert>

</mapper>

5.开发service接口

package com.cwj.service;

import com.cwj.entity.UserEntity;

import java.util.List;

public interface UserService {
    List<UserEntity> findAll();

    void save(UserEntity userEntity);
}

6.开发service实现类

package com.cwj.service;

import com.cwj.dao.UserDao;
import com.cwj.entity.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class UserServiceImpl implements UserService{
    private UserDao userDao;

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

    @Override
    public List<UserEntity> findAll() {
        return userDao.findAll();
    }

    @Override
    public void save(UserEntity userEntity){
        userDao.save(userEntity);
    }
}

7.测试serviceImpl

package com.cwj.controller;

import com.cwj.entity.UserEntity;
import com.cwj.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {

    private UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @RequestMapping("/findAll")
    public List<UserEntity> findAll(){
        return userService.findAll();
    }

    @RequestMapping("/save")
    public void save(UserEntity userEntity){
        userService.save(userEntity);
    }
}

十.本地测试

1.引入测试依赖

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

2.编写测试

 十一.devtools热部署工具

 

 

十二.日志处理

 

 

十三.切面编程

十四.文件上传下载

十五.拦截器

十六.war包部署

         jar包部署

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值