springboot基础学习笔记

1、SpringBoot简介

回顾什么是Spring

  • Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson 。

  • Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。

Spring是如何简化Java开发的

为了降低Java开发的复杂性,Spring采用了以下4种关键策略:

1、基于POJO的轻量级和最小侵入性编程,所有东西都是bean;

2、通过IOC,依赖注入(DI)和面向接口实现松耦合;

3、基于切面(AOP)和惯例进行声明式编程;

4、通过切面和模版减少样式代码,RedisTemplate,xxxTemplate;

什么是SpringBoot

  • 学过javaweb的同学就知道,开发一个web应用,从最初开始接触Servlet结合Tomcat, 跑出一个Hello Wolrld程序,是要经历特别多的步骤;后来就用了框架Struts,再后来是SpringMVC,到了现在的SpringBoot,过一两年又会有其他web框架出现;你们有经历过框架不断的演进,然后自己开发项目所有的技术也在不断的变化、改造吗?建议都可以去经历一遍;

  • 言归正传,什么是SpringBoot呢,就是一个javaweb的开发框架,和SpringMVC类似,对比其他javaweb框架的好处,官方说是简化开发,约定大于配置, you can “just run”,能迅速的开发web应用,几行代码开发一个http接口。

  • 所有的技术框架的发展似乎都遵循了一条主线规律:从一个复杂应用场景 衍生 一种规范框架,人们只需要进行各种配置而不需要自己去实现它,这时候强大的配置功能成了优点;发展到一定程度之后,人们根据实际生产应用情况,选取其中实用功能和设计精华,重构出一些轻量级的框架;之后为了提高开发效率,嫌弃原先的各类配置过于麻烦,于是开始提倡“约定大于配置”,进而衍生出一些一站式的解决方案。

  • 是的这就是Java企业级应用->J2EE->spring->springboot的过程。

  • 随着 Spring 不断的发展,涉及的领域越来越多,项目整合开发需要配合各种各样的文件,慢慢变得不那么易用简单,违背了最初的理念,甚至人称配置地狱。Spring Boot 正是在这样的一个背景下被抽象出来的开发框架,目的为了让大家更容易的使用 Spring 、更容易的集成各种常用的中间件、开源软件;

  • Spring Boot 基于 Spring 开发,Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。Spring Boot 以约定大于配置的核心思想,默认帮我们进行了很多设置,多数 Spring Boot 应用只需要很少的 Spring 配置。同时它集成了大量常用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用。

  • 简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架 。

  • Spring Boot 出生名门,从一开始就站在一个比较高的起点,又经过这几年的发展,生态足够完善,Spring Boot 已经当之无愧成为 Java 领域最热门的技术。

Spring Boot的主要优点:

  • 为所有Spring开发者更快的入门
  • 开箱即用,提供各种默认配置来简化项目配置
  • 内嵌式容器简化Web项目
  • 没有冗余代码生成和XML配置的要求

真的很爽,我们快速去体验开发个接口的感觉吧!

2、第一个SpringBoot程序

2.1、准备工作

  • jdk1.8
  • Maven-3.6.1
  • SpringBoot 最新版
  • IDEA

2.2、创建基础项目说明

Spring官方提供了非常方便的工具让我们快速构建应用

Spring Initializr:https://start.spring.io/

**项目创建方式一:**在官网使用Spring Initializr 的 Web页面创建项目

1、打开 https://start.spring.io/

2、填写项目信息

3、点击”Generate Project“按钮生成项目;下载此项目

4、解压项目包,并用IDEA以Maven项目导入,一路下一步即可,直到项目导入完毕。

5、如果是第一次使用,可能速度会比较慢,包比较多、需要耐心等待一切就绪。

**项目创建方式二:**使用 IDEA 直接创建项目

1、创建一个新项目

2、选择spring initalizr , 可以看到默认就是去官网的快速构建工具那里实现

3、填写项目信息

4、选择初始化的组件(初学勾选 Web 即可)

5、填写项目路径

6、等待项目构建成功

项目结构分析:

通过上面步骤完成了基础项目的创建。就会自动生成以下文件。

1、程序的主启动类

2、一个 application.properties 配置文件

3、一个 测试类

4、一个 pom.xml

