- Spring Boot 基础

文章目录

    • >> Spring Boot 简介
      • 1、Spring Boot 是什么
      • 2、Spring Boot 优缺点
      • 3、约定俗成
      • 4、创建一个Spring Boot应用程序
      • 5、常用配置
    • >> Spring Boot 整合Thymeleaf
      • ~ Thymeleaf简介
      • ~ 第一个Themeleaf模板页
      • ~ 整合mybatis
        • 1、Spring Boot 整合 数据库连接池 - Druid:
        • 2、Spring Boot 整合 tk.mybatis :
        • 3、Spring Boot 整合 PageHelper
        • 4、使用 MyBatis 的 Maven 插件生成代码:
        • 5、自动生成的配置:`generatorConfig.xml`
        • 6、jdbc.properties 数据源配置
        • 7、插件自动生成命令:
        • 8、使用 tk.mybatis 测试mybatis操作数据库


>> Spring Boot 简介

1、Spring Boot 是什么

随着动态语言的流行 (Ruby、Groovy、Scala、Node.js),Java 的开发显得格外的笨重:繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大;
.
在上述环境下,Spring Boot 应运而生;它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速的运行起来;使用 Spring Boot 很容易创建一个独立运行(运行 Jar,内嵌 Servlet 容器)准生产级别的基于 Spring 框架的项目,使用 Spring Boot 你可以不用或者只需很少的 Spring 配置;
.
使用 Spring Boot 很容易创建一个独立运行的jar包,它内置了servlet容器(tomcat/jboss等),也就是从现在开始不再出现war包,只用jar包来部署了;
.
SpringBoot让Java具备了开箱即用的特性,减少了大量的配置,加速Java应用程序的开发;

使用Java创建项目的时候,配置文件比较复杂,开发效率低,集成第三方技术的难度大;

SpringBoot简化了spring应用开发的过程;它使用约定优于配置的开发方式,将Spring、SpringMVC等的一系列模板化的配置文件封装起来,我们创建Java项目的时候,直接根据项目需要选择相应的启动器,就可以快速的启动一个项目,我们不需要再进行复杂的配置了,或者只需要进行很少的配置来替换SpringBoot提供的默认配置;SpringBoot对主流开发框架也提供了无配置集成;

SpringBoot内置了Tomcat和jetty容器,所以我们创建好的项目不用再打包成war包,然后部署到服务器上去运行,直接打包成jar包独立运行就可以了;

缺点:
1、版本更新速度快,一些模块的改动比较大;
2、由于不用自己进行配置了,报错时,很难定位;


2、Spring Boot 优缺点

优点:

  • 快速构建项目;
  • 对主流开发框架的无配置集成:kafka、Mybatis、Hibernate等;
  • 项目可独立运行,无需外部依赖 Servlet 容器:不用外部的Tomcat了;
  • 提供运行时的应用监控
  • 极大地提高了开发、部署效率:后期结合Docker效率就更高了;
  • 与云计算的天然集成

缺点:

  • 版本迭代速度很快,一些模块改动很大
  • 由于不用自己做配置,报错时很难定位
  • 网上现成的解决方案比较少

3、约定俗成

1、SpringMVC需要配置指定批量扫描路径;但是使用SpringBoot没有配置扫描路径,是因为SpringBoot能识别到@SpringBootApplication注解,这个注解注释的类在哪个包下,就扫描哪个包;

2、静态资源文件都放在resources/static目录下;

3、页面都放在resources/templates目录下;前缀默认就是resources/templates,后缀默认是.html

4、mybatis的mapper.xml放在resources/mapper目录下;

4、创建一个Spring Boot应用程序

使用Spring初始化器创建一个SpringBoot项目;

  • 创建Spring Starter Project:
    - Spring Boot 基础_第1张图片

  • 填写项目信息:
    - Spring Boot 基础_第2张图片
    - Spring Boot 基础_第3张图片

  • 项目目录介绍:图片来源
    - Spring Boot 基础_第4张图片

  • 创建完的项目pom文件报错:
    - Spring Boot 基础_第5张图片

  • pom.xml 文件中的 properties 加入maven jar 插件的版本号即可;
    在这里插入图片描述

  • 程序的入口:只要类上有@SpringBootApplication注解,并且main函数上调用的SpringApplication.run()方法,就表示这个应用程序具备了SpringBoot的核心;这个类就是SpringBoot程序的入口;
    - Spring Boot 基础_第6张图片

  • 右键运行:
    在这里插入图片描述

  • 浏览器访问:localhost:8080即可;

  • 神奇之处:
    没有配置 web.xml
    没有配置 application.xml,Spring Boot 帮你配置了
    没有配置 application-mvc.xml,Spring Boot 帮你配置了
    没有配置 Tomcat,Spring Boot 内嵌了 Tomcat 容器


