springboot

maven中添加

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>
<dependencies>
    <!--热部署的依赖-->
    <dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
</dependencies>

在父pom中已经把全部的启动器声明了,dependency直接引用就可以了

配置文件除了可以用application.properties类型,还可以是后缀名为.yml或.yaml的类型也会自动加载

yaml是一种间接地非标记语言,是以数据为中心,使用空白缩进,分行组织数据从而使得表更加简洁易读

名字也必须要是application.yml或者application.yaml

yaml语法

jdbc:
  driverClassName: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8
  username: root
  password: 123123

@SpringBootApplication代表了三个注解

@SpringBootConfiguration //配置类,今后做了@bean的配置会自动读取

@EnableAutoConfiguration //Enable代表开启什么功能,当前是开启自动配置的功能,比如当前项目添加了web启动器,所以就会把web相关的jar包给引入,springboot提供了大量的第三方配置

@ComponentScan //配置包扫描,一般把application启动类,放到前面一点,以便扫描当前目录下的所有类和子包中的类

@RestController //在控制器上标注,如果是ajax请求不需要标注@responsebody,

日志级别设置

日志有不同的级别如果是info模式debug的日志就看不到了,debug模式能看到全部的输出信息

在配置文件里面可以设置日志的级别

package com.itlike.web;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class MyController {
    //可以用@Slf4j进行代替
    private static final Logger log= LoggerFactory.getLogger(MyController.class);
    @RequestMapping("/hello")
    public String hello(){
        log.info("hello info--------");
        log.debug("12312321");
        return "hello";
    }
}
server:
  port: 80 #修改端口号

spring:
  mvc:
    servlet:
      load-on-startup: 1 #在tomcat启动的时候就创建
logging:
  level: #设置level的键值对
    com.itlike: debug #将com.itlike设置成debug级别
    #还可以填debug,info,fatal致命性错误的时候,off关闭全部日志,error报错的时候
    path: "D:/test/test.log"  #在d盘下的test/test.log文件夹进行输出日志

注解扫描包扫描spring boot都自带了(视图解析器,不支持jsp),但是要自己配置拦截器

配置拦截器

WebMvcConfig.java

package com.itlike.config;

import com.itlike.interceptor.MyInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//注解声明拦截器
@Configuration
//创建类实现WebMvcConfigurer然后添加拦截器
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加拦截器.设置拦截路径
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }
}

MyInterceptor.java

package com.itlike.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
public class MyInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //在请求到达之前就会执行
        log.debug("MyInterceptor--preHandl");
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

集成mybatis

在maven之中添加追光者(jdbc连接池组件,springboot自带)连接池

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--添加mysql的驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!---->

classpath

首先 classpath是指编译过后的的classes目录

  • 对于maven的所有项目, 配置文件一般放在resources目录下, 当编译之后会自动复制到classes目录下
  • 非maven的所有项目, 一般放在src目录下, 编译之后也会自动复制到classes目录下面.1
server:
  port: 80 #修改端口号

spring:
  mvc:
    servlet:
      load-on-startup: 1 #在tomcat启动的时候就创建
    datasource:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8
    username: root
    password: 123123

logging:
  level: #设置level的键值对
    com.itlike: debug #将com.itlike设置成debug级别
  #path: "D:/test/test.log"  #在d盘下的test/test.log文件夹进行输出日志

