当前位置: 首页 > news >正文

day2 - SpringBoot框架开发技术

主要内容
1. SpringBoot简介
2. 构建springboot工程
3. springboot接口返回json
4. springboot热部署
5. springboot资源属性配置
6. springboot整合模板引擎
7. springboot异常处理
8. springboot整合MyBatis
9. springboot整合redis
10. springboot整合定时任务
11. springboot整合异步任务以及使用场景
12. springboot中如何使用拦截器

1. SpringBoot简介

SpringBoot特点

  • 基于spring, 使开发者快速入门,门槛较低
  • Springboot可以创建独立运行的应用而不依赖于容器
  • 不需要打包成war包,可以放入tomcat直接运行
  • 提供maven极简配置,缺点是会引入很多你不需要的包
  • 根据项目来依赖,从而配置spring,需要什么配什么
  • 提供可视化的相关功能,方便监控,比如性能,应用的健康程度等
  • 简化配置,不用再看过多的xml
  • 为微服务SpringCloud铺路, SpringBoot可以整合很多各式各样的框架来构建微服务,比如dubbo, thrift等等

2. 构建springboot工程

Reference: https://blog.csdn.net/typa01_kk/article/details/76696618

3. springboot接口返回json

SpringBoot构造并返回一个json对象

package com.firsttry.helloworld.controller;import com.firsttry.helloworld.pojo.IMoocJSONResult;
import com.firsttry.helloworld.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;//@Controller
@RestController //@RestController = @Controller + @ResponseBody
@RequestMapping("/user")
public class UserController {@RequestMapping("/getUser")/*表示将返回的数据封装成json字符串*///@ResponseBodypublic User getUser(){User u = new User();u.setName("Alisa");u.setAge(21);u.setBirthday(new Date());u.setPassword("111111111");u.setDesc("hello I hope I can be much happier, hahahah");return u;}@RequestMapping("/getUserJson")/*表示将返回的数据封装成json字符串*///@ResponseBodypublic IMoocJSONResult getUserJson(){User u = new User();u.setName("Alisa");u.setAge(21);u.setBirthday(new Date());u.setPassword("111111");u.setDesc("emmmmmm11122222");return IMoocJSONResult.ok(u);}
}

Jackson的基本演绎法

package com.firsttry.helloworld.pojo;import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;import java.util.Date;public class User {private String name;@JsonIgnoreprivate String password;private Integer age;@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss a", locale = "Aus", timezone = "GMT+10")private Date birthday;@JsonInclude(JsonInclude.Include.NON_NULL)private String desc;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}
}

4. springboot热部署

SpringBoot使用devtools进行热部署,不需要重启服务器就可以部署文件

Reference: https://www.jianshu.com/p/0e3efd50e3e3

5. springboot资源属性配置

6. springboot整合模板引擎

1. springBoot整合freemarker

pom.xml

 <!--引入freemarker模板依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>

application.properties

########
#
# freemarker 静态资源配置
#
########
# 设定ftl文件路径
spring.freemarker.template-loader-path=classpath:/templates
# 关闭缓存,即时刷新,上线生产环境需改为true
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
spring.freemarker.request-context-attribute=request
spring.freemarker.suffix=.ftl

freemarkerController

package com.firsttry.helloworld.controller;import com.firsttry.helloworld.pojo.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("ftl")
public class FreemarkerController {@Autowiredprivate Resource resource;@RequestMapping("/index")public String index(ModelMap map){map.addAttribute("resource", resource);return "freemarker/index";}@RequestMapping("center")public String center(){return "freemarker/center/center";}}

2. springBoot整合thymeleaf

pom.xml

        <!--引入thymeleaf模板依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

application.properties

########
#
# thymeleaf 静态资源配置
#
########
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
# 关闭缓存,即时刷新,上线生产环境需要改为true
spring.thymeleaf.cache=false

ThymeleafController

package com.firsttry.helloworld.controller;import com.firsttry.helloworld.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;import java.util.ArrayList;
import java.util.Date;
import java.util.List;@Controller
@RequestMapping("th")
public class ThymeleafController {@RequestMapping("/index")public String index(ModelMap map){map.addAttribute("name", "thymeleaf-imooc");return "thymeleaf/index";}@RequestMapping("center")public String center() {return "thymeleaf/center/center";}@RequestMapping("test")public String test(ModelMap map) {User u = new User();u.setName("manager");u.setAge(10);u.setPassword("123465");u.setBirthday(new Date());u.setDesc("<font color='green'><b>hello imooc</b></font>");map.addAttribute("user", u);User u1 = new User();u1.setAge(19);u1.setName("imooc");u1.setPassword("123456");u1.setBirthday(new Date());User u2 = new User();u2.setAge(17);u2.setName("superadmin");u2.setPassword("123456");u2.setBirthday(new Date());List<User> userList = new ArrayList<User>();userList.add(u);userList.add(u1);userList.add(u2);map.addAttribute("userList", userList);return "thymeleaf/test";}@PostMapping("postform")public String postform(User u) {System.out.println("姓名:" + u.getName());System.out.println("年龄:" + u.getAge());return "redirect:/th/test";}
}

