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>