5、常用配置

https://www.funtl.com/zh/spring-boot/Spring-Boot-常用配置.html#本节视频

(1)自定义 Banner: 修改 Spring Boot 启动时的默认的启动图案;

(2)Spring Boot 的配置文件:
Spring Boot 项目使用一个全局的配置文件 application.properties 或者是 application.yml(一般使用这个),在 resources 目录下或者类路径下的 /config 下,一般我们放到 resources 下;

修改 Tomcat 的端口为 9090,并将默认的访问路径 “/” 修改为 “boot”,可以在 application.yml 中添加:
- Spring Boot 基础_第7张图片
浏览器访问:http://localhost:9090/boot/

(3)查看自动配置:
- Spring Boot 基础_第8张图片
查看web下的ServerProperties类,里面配置的属性就是用来在yml配置文件中进行配置的;
@ConfigurationProperties( prefix = "server",ignoreUnknownFields = true)

(4)Starter Pom
Spring Boot 为我们提供了简化企业级开发绝大多数场景的 starter pom ,只要使用了应用场景所需要的 starter pom ,相关的技术配置将会消除,就可以得到 Spring Boot 为我们提供的自动配置的 Bean;

父级的pom是spring-boot-starter-parent,项目若想成为springboot项目就必须依赖该父pom;spring-boot-starter-parent依赖spring-boot-dependenciesspring-boot-dependencies里面的维护了各个依赖的版本;

所以依赖了springboot的超级pom:spring-boot-starter-parent的pom中可以不用再指定version;不需要我们再手动维护主流框架的版本号了,只需要修改spring boot的parent的版本号即可,它更新,我们就自动更新;因为spring会测试这些主流框架和spring之间的兼容性好不好;
- Spring Boot 基础_第9张图片

(5)日志配置
Spring Boot 对各种日志框架都做了支持,我们可以通过配置来修改默认的日志的配置;

默认情况下,Spring Boot 使用 Logback 作为日志框架;

    logging:
      file: ../logs/spring-boot-hello.log   // 日志地址
      level.org.springframework.web: DEBUG  // 日志级别

- Spring Boot 基础_第10张图片

(6)关闭特定配置: 使用@SpringBootApplication注解的exclude属性;

@SpringBootApplication注解表明当前类是Springboot的引导类;

exclude属性:排除指定的自动配置;

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
starter启动器中内容都是自动配置的,自动配置一加载,就一定会生效;比如pom文件中添加了MySQL的启动器,MySQL就需要配置数据源,不配置的话就会报错;但是如果创建的是前端项目,虽然添加了MySQL的依赖,但是不需要使用数据库,这时候就可以使用exclude属性把数据源的配置给排除掉,表示不要自动配置数据源;
- Spring Boot 基础_第11张图片


>> Spring Boot 整合Thymeleaf

~ Thymeleaf简介

Thymeleaf是一个模板引擎,类似Velocity、FreeMarker ,可以完全替代JSP;

Thymeleaf优点:

1、Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果,而JSP必须在servlet容器启动才能看;
这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板 + 数据的展示方式;浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示;

.jsp
	${user.name}
.html  // themeleaf支持HTML原型;
	<span th:text="${username}"">zxj</span> //能从服务器读到数据就显示th:的模板数据,读不到就直接显示zxj;
	th:text="${username}"

2、无缝对接JSP;
Thymeleaf 开箱即用的特性;它提供标准和 Spring 标准两种方言,可以直接套用模板实现 JSTL、 OGNL 表达式效果,避免每天套模板、改 JSTL、改标签的困扰;同时开发人员也可以扩展和创建自定义的方言;

3、天然支持SpringMVC;
Thymeleaf 提供 Spring 标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能;

为什么使用Themeleaf:
jar包运行不了JSP;

微服务架构,一个服务一个应用进行部署;以应用程序的方式来部署web程序,Java程序要和docker结合,所以最后部署出来的应用应该称之为docker-app;要提供web服务,但是又想以jar包的方式发布,jar包不是web应用程序,要赋予jar包web的能力,程序就要用到内嵌的servlet容器来做到这个效果;