3、yaml配置文件

1.编写规则,对空格严格要求

#普通的key-value
name: star

#对象
student: {name: star,age: 3}
teacher:
  name: star
  age: 3

#数组
pets:
  - cat
  - dog
  - pig
pets2: [cat,dog,pig]

2.对实体类赋值

实体类

Person类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "person")//绑定配置文件中定义的对象
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

Dog类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Dog {
    private String name;
    private Integer age;
}

yaml文件

person:
  name: ${random.uuid}
  age: ${random.int(1,100)}
  happy: true
  birth: 2021/7/18
  maps: {k1: v1,k2: v2}
  lists:
    - code
    - music
    - girl
  dog:
    name: ${person.hello:hello}旺财 #person.hello:hello:取person中的hello属性值,若不存在则赋默认值hello
    age: 3

输出结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BtJ1GI7F-1627985368914)(C:\Users\不吃虫的草丶\AppData\Roaming\Typora\typora-user-images\image-20210718144942209.png)]

4、JSR303校验

1.使用

  • 在pom.xml导入
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  • 在需要数据校验的实体类前加上@Validated

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nIs1Fmlr-1627985368916)(C:\Users\不吃虫的草丶\AppData\Roaming\Typora\typora-user-images\image-20210718150256132.png)]

  • 在需要数据校验的属性前加上限制参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MWeVnlv0-1627985368918)(C:\Users\不吃虫的草丶\AppData\Roaming\Typora\typora-user-images\image-20210718150416318.png)]

2、常用参数

@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
    
Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false  
    
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 Date 和 Calendar 对象是否在当前时间之前  
@Future     验证 Date 和 Calendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合正则表达式的规则

.......等等
除此以外,我们还可以自定义一些数据校验规则

5、多环境配置

1优先级

​ 优先级1:项目路径下的config文件夹配置文件

​ 优先级2:项目路径下的配置文件

​ 优先级3:资源路径下的config文件夹配置文件

​ 优先级4:资源路径下的配置文件

2多环境配置

  • yaml多模块配置

    server:
      port: 8080
    spring:
      profiles:
        active: dav
    ---
    server:
      port: 8082
    spring:
      config:
        activate:
          on-profile: dav
    ---
    server:
      port: 8083
    spring:
      config:
        activate:
          on-profile: test
    

6、Web开发