mybatis:
  mapper-locations: mapper/*Mapper.xml
  type-aliases-package: com.itlike.pojo #配置别名
  configuration:
    map-underscore-to-camel-case: true #能够识别驼峰命名法

通用mapper

放标开发人员,按照自己需要选择通用的方法,还可以很方便的开发自己的通用方法,只支持单表的操作

Thymeleaf

添加依赖

<!--Thymeleaf-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

控制器

package com.itlike.web;

import com.itlike.pojo.Hero;
import com.itlike.service.HeroService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@Slf4j
@Controller
public class MyController {

    @Autowired
    private HeroService heroService;

    //private static final Logger log= LoggerFactory.getLogger(MyController.class);
    @RequestMapping("/hello")
    public String hello(Model model){
        log.info("hello info--------");
        //log.debug("12312321");
        List<Hero> allHero = heroService.getAllHero();
        System.out.println(allHero);
        model.addAttribute("name","itlike");
        return "myHello";//默认扩展名为.html 是在resources下寻找templates目录下的静态文件
    }
}

myHello.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1 th:text="${name}">大标题</h1>
    <h1 th:text="${hero.username}">大标题</h1>
    <hr/>
    <div th:object="${hero}">
        <p th:text="*{username}"></p>
        <p th:text="*{phone}"></p>
        <p th:text="*{id}"></p>
    </div>
    <a href="" th:href="@{http://www.itlike.com}">链接</a>
    <img src="" th:src="@{/logo.png}">
    <img src="" th:src="@{~/logo.png}">

    <a href="" th:href="@{/hello(id=1)}">跳转传参</a>
    <h1 th:text="${'name'+hero.username}">大标题</h1><!--加上单引号变为字面值可以直接显示,可以做拼接支持直接写数字-->
    <h1 th:text="${hero.username}?:'我是空'"></h1><!--如果值为空,就显示文本-->



    [[${name}]]<!--解析内部h5标签-->
    [(${name})]<!--原样输出-->

    <h1 th:if="${1 gt 2}">洛天依1</h1><!--为真实才会显示-->
    <h1 th:unless="${1 gt 2}">洛天依2</h1><!--为真实才会显示-->

    <div th:switch="${hero.username}"><!--switch循环,都不是的华寻找*号的-->
        <p th:case="'itlie'">洛天依</p>
        <p th:case="'iike'">乐正绫</p>
        <p th:case="*">言和</p>
    </div>

</body>
</html>
>, <, >= and <=
但是>, <不能直接使用,因为xml会解析为标签
> gt
< lt
>= ge
<= le
<!DOCTYPE html>
<html lang="en" xmlns:th="http.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div th:switch="${hero.username}"><!--switch循环,都不是的华寻找*号的-->
    <p th:case="'itlie'">洛天依</p>
    <p th:case="'iike'">乐正绫</p>
    <p th:case="*">言和</p>
</div>
    <div>
        <!--根据自己取的名字heroItem来取里面对应的值-->
        <p th:each="heroItem,stat:${allHero}">
            <span th:text="${heroItem.username}"></span>
            <span th:text="${heroItem.phone}"></span>
            <span th:text="'当前的角标为'+${stat.index}"></span>
            <span th:text="'当前元素是第几个'+${stat.count}"></span>
            <span th:text="'元素总数'+${stat.size}"></span>
            <span th:text="'是否为第一个元素'+${stat.first}"></span>
            <span th:text="'是否为最后一个元素'+${stat.last}"></span>
            <span th:text="${stat.current} "></span><!--当前对象的全部信息-->
            <span th:text="${heroItem.onlinetime}"></span>
            <span th:text="${#dates.format(heroItem.onlinetime,'yyyy-MM-dd')}"></span><!--格式化日期-->
        </p>
    </div>
<!--直接通过request对象getAttribute取值-->
    <p th:text="${#request.getAttribute('name')}"></p>
    <!--<p th:text="#ctx.#session"></p>-->
<p th:text="${#strings.abbreviate(name,5)}"></p><!--截取钱5位最后三位用冒号显示-->
</body>
</html>
<div th:insert="~{base::header}"></div>
<h1>
    中部
</h1>
<!--将公共的标签内容插入到指定标签之中-->
<div th:insert="~{base::#footer}"></div>
<!--将公共标签替换成指定标签-->
<div th:replace="~{base::#footer}"></div>
<!--将公共标签的内容包含到指定标签之中-->
<div th:include="~{base::#footer}"></div>

<script th:inline="javascript">
    var username= /*[[${name}]]*/ "myxq";
    //console.log(username);
</script>
Last modification:April 24, 2022
如果觉得我的文章对你有用,请随意赞赏