如果希望以 Jar 形式发布模块则尽量不要使用 JSP 相关知识,这是因为 JSP 在内嵌的 Servlet 容器上运行有一些问题 (内嵌 Tomcat、 Jetty 不支持 Jar 形式运行 JSP,Undertow 不支持 JSP)

~ 第一个Themeleaf模板页

参考链接

1、添加依赖:thymeleaf启动器和nekohtml的依赖;

nekohtml:正常情况下配置文件中的spring.thymeleaf.mode=HTML5,使用HTML5就要使用严格的HTML模式:一定要符合w3c标准:每个标签必须要有结束符;

<dependency>
	<groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-thymeleafartifactId>
dependency>
<dependency>
	<groupId>net.sourceforge.nekohtmlgroupId>
	<artifactId>nekohtmlartifactId>
	<version>1.9.22version>
dependency>

2、添加配置:application.yml

spring:
  thymeleaf:
    cache: false  # 开发时关闭缓存,不然没法看到实时页面
    mode: HTML    # 用非严格的 HTML
    encoding: UTF-8
    servlet:
      content-type: text/html

3、创建一个HTML文件,在文件头部加入标签引入thymeleaf引擎,声明当前页面是一个thymeleaf模板引擎页面;
所有的thymeleaf模板引擎页面使用thymeleaf的时候,都要使用th:开头;


<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>head> 
<body>
	<span th:text="${user.username}">张三span>
body>  
html>

4、创建Controller

@Controller
public class MainController {
	@RequestMapping(value = {"", "index"}, method = RequestMethod.GET)
	public String index(Model model) {
		User user = new User();
		user.setUsername("zxj");
		model.addAttribute("user", user);
		return "index";
	}
}
------
public class User implements Serializable {
	private String username;
	public String getUsername() { return username;}
	public void setUsername(String username) { this.username = username;}
}

5、启动项目,浏览器访问:http://localhost:9090/thymeleaf/index

~ 整合mybatis

参考链接

1、Spring Boot 整合 数据库连接池 - Druid:

Druid 是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括
DBCP、C3P0、BoneCP、Proxool、JBoss DataSource;

(1)在 pom.xml 文件中引入 druid-spring-boot-starter 依赖和数据库连接依赖;

<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>druid-spring-boot-starterartifactId>
    <version>1.1.10version>
dependency>
<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <scope>runtimescope>
dependency>

(2)在 application.yml 中配置数据库连接:

spring:
  datasource:
    druid:
      url: jdbc:mysql://ip:port/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false
      username: root
      password: 123456
      initial-size: 1
      min-idle: 1
      max-active: 20
      test-on-borrow: true
      # MySQL 8.x: com.mysql.cj.jdbc.Driver
      driver-class-name: com.mysql.jdbc.Driver

2、Spring Boot 整合 tk.mybatis :

tk.mybatis 是在 MyBatis 框架的基础上提供了很多工具,可以简化我们对Mybatis的操作,让开发更加高效;

(1)添加依赖:

<dependency>
    <groupId>tk.mybatisgroupId>
    <artifactId>mapper-spring-boot-starterartifactId>
    <version>2.0.2version>
dependency>

(2)添加配置:

mybatis:
    type-aliases-package: 实体类的存放路径,如:com.funtl.hello.spring.boot.entity
    mapper-locations: classpath:mapper/*.xml  

(3)创建一个通用的父级接口:主要作用是让 DAO 层的接口继承该接口,以达到使用 tk.mybatis 的目的;

注意:该接口不能被spring扫描到,否则会出错!就是说,这个接口不能放在启动类所在包下;

public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}

3、Spring Boot 整合 PageHelper

PageHelper 是 Mybatis 的分页插件,支持多数据库、多数据源,可以简化数据库的分页查询操作,整合过程也极其简单,只需引入依赖即可;

pom.xml 文件中引入 pagehelper-spring-boot-starter 依赖

<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelper-spring-boot-starterartifactId>
    <version>1.2.5version>
dependency>

4、使用 MyBatis 的 Maven 插件生成代码:

我们无需手动编写 实体类DAOXML 配置文件,只需要使用 MyBatis 提供的一个 Maven 插件就可以自动生成所需的各种文件便能够满足基本的业务需求,如果业务比较复杂只需要修改相关文件即可;

pom.xml 文件中增加 mybatis-generator-maven-plugin 插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generatorgroupId>
            <artifactId>mybatis-generator-maven-pluginartifactId>
            <version>1.3.5version>
            <configuration>
                <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xmlconfigurationFile>
                <overwrite>trueoverwrite>
                <verbose>trueverbose>
            configuration>
            <dependencies>
                <dependency>
                    <groupId>mysqlgroupId>
                    <artifactId>mysql-connector-javaartifactId>
                    <version>${mysql.version}version>
                dependency>
                <dependency>
                    <groupId>tk.mybatisgroupId>
                    <artifactId>mapperartifactId>
                    <version>3.4.4version>
                dependency>
            dependencies>
        plugin>
    plugins>
build>

指定自动生成所需的配置文件路径;

5、自动生成的配置:generatorConfig.xml

src/main/resources/generator/ 目录下创建 generatorConfig.xml 配置文件,指定数据源等信息;
完整配置案例




<generatorConfiguration>
    
    <properties resource="jdbc.properties"/>

    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        
        
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.funtl.utils.MyMapper"/>
        plugin>

        
        <jdbcConnection
                driverClass="${jdbc.driverClass}"
                connectionURL="${jdbc.connectionURL}"
                userId="${jdbc.username}"
                password="${jdbc.password}">
        jdbcConnection>

        
        <javaModelGenerator targetPackage="com.funtl.hello.spring.boot.entity" targetProject="src/main/java"/>

        
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>

        
        <javaClientGenerator
                targetPackage="com.funtl.hello.spring.boot.mapper"
                targetProject="src/main/java"
                type="XMLMAPPER"/>

        
        <table catalog="myshop" tableName="%">
            
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        table>
    context>
generatorConfiguration>

6、jdbc.properties 数据源配置

src/main/resources 目录下创建 jdbc.properties 数据源配置;

# MySQL 8.x: com.mysql.cj.jdbc.Driver
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://ip:port/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false
jdbc.username=root
jdbc.password=123456

7、插件自动生成命令:

mvn mybatis-generator:generate
- Spring Boot 基础_第12张图片

8、使用 tk.mybatis 测试mybatis操作数据库

(1)修改入口类:在类上增加注解@MapperScan来指定mapper接口的包路径;

@SpringBootApplication
@MapperScan(basePackages = "com.funtl.hello.spring.boot.mapper")
public class HelloSpringBootApplication {
    public static void main(String[] args) { SpringApplication.run(HelloSpringBootApplication.class, args); }
}

(2)创建测试类:

@RunWith(SpringRunner.class)
// 指定启动类,为了让测试类能装载到SpringBoot的配置文件application.yml;
@SpringBootTest(classes = HelloSpringBootApplication.class)
@Transactional  // 加入事务
@Rollback       // 加入事务
public class MyBatisTests {
    @Autowired // 注入数据查询接口
    private TbUserMapper tbUserMapper;
    @Test      // 测试插入数据
    public void testInsert() {
        // 构造一条测试数据
        TbUser tbUser = new TbUser();
        tbUser.setUsername("Lusifer");  // ......
        tbUserMapper.insert(tbUser);
    }
    @Test       // 测试删除数据
    public void testDelete() {
        // 构造条件,等同于 DELETE from tb_user WHERE username = 'Lusifer'
        Example example = new Example(TbUser.class);
        example.createCriteria().andEqualTo("username", "Lusifer");
        tbUserMapper.deleteByExample(example);
    } 
    @Test      // 测试修改数据
    public void testUpdate() {
        // 构造条件
        Example example = new Example(TbUser.class);
        example.createCriteria().andEqualTo("username", "Lusifer");
        // 构造一条测试数据
        TbUser tbUser = new TbUser();
        tbUser.setUsername("LusiferNew");  // ......
        tbUserMapper.updateByExample(tbUser, example);
    } 
    @Test    // 测试查询集合
    public void testSelect() {
        List<TbUser> tbUsers = tbUserMapper.selectAll();
        for (TbUser tbUser : tbUsers) {
            System.out.println(tbUser.getUsername());
        }
    } 
    @Test    // 测试分页查询
    public void testPage() {
        // PageHelper 使用非常简单,只需要设置页码和每页显示笔数即可
        PageHelper.startPage(0, 2);
        // 设置分页查询条件  
        Example example = new Example(TbUser.class);
        PageInfo<TbUser> pageInfo = new PageInfo<>(tbUserMapper.selectByExample(example));
        // 获取查询结果
        List<TbUser> tbUsers = pageInfo.getList();
        for (TbUser tbUser : tbUsers) {
            System.out.println(tbUser.getUsername());
        }
    }
}

文章参考博客视频教程

你可能感兴趣的:(Java,-,框架)