SpringBoot学习

本文介绍了SpringBoot的基本概念、优点,并通过一个Jar包形式的案例详细讲解了创建项目、添加依赖、启动控制器的过程。同时,文章还探讨了SpringBoot的启动方式,包括配置EnableAutoConfiguration和创建App类。最后,文章涵盖了SpringBoot的Web开发,包括静态资源访问、自动返回JSON格式数据、全局异常处理、模板引擎的使用以及数据库访问,重点讲解了SpringBoot与MyBatis的整合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.SpringBoot概述

Spring Boot 是 Spring 框架的一个新的子项目,用于创建 Spring 4.0 项目。它的开发始于 2013 年。2014 年 4 月发布 1.0.0 版本。它可以自动配置 Spring 的各种组件,并不依赖代码生成和 XML 配置文件。Spring Boot 也提供了对于常见场景的推荐组件配置。Spring Boot 可以大大提升使用 Spring 框架时的开发效率。

1.1 简介

  • 使用Spring boot ,可以轻松的创建独立运行的程序,非常容易构建独立的服务组件,是实现分布式架构、微服务架构利器。
  • Spring boot简化了第三方包的引用,通过提供的starter,简化了依赖包的配置。

1.2 SpringBoot优点

  • 轻松创建独立的Spring应用程序。
  • 内嵌Tomcat、jetty等web容器,不需要部署WAR文件。
  • 提供一系列的“starter” *来简化的Maven配置,不需要添加很多依赖。
  • 开箱即用,尽可能自动配置Spring。

2.SpringBoot入门案例

2.1 创建SpringBoot项目

  • 1.【war】包形式
    在这里插入图片描述

  • 2.【Jar】包形式
    在这里插入图片描述

2.2 以【Jar】包形式作为流程案例:

2.2.1 在pom.xml添加spring-boot-starter-web依赖
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>
spring-boot-starter-parent作用
  • 在pom.xml中引入spring-boot-start-parent,它可以提供dependency management,也就是说依赖管理,引入以后在申明其它dependency的时候就不需要version了,后面可以看到。
spring-boot-starter-web作用
  • springweb 核心组件

  • 添加完新的依赖,导入一下Maven,生效
    在这里插入图片描述

2.2.2 SpringBoot启动控制器
package zq.leonard.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * TODO
 *
 * @author Leonard
 * @version 1.0
 * @date 2022/2/24 0024 15:07
 * @des  SpringBoot启动器
 */

@RestController//RestFul风格控制
@EnableAutoConfiguration//开启自动配置
public class HelloSpringBoot {

    @RequestMapping("/hello")//映射路径
    @ResponseBody//响应体
    public String hello(){
        return "Hello SpringBoot!";
    }
    public static void main(String[] args) {
        SpringApplication.run(HelloSpringBoot.class,args);
    }
}
  • 在浏览器中访问http://localhost:8080/hello
    在这里插入图片描述

3.SpringBoot的启动方式

3.1 在控制器配置EnableAutoConfiguration

  • 使用SpringApplication启动程序

3.2 创建一个App类

  • 在App类中配置EnableAutoConfiguration和组件扫描ComponentScan,然后使用SpringApplication启动程序,这样就可以访问多个Controller了.【常用】
3.2.1 创建控制器
/**
 * TODO
 *
 * @author Leonard
 * @version 1.0
 * @date 2022/2/24 0024 15:40
 * @des  创建用户控制器【】
 */
@RestController//【相当于声明Controller - 提共restful 风格】
@RequestMapping("leonard2")
public class UserController {
    @RequestMapping("{id}")
    @ResponseBody
    public UserDao userInfo(@PathVariable(value = "id") Integer id){
        UserDao leonard = new UserDao("Leonard", "18");
        leonard.setId(id);
        return leonard;
    }
}
3.2.2 创建启动类
/**
 * TODO
 *
 * @author Leonard
 * @version 1.0
 * @date 2022/2/25 0025 10:42
 * @des  SpringBoot启动器
 */

