适合springboot初学者!通过解析SpringBoot项目源码总结知识点,快速学习+复习

springboot小结:员工管理系统开发源码阅读理解

该项目源码来自B站编程不良人,项目为员工管理系统。数据库十分简单,只有登录用户表和员工表。本篇目的在于一步步分析项目及其源码,快速带领大家走进springboot项目的完成,从上至下学习知识点,可达到事半功倍的效果。

项目源码提取在文末!!!

本项目解读涉及复习到的的技术栈包含:html、thymeleaf、springboot、mybatis、mysql、spring、javaWeb(session)

前言

前言所涉及知识点较为基础全面,基础好的小伙伴可直接跳过或者略读。

(1)常用注解说明

spring的一大特点便是面向注解开放,将建立的类注册为bean交给spring容器管理其的使用调度,所以在复习springboot知识点前,先复习各个注解对应的应用。

1、成为可被扫描装配的组件
  • @Component :通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
  • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
  • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
  • @Controller : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。

解析:我们一般使用 @Autowired 注解让 Spring 容器帮我们自动装配 bean。要想把类标识成可用于 @Autowired 注解自动装配的 bean 的类,可以采用以上注解实现。

2、赋值
  • @value(常用)

使用 @Value("${property}") 读取比较简单的配置信息:

@Value("${wuhan2020}")
String wuhan2020;
  • @ConfigurationProperties(常用)

通过@ConfigurationProperties读取配置信息并与 bean 绑定。

@Component
@ConfigurationProperties(prefix = "library")

static class Book {
    String name;
    String description;
    }

你可以像使用普通的 Spring bean 一样,将其注入到类中使用。

  • PropertySource(不常用)

@PropertySource读取指定 properties 文件

@Component
@PropertySource("classpath:website.properties")

class WebSite {
    @Value("${url}")
    private String url;
}
3、控制器

@RestController

@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直接填入HTTP响应体中,是REST风格的控制器。

现在都是前后端分离,说实话我已经很久没有用过@Controller。如果你的项目太老了的话,就当我没说。

单独使用 @Controller 不加 @ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的 Spring MVC 的应用,对应于前后端不分离的情况。@Controller +@ResponseBody 返回 JSON 或 XML 形式数据

@Controller返回一个页面

@RestController返回json或xml形式数据

@Controller+@ResponseBody返回JSON 或 XML 形式数据

4、主类

@SpringBootApplication

我们可以把 @SpringBootApplication看作是 @Configuration@EnableAutoConfiguration@ComponentScan 注解的集合。

根据 SpringBoot 官网,这三个注解的作用分别是:

  • @EnableAutoConfiguration:启用 SpringBoot 的自动配置机制
  • @ComponentScan:扫描被@Component (@Service,@Controller)注解的 bean,注解默认会扫描该类所在的包下所有的类。
  • @Configuration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类
5、自动导入对象到类中

@Autowired

自动导入对象到类中,被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。

我们一般使用 @Autowired 注解让 Spring 容器帮我们自动装配 bean。要想把类标识成可用于 @Autowired 注解自动装配的 bean 的类,可以采用以下注解实现:

  • @Component :通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
  • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
  • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
  • @Controller : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
6、Mybatis相关

@Mapper:为dao接口添加注释

@MapperScan:为xxxApplication启动类指定Mapper映射文件的位置,若Mapper存储在src/main/resources/mapper/xxxMapper.xml则不需要加该注解

(2)html常见标签复习

  • 基本
    
    <html>html>      定义 HTML 文档
    
    <head>head>   文档的信息
    
    <meta>                    HTML 文档的元信息
    
    <title>title>        文档的标题
    
    <link>                      文档与外部资源的关系
    
    <style>style>    文档的样式信息
    
    <body>body>   可见的页面内容
    
                     注释
    
    文本
    <h1>...h1>               标题字大小(h1~h6)
    
    <b>...b>                   粗体字
    
    <strong>...strong>   粗体字(强调) 
    
    <i>...i>                      斜体字 
    
    <em>...em>              斜体字(强调)
    
    <center>center>   居中文本
    
    <ul>ul>                 无序列表 
    
    <ol>ol>                 有序列表
    
    <li>li>                    列表项目
    
    <a href=”…”>a>    超链接
    
    <font>                         定义文本字体尺寸、颜色、大小
    
    <sub>                         下标
    
    <sup>                         上标
    
    <br>                           换行
    
    <p>                            段落
    
     
    
    图形
    <img src=’”…”>   定义图像
    
    <hr>                   水平线
    
    <del>                  加删除线
    
     
    
    表格
    <table>table>   定义表格
    
    <th>th>            定义表格中的表头单元格
    
    <tr>tr>             定义表格中的行
    
    <td>td>           定义表格中的单元
    
     
    
    其它
    <form>form>    定义供用户输入的 HTML 表单
    
    <frame>                 定义框架集的窗口或框架
    