thymeleaf常用标签的使用方法

  1. 基本使用方式
  2. 对象引用方式
  3. 时间类型转换
  4. text与utext的比较
    utext: html代码会解析成对应的css代码
  5. URL
  6. 引入静态资源
  7. 条件判断th:if
  8. th:unless 与 th:if 的使用
  9. 循环 th:each
  10. text 与 utext
  11. th:switch 与 th:case

7. springboot异常处理

  • 页面跳转形式
  • ajax形式
  • 统一返回异常的形式

8. springboot整合MyBatis

  • 使用generatorConfig生成mapper以及pojo
  • 实现基于mybatis的CRUD功能
  • 整合mybatis-pagehelper实现分页
  • 自定义mapper的实现

SpringBoot整合持久层事务(为数据库操作设定事务级别)

  • 事务隔离级别:DEFAULT READ_UNCOMMITTED READ_COMMITTED REPEATABLE_READ SERIALIZABLE

-事务的传播行为:REQUIRED SUPPORTS MANDATORY REQUIRES_NEW NOT_SUPPORTED NEVER NESTED

9. springboot整合redis

  • pom.xml引入需要的依赖
  • 资源文件中对redis进行配置
  • 引入redis工具类

10. springboot整合定时任务task

  • 使用注解@EbableScheduling开启定时任务,会自动扫描
  • 定义@Component作为组件被容器扫描
  • 表达式生成地址: https://cron.qqe2.com/

11. springboot整合异步任务以及使用场景

  • 使用注解@EnableAsync开启异步,会自动扫描
  • 定义@Component @Async作为组件被容器扫描执行

12. springboot中如何使用拦截器

  • 使用注解@Configuration配置拦截器
  • 继承WebMvcConfigurerAdapter
  • 重写addInterceptors添加需要的拦截器地址

本文主要参考源码:https://github.com/leechenxiang/imooc-springboot-starter



喜欢的朋友记得点赞、收藏、关注哦!!!

http://www.lryc.cn/news/543798.html

相关文章:

  • Flash-03
  • 新建菜单项的创建之CmpGetValueListFromCache函数分析
  • 【Word2Vec】Skip-gram 的直观理解(深入浅出)
  • 在MacOS上打造本地部署的大模型知识库(一)
  • (21)从strerror到strtok:解码C语言字符函数的“生存指南2”
  • DeepSeek推出DeepEP:首个开源EP通信库,让MoE模型训练与推理起飞!
  • 1.2 Kaggle大白话:Eedi竞赛Transformer框架解决方案02-GPT_4o生成训练集缺失数据
  • 数据结构-顺序表专题
  • docker和containerd从TLS harbor拉取镜像
  • kafka-关于ISR-概述
  • el-input实现金额输入
  • C++11智能指针
  • 安装Git(小白也会装)
  • 驭势科技9周年:怀揣理想,踏浪前行
  • 一款在手机上制作电子表格
  • Python解决“比赛配对”问题
  • 【AI论文】RAD: 通过大规模基于3D图形仿真器的强化学习训练端到端驾驶策略
  • Web开发:ORM框架之使用Freesql的导航属性
  • 【docker】namespace底层机制
  • 【每天认识一个漏洞】url重定向
  • 端口映射/内网穿透方式及问题解决:warning: remote port forwarding failed for listen port
  • Polardb开发者大会
  • 从二维随机变量到多维随机变量
  • Vulnhub靶场 Kioptrix: Level 1.3 (#4) 练习
  • 权重生成图像
  • 实时时钟(RTC)/日历芯片PCF8563的I2C读写驱动(2):功能介绍
  • 猿大师播放器:HTML内嵌VLC播放RTSP视频流,无需转码,300ms级延迟,碾压服务器转码方案
  • 牛客刷题自留-深度学习
  • AI 时代下,操作系统如何进化与重构?
  • Hadoop最新版本hadoop-3.4.1搭建伪分布式集群以及相关报错解决