@EnableAutoConfiguration//开启自动配置,不需要写spring的配置文件
@ComponentScan(basePackages = "zq.leonard")//配置需要扫描的包
public class StartApp {

    public static void main( String[] args )
    {
        SpringApplication.run(StartApp.class,args);
    }
}

4.SpringBoot依赖介绍

4.1 核心依赖介绍

spring-boot-starter 核心 POM,包含自动配置支持、日志库和对 YAML 配置文件的支持。
spring-boot-starter-amqp 通过 spring-rabbit 支持 AMQP
spring-boot-starter-aop 包含 spring-aop 和 AspectJ 来支持面向切面编程(AOP)。
spring-boot-starter-batch 支持 Spring Batch,包含 HSQLDB。
spring-boot-starter-data-jpa 包含 spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA。
spring-boot-starter-data-mongodb 包含 spring-data-mongodb 来支持 MongoDB。
spring-boot-starter-data-rest 通过 spring-data-rest-webmvc 支持以 REST 方式暴露 Spring Data 仓库。
spring-boot-starter-jdbc 支持使用 JDBC 访问数据库
spring-boot-starter-security 包含 spring-security。
spring-boot-starter-test 包含常用测试所需的依赖如 JUnit、Hamcrest、Mockito 和 spring-test 等。
spring-boot-starter-velocity 支持使用 Velocity 作为模板引擎。
spring-boot-starter-web 支持 Web 应用开发,包含 Tomcat 和 spring-mvc。
spring-boot-starter-websocket 支持使用 Tomcat 开发 WebSocket 应用。
spring-boot-starter-ws 支持 Spring Web Services
spring-boot-starter-actuator 添加适用于生产环境的功能,如性能指标和监测等功能。
spring-boot-starter-remote-shell 添加远程 SSH 支持
spring-boot-starter-jetty 使用 Jetty 而不是默认的 Tomcat 作为应用服务器。
spring-boot-starter-log4j 添加 Log4j 的支持
spring-boot-starter-logging 使用 Spring Boot 默认的日志框架 Logback
spring-boot-starter-tomcat 使用 Spring Boot 默认的 Tomcat 作为应用服务器。

4.2 spring-boot-starter-web讲解

  1. POM 文件中可以看到,应用所声明的依赖很少
  2. 只有一个“org.springframework.boot:spring-boot-starter-web”
  3. 而不是像其他 Spring 项目一样需要声明很多的依赖。
  4. 当使用 Maven 命令“mvn dependency:tree”来查看项目实际的依赖时【**】
    在这里插入图片描述
  5. 发现其中包含SpringMVC框架、SLF4J、Jackson、Hibernate Validator 和 Tomcat 等依赖。这实际上 Spring 推荐的 Web 应用中使用的开源库的组合。

4.3 EnableAutoConfiguration 注解

  1. EnableAutoConfiguration注解的作用:使SpringBoot根据应用声明的依赖对Spring框架自动配置,减少开发人员工作量;
  2. “@RestController”和“@RequestMapping”由SpringMVC提供,用于创建Rest服务,与SpringBoot无关。

5.Web开发

5.1 静态资源访问

  1. Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
    /static
    /public
    /resources
    /META-INF/resources

在这里插入图片描述
举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程序后,尝试访问http://localhost:8080/imgs/d.jpg。如能显示图片,配置成功。
在这里插入图片描述
2.图片固定放在static下,访问时,不用写static目录
在这里插入图片描述
3.访问http://localhost:8080/imgs/1.jpg在这里插入图片描述
4.【补充示例】访问带参数的网页
在这里插入图片描述

5.2 自动返回json格式数据

  • 1.启动启动类
  • 2.控制器code
/**
 * TODO
 *  * @author Leonard
 * @version 1.0
 * @date 2022/2/24 0024 15:40
 * @des  创建用户控制器【】
 */