(3)返回数据与Session

返回数据常用方法

要实现Controller返回数据给页面,Spring MVC 提供了以下几种途径(只列举常见的):

方式一:通过org.springframework.web.servlet.ModelAndView实现

	@RequestMapping(value="/view/{userId}/use/ModelAndView", method=RequestMethod.GET)
	private ModelAndView getUserInfo(@PathVariable("userId") Integer userId){
		User user = userService.getUserById(userId);
		return new ModelAndView("userinfo", "user", user);
	}

ModelAndView:将视图和数据封装成ModelAndView对象,作为方法的返回值,数据最终会存到HttpServletRequest对象中

方式二:通过org.springframework.ui.Model实现

	@RequestMapping(value="/view/{userId}/use/Model", method=RequestMethod.GET)
	private String getUserInfo(@PathVariable("userId") Integer userId, Model model){
		User user = userService.getUserById(userId);
		model.addAttribute("user", user);
		return "userinfo";
	}

Model对象:通过给方法添加引用Model对象入参,直接通过addAttribute往Model对象添加属性值。

方式三:直接将数据存到HttpSession,让页面可以获取

	@RequestMapping(value="/view/{userId}/use/HttpSession", method=RequestMethod.GET)
	private String getUserInfo(@PathVariable("userId") Integer userId, HttpSession session){
		User user = userService.getUserById(userId);
		session.setAttribute("user", user);
		return "userinfo";
	}

Session对象:通过给方法添加引用Session对象入参,直接通过setAttribute往Session对象添加属性值。

Session简单介绍
1、概念

Cookie 可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些 Cookie,如果 Cookie 很多,这无形地增加了客户端与服务端的数据传输量,而 Session 的出现正是为了解决这个问题。

同一个客户端每次和服务端交互时,不需要每次都传回所有的 Cookie 值,而是只要传回一个 ID,这个 ID 是客户端第一次访问服务器的时候生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的 ID,客户端只要传回这个 ID 就行了,这个 ID 通常是 NANE 为 JSESIONID 的一个 Cookie。

当访问服务器否个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session。

Session可实现共享数据,会话之间的数据不能共享

服务器会给每一个用户(浏览器)创建一个Session,一个Session独占一个浏览器,一个Session对应一个ID,所以需要创建一个Cookie对象,并设置其有效时间。这样当用户关闭浏览器,重新打开浏览器访问该页面时,服务器也能找到之前为用户创建的Session对象。

2、Session方法介绍
//新建Session
//用户第1次访问的时候,自动创建会话
//获取Session的创建时间
session.getCreationTime();
//获取Session
HttpSession session = req.getSession();
//给Session储存信息
session.setAttribute("name","pl");//将值与名称关联后存储到当前的HttpSession的对象中
//获取Session的ID
String id = session.getId();
//从HttpSession对象获取Session的信息
String name =(String) session.getAttribute("name");
System.out.println(name);
//返回客户端上一次发送Session请求的时间
session.getLastAccessedTime();
//删除HttpSession对象对应的信息
session.removeAttribute("name");
//强制注销session
session.invalidate();

(4)thymeleaf语法简介

关键字 功能介绍 案例
th:id 替换id
th:text 文本替换

description

th:utext 支持html的文本替换

conten

th:object 替换对象
th:value 属性赋值
th:with 变量赋值运算
th:style 设置样式 th:style="'display:' + @{(${sitrue} ? 'none' : 'inline-block')} + ''"
th:onclick 点击事件 th:onclick="'getCollect()'"
th:each 属性赋值 tr th:each="user,userStat:${users}">
th:if 判断条件
th:unless 和th:if判断相反 Login
th:href 链接地址 Login />
th:switch 多路选择 配合th:case 使用
th:case th:switch的一个分支

User is an administrator

th:fragment 布局标签,定义一个代码片段,方便其它地方引用
th:include 布局标签,替换内容到引入的文件 />
th:replace 布局标签,替换整个标签到引入的文件
th:selected selected选择框 选中 th:selected="(${xxx.id} == ${configObj.dd})"
th:src 图片类地址引入 App Logo
th:inline 定义js脚本可以使用变量

你可能感兴趣的:(spring,java,spring,boot)