1静态资源处理

  • webjars localhost:8080/webjars/

  • public,static,/**,resources localhost:8080/

  • 优先级: resource>static>public

  • 自定义目录

    spring:
      mvc:
        static-path-pattern: /hello/,classpath:/kuang/
    

    注意:使用自定义路径后,系统路径资源就无法使用了

2设置首页

自动检测根目录下的index.html文件

3配置Thymeleaf模板引擎

(1)模板使用

1.配置pom文件
<dependency>           <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.配置html文件
<html lang="en" xmlns:th="http://www.thymeleaf.org">

(2)Thymeleaf基础语法

<!--获取文本格式-->
<p th:text="${msg}">
<!--解析HTML语言,使标签生效-->
<p th:utext="${msg}">
<!--遍历循环-->
<p th:each="user:${users}" th:text="${user}"></p>
<p th:each="user:${users}">[[ ${user} ]]</p>
<!--抽取组件,并命名为:sidbar-->
<nav  th:fragment="sidbar">
<!--插入组件sidbar-->
<div th:insert="~{commons/commons::sidbar}"></div>
<!--覆盖组件sidbar-->
<div th:replace="~{commons/commons::sidbar}"></div>

(3)Thymeleaf表达式

Simple expressions:(表达式语法)
Variable Expressions: ${...}:获取变量值;OGNL;
    1)、获取对象的属性、调用方法
    2)、使用内置的基本对象:#18
         #ctx : the context object.
         #vars: the context variables.
         #locale : the context locale.
         #request : (only in Web Contexts) the HttpServletRequest object.
         #response : (only in Web Contexts) the HttpServletResponse object.
         #session : (only in Web Contexts) the HttpSession object.
         #servletContext : (only in Web Contexts) the ServletContext object.

    3)、内置的一些工具对象:
      #execInfo : information about the template being processed.
      #uris : methods for escaping parts of URLs/URIs
      #conversions : methods for executing the configured conversion service (if any).
      #dates : methods for java.util.Date objects: formatting, component extraction, etc.
      #calendars : analogous to #dates , but for java.util.Calendar objects.
      #numbers : methods for formatting numeric objects.
      #strings : methods for String objects: contains, startsWith, prepending/appending, etc.
      #objects : methods for objects in general.
      #bools : methods for boolean evaluation.
      #arrays : methods for arrays.
      #lists : methods for lists.
      #sets : methods for sets.
      #maps : methods for maps.
      #aggregates : methods for creating aggregates on arrays or collections.
==================================================================================

  Selection Variable Expressions: *{...}:选择表达式:和${}在功能上是一样;
  Message Expressions: #{...}:获取国际化内容
  Link URL Expressions: @{...}:定义URL;
  Fragment Expressions: ~{...}:片段引用表达式

Literals(字面量)
      Text literals: 'one text' , 'Another one!' ,…
      Number literals: 0 , 34 , 3.0 , 12.3 ,…
      Boolean literals: true , false
      Null literal: null
      Literal tokens: one , sometext , main ,…
      
Text operations:(文本操作)
    String concatenation: +
    Literal substitutions: |The name is ${name}|
    
Arithmetic operations:(数学运算)
    Binary operators: + , - , * , / , %
    Minus sign (unary operator): -
    
Boolean operations:(布尔运算)
    Binary operators: and , or
    Boolean negation (unary operator): ! , not
    
Comparisons and equality:(比较运算)
    Comparators: > , < , >= , <= ( gt , lt , ge , le )
    Equality operators: == , != ( eq , ne )
    
Conditional operators:条件运算(三元运算符)
    If-then: (if) ? (then)
    If-then-else: (if) ? (then) : (else)
    Default: (value) ?: (defaultvalue)
    
Special tokens:
    No-Operation: _

(4)Thymeleaf应用

1.抽取公共页面
<nav th:fragment="sidbar">
2.插入公共页面
<!--可传参-->
<div th:replace="~{commons/commons::sidbar(active='list')}"></div>
3.通过判断参数实现特殊效果
 <a th:class="${active=='list'?'nav-link active':'nav-link'}" th:href="@{/employ/getList}">

4配置MVC

(1)重写WebMvcConfigurer接口

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/star").setViewName("index");
    }
    //在MyMvcConfig注册Bean
    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();
    }
}

5国际化配置

(1)配置i18n文件

  • 在resources目录下建立i18n文件夹

  • 创建login.properties文件

    login.password=密码
    login.rememberme=记住我
    login.signin=登录
    login.tip=请登录
    login.username=账号
    
  • 创建login_en_US.properties文件

    login.password=Password 
    login.rememberme=Remember me
    login.signin=Sign in
    login.tip=Please sign in
    login.username=Username
    
  • 创建login_zh_CN.properties文件

    login.password=密码
    login.rememberme=记住我
    login.signin=登录
    login.tip=请登录
    login.username=账号
    

(2)在项目中设置按钮自动切换,自定义LocaleResolver

  • html页面

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    		<meta name="description" content="">
    		<meta name="author" content="">
    		<title>Signin Template for Bootstrap</title>
    		<!-- Bootstrap core CSS -->
    		<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">
    		<!-- Custom styles for this template -->
    		<link th:href="@{/css/signin.css}" rel="stylesheet">
    	</head>
    
    	<body class="text-center">
    		<form class="form-signin" action="dashboard.html">
    			<img class="mb-4" th:src="@{/img/bootstrap-solid.svg}" alt="" width="72" height="72">
    			<h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1>
    			<label class="sr-only">Username</label>
    			<input type="text" class="form-control" th:placeholder="#{login.username}" required="" autofocus="">
    			<label class="sr-only">Password</label>
    			<input type="password" class="form-control" th:placeholder="#{login.password}" required="">
    			<div class="checkbox mb-3">
    				<label>
              <input type="checkbox" value="remember-me" th:text="#{login.rememberme}">
            </label>
    			</div>
    			<button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.signin}"></button>
    			<p class="mt-5 mb-3 text-muted">© 2017-2018</p>
    			<a class="btn btn-sm" th:href="@{/star(language='zh_CN')}">中文</a>
    			<a class="btn btn-sm" th:href="@{/star(language='en_US')}">English</a>
    		</form>
    	</body>
    
    </html>
    
  • MyLocaleResolver

    public class MyLocaleResolver implements LocaleResolver {
        //解析请求
        @Override
        public Locale resolveLocale(HttpServletRequest httpServletRequest) {
            //获取请求中的语言参数
            String language=httpServletRequest.getParameter("language");
            Locale locale;
            if (!StringUtils.isEmpty(language)){
                //如果有语言参数
                String[] split=language.split("_");
                System.out.println(language);
                locale=new Locale(split[0],split[1]);
            }else{
                //如果没有就使用默认的
                locale=Locale.getDefault();
            }
            return locale;
        }
    
        @Override
        public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
    
        }
    }
    

(3)将MyLocaleResolver注册成Bean

    //在MyMvcConfig注册Bean
    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();
    }

6整合数据库

[1]整合JDBC

  • 配置yaml文件

    spring:
      Datasource:
        username: root
         #纯数字会报错,要加引号转换为字符串
        password: "123456"
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    
  • 通过JdbcTemplate使用数据库

    @RestController
    public class JDBCController {
        @Autowired
        JdbcTemplate jdbcTemplate;
    
        @GetMapping("/query")
        public List<Map<String,Object>> query(){
            String sql="select * from mybatis.user";
            List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
            return maps;
        }
        @GetMapping("/update/{id}")
        public String update(@PathVariable("id") int id){
            String sql="update mybatis.user set name=?,pwd=? where id="+id;
            Object[] objects = new Object[2];
            objects[0]="王刚";
            objects[1]="111111";
            jdbcTemplate.update(sql,objects);
            return "update_OK";
        }
        @GetMapping("/insert")
        public String insert(){
            String sql="insert into mybatis.user(id, name, pwd) VALUE (?,?,?)";
            Object[] objects = new Object[3];
            objects[0]=7;
            objects[1]="李刚";
            objects[2]="111111";
            jdbcTemplate.update(sql,objects);
            return "insert_OK";
        }
        @GetMapping("/delete/{id}")
        public String delete(@PathVariable("id") int id){
            String sql="delete from mybatis.user where id="+id;
            jdbcTemplate.update(sql);
            return "delete_OK";
        }
    
    }
    

[2]整合Driud数据源

  • 目标:将默认数据源Hikari修改为Driud

  • 介绍:

    • Hikari:号称Java web最快数据源
    • Driud:是阿里巴巴开源平台上的数据库连接池实现,结合了多个DB池的优点,同时加入了日志监控
  • com.alibaba.druid.pool.DruidDataSource 基本配置参数如下:

    配置缺省值说明
    name配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。 如果没有配置,将会生成一个名字,格式是:“DataSource-” + System.identityHashCode(this)
    jdbcUrl连接数据库的url,不同数据库不一样。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
    username连接数据库的用户名
    password连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
    driverClassName根据url自动识别这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下)
    initialSize0初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
    maxActive8最大连接池数量
    maxIdle8已经不再使用,配置了也没效果
    minIdle最小连接池数量
    maxWait获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
    poolPreparedStatementsfalse是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
    maxOpenPreparedStatements-1要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
    validationQuery用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
    validationQueryTimeout单位:秒,检测连接是否有效的超时时间。底层调用jdbc
    Statement对象的void setQueryTimeout(int seconds)方法
    testOnBorrowtrue申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    testWhileIdlefalse建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
    timeBetweenEvictionRunsMillis1分钟
    ( 1.0.14 )
    有两个含义: 1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
    numTestsPerEvictionRun不再使用,一个DruidDataSource只支持一个EvictionRun
    minEvictableIdleTimeMillis30分钟
    ( 1.0.14 )
    连接保持空闲而不被驱逐的最长时间
    connectionInitSqls物理连接初始化的时候执行的sql
    exceptionSorter根据dbType自动识别当数据库抛出一些不可恢复的异常时,抛弃连接
    filters属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
    proxyFilters类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系
  • 配置druid

    • 添加上 Druid 数据源依赖

      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.1.23</version>
      </dependency>
      
    • 切换数据源,设置数据源连接初始化大小、最大连接数、等待时间、最小连接数 等设置项;可以查看源码

      spring:
        datasource:
          username: root
          password: 123456
          url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource # 自定义数据源
          #Spring Boot 默认是不注入这些属性值的,需要自己绑定
          #druid 数据源专有配置
          initialSize: 5
          minIdle: 5
          maxActive: 20
          maxWait: 60000
          timeBetweenEvictionRunsMillis: 60000
          minEvictableIdleTimeMillis: 300000
          validationQuery: SELECT 1 FROM DUAL
          testWhileIdle: true
          testOnBorrow: false
          testOnReturn: false
          poolPreparedStatements: true
      
          #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
          #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
          #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
          filters: stat,wall,log4j
          maxPoolPreparedStatementPerConnectionSize: 20
          useGlobalDataSourceStat: true
          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
      
    • 导入Log4j 的依赖

      <!-- https://mvnrepository.com/artifact/log4j/log4j -->
      <dependency>    
          <groupId>log4j</groupId>    
          <artifactId>log4j</artifactId>    
          <version>1.2.17</version>
      </dependency>
      
    • 为 DruidDataSource 绑定全局配置文件中的参数

      @Configuration
      public class DruidConfig {
          /*
             将自定义的 Druid数据源添加到容器中,不再让 Spring Boot 自动创建
             绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource从而让它们生效
             @ConfigurationProperties(prefix = "spring.datasource"):作用就是将 全局配置文件中
             前缀为 spring.datasource的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中
           */
          @ConfigurationProperties(prefix = "spring.datasource")
          @Bean
          public DataSource druidDataSource(){
              return new DruidDataSource();
          }
          //配置 Druid 监控管理后台的Servlet;
          //内置 Servlet 容器时没有web.xml文件,所以使用 Spring Boot 的注册 Servlet 方式
          @Bean
          public ServletRegistrationBean statViewServlet(){
              ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
              // 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet的父类 com.alibaba.druid.support.http.ResourceServlet 中找到
              Map<String,String> initParams=new HashMap<>();
              initParams.put("loginUsername", "admin"); //后台管理界面的登录账号
              initParams.put("loginPassword", "111111"); //后台管理界面的登录密码
      
              //后台允许谁可以访问
              //initParams.put("allow", "localhost"):表示只有本机可以访问
              //initParams.put("allow", ""):为空或者为null时,表示允许所有访问
              initParams.put("allow", "");
              
              //deny:Druid 后台拒绝谁访问
              //initParams.put("kuangshen", "192.168.1.20");表示禁止此ip访问
              //设置初始化参数
              bean.setInitParameters(initParams);
              return bean;
          }
          //配置 Druid 监控 之  web 监控的 filter
      	//WebStatFilter:用于配置Web和Druid数据源之间的管理关联监控统计
          @Bean
          public FilterRegistrationBean webStatFilter() {
              FilterRegistrationBean bean = new FilterRegistrationBean();
              bean.setFilter(new WebStatFilter());
              
              //exclusions:设置哪些请求进行过滤排除掉,从而不进行统计
              Map<String, String> initParams = new HashMap<>();
              initParams.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*");
              bean.setInitParameters(initParams);
      
              //"/*" 表示过滤所有请求
              bean.setUrlPatterns(Arrays.asList("/*"));
              return bean;
          }
      
      }
      
    • 配置完毕后,我们可以选择访问 :

      http://localhost:8080/druid

[3]整合mybatis

  • 导入 MyBatis 所需要的依赖

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
    </dependency>
    
  • 配置数据库连接信息(不变)

    spring:
      datasource:
        username: root
        password: "123456"
        url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
        driver-class-name: com.mysql.jdbc.Driver
    
  • 创建实体类,导入 Lombok

  • 创建mapper目录以及对应的 Mapper 接口

    // 这个注解表示了这是一个 mybatis 的 mapper 类
    @Mapper
    @Repository
    public interface UserMapper {
        List<User> allUser();
    }
    
  • 对应的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">
    <!--namespace=绑定一个对应的Dao/Mapper接口-->
    <mapper namespace="">
    </mapper>
    
  • maven配置资源过滤问题

    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
    
  • 编写对应的controller 进行测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值