@RestController//【相当于声明Controller - 提共restful 风格】
@RequestMapping("leonard2")//映射路径
public class UserController {
    @RequestMapping("{id}")
    @ResponseBody//响应体,自动返回json
    public UserDao userInfo(@PathVariable(value = "id") Integer id){
        UserDao leonard = new UserDao("Leonard", "18");
        leonard.setId(id);
        return leonard;
    }
}

在这里插入图片描述

5.3 捕获全局异常

5.3.1 注解
  • @ExceptionHandler 表示拦截异常

  • @ControllerAdvice controller 的一个辅助类,最常用的就是作为全局异常处理的【切面类】
    可以指定扫描范围

  • @ResponseBody 进行 json 转换

5.3.2 代码实例
  • 定义全局异常类
    启动器扫描注解配置需要包含该类,如果不包含无法捕获
@ControllerAdvice//切面控制器
public class GlobalExceptionHandler {
    @ExceptionHandler(RuntimeException.class)//捕获运行时异常
    @ResponseBody//响应体
    public Map<String,Object> exceptionHandle(){
        HashMap<String, Object> map = new HashMap<>();
        map.put("errorCode",996);
        map.put("errorText","系统故障!");
        return map;
    }
}
  • 定义一个RestFul风格异常控制类
@RestController//声明Controller
public class ErrorController {

    @RequestMapping("/login")//映射路径
    @ResponseBody//响应体
    public Map<String,Object> login(String name,String psd){

        HashMap<String, Object> map = new HashMap<>();
        if("leonard".equals(name) && "123".equals(psd)){
            map.put("success",100);
            map.put("errorMsg","");
        }
        //定义异常,执行终止,测试全局异常类捕获异常并输出至web页面
        int i = 10/0;
        return map;
    }
}
  • 访问web网页,自动捕获异常
    在这里插入图片描述

5.4 渲染Web页面

5.4.1 Spring Boot模板引擎

1.Spring Boot提供了默认配置的模板引擎主要有以下几种:

  • Thymeleaf
  • FreeMarker
  • Velocity
  • Groovy
  • Mustache

2.Spring Boot建议使用这些模板引擎

  • 【Springboot+freemarker 】
    当使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates
5.4.2 Freemarker的使用
  • 引入freeMarker的依赖包.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  • 控制器,返回数据
/**
 * TODO
 *
 * @author Leonard
 * @version 1.0
 * @date 2022/2/25 0025 15:06
 * @des  学生控制器
 * @@RestController  写API,提供给移动端,返回json数据
 */

@Controller//多用于后台控制器,有页面,访问freemaker模板必须用这个
@RequestMapping("/student")
public class StudentController {

    @RequestMapping("stuList")
    public String getList(Map<String,Object> data){

        //添加数据
        data.put("userName","Leonard");
        data.put("Age",18);
        ArrayList<StudentDao> List = new ArrayList<>();
        List.add(new StudentDao(1,"zs","男"));
        List.add(new StudentDao(2,"ls","男"));
        List.add(new StudentDao(3,"ys","女"));
        data.put("List",List);
        return "stu/student";//找模板页面
    }
}
  • 创建.ftl模板文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    欢迎${userName}登录
    <#if Age < 17 >小哥
    <#elseif Age <=30>先生
        <#else>大叔
    </#if>
    <table border="1">
        <tr>
            <td>ID</td>
            <td>名字</td>
            <td>性别</td>
        </tr>
        <#list List ?sort_by("id")?reverse as stu>
            <tr>
                <td> ${stu.id}</td>
                <td> ${stu.name}</td>
                <td> ${stu.gender}</td>
            </tr>
        </#list>
    </table>
</body>
</html>
  • 浏览器访问

在这里插入图片描述

5.4.3 SpringBoot使用jsp

忽略…

5.5 数据库访问

5.5.1 SpringBoot使用JDBC
  • 1 添加mysql依赖---- pom.xml配置依赖【后续使用Oracle,不使用Mysql】-了解
	<!-- JDBC -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <!-- 数据库驱动 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  • application.properties新增配置
    在这里插入图片描述
#视图配置
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
#数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/day12
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  • 2.添加Oracle依赖,建立数据库连接,操作数据库—手动导入jar

    • 在项目依赖里手动导入Oracle.jar
      在这里插入图片描述

    • application.properties新增配置
      在这里插入图片描述

    • Service层(Itf实现)

/**
 * TODO
 *
 * @author Leonard
 * @version 1.0
 * @date 2022/3/2 0002 13:41
 * @des
 */
@Service//service组件
public class UserServiceImpl implements IUserService {
    @Autowired//自动注入模板
    private JdbcTemplate jdbcTemplate;

    @Override
    public void registerUser(String username, String psd, String email) {
        String sql = "select * from ci_order where code_or = '" + username+"'";
        jdbcTemplate.execute(sql);
    }
}
  • Controller层代码
/**
 * TODO
 *  * @author Leonard
 * @version 1.0
 * @date 2022/3/2 0002 13:47
 * @des
 */
@Controller
@RequestMapping("select")
public class UserCtroller2 {
    @Autowired
    IUserService iUserService;

    @RequestMapping("ciorder")
    @ResponseBody
    public String regist(){
        iUserService.registerUser("100101000000108672","","");
        return "select ci_order success!";
    }
}
  • 启动服务
@EnableAutoConfiguration//开启自动配置,不需要写spring的配置文件
@ComponentScan(basePackages = "zqsty")//扫描包
public class StartApp {

    public static void main( String[] args )
    {
        SpringApplication.run(StartApp.class,args);
    }
}
  • 访问网页
    在这里插入图片描述
5.5.2 SpringBoot使用MyBatis访问数据库【主要】
5.5.3 SpringBoot整合MyBatis-plus案例入门

项目结构:
在这里插入图片描述

  • 创建一个SpringBoot项目
    Next

  • 创建测试数据表User;

create table `user_test1` (
	`id` int (11),
	`username` varchar (60),
	`age` int (11),
	`tel` int (11),
	`create_time` timestamp ,
	`update_time` timestamp ,
	`version` int (11)
); 
insert into `user_test1` (`id`, `username`, `age`, `tel`, `create_time`, `update_time`, `version`) values('1','张三','18','180',NULL,NULL,NULL);
insert into `user_test1` (`id`, `username`, `age`, `tel`, `create_time`, `update_time`, `version`) values('2','李四','20','137',NULL,NULL,NULL);
insert into `user_test1` (`id`, `username`, `age`, `tel`, `create_time`, `update_time`, `version`) values('3','王五','22','138',NULL,NULL,NULL);

在这里插入图片描述

  • 添加依赖
   <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

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

        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
<!--        lombok:简化开发代码-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • 配置数据源application.properties
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/csdn_test?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=1
  • 创建实体类与Mapper接口
/**
 * TODO
 *
 * @author Leonard
 * @version 1.0
 * @date 2022/3/7 0007 13:21
 * @des  lombok写法
 *      @Data  set,get方法
 *      @NoArgsConstructor 无参构造
 *      @AllArgsConstructor 全参构造
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;
    private String name;
    private Integer age;
    private String email;
}
/**
 * TODO
 *
 * @author Leonard
 * @version 1.0
 * @date 2022/3/7 0007 13:22
 * @des   @Mapper  声明一个Mapper接口,继承BaseMapper,泛型为当前实体类
 * @Component 声明一个组件
 */

@Mapper
@Component
public interface UserMapper extends BaseMapper<User> {
}
  • 编写测试类
    测试类无法注入Mapper问题解决:【@RunWith(SpringJUnit4ClassRunner.class)】
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)//--tip:解决usermapper空指针问题
public class ApplicationTests {

	@Autowired
	private UserMapper userMapper;

	//查找数据
	@Test
	public void findAll(){
		List<User> userList = userMapper.selectList(null);
		System.out.println(userList);
	}

	//插入数据
	@Test
	public void test2(){
		userMapper.insert(new User((long) 6,"Leo",19,"leo@baomidou.com"));
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值