SpringBoot学习

1.springboot  配置文件

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-pro</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-pro</name>
    <description>springboot-pro</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
<!--  spring-boot-starter所有的springboot依赖都是使用的这个开头      -->

<!--    web依赖:tomcat.dispatcherServlet.xml    -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--单元测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

<!--  把项目中的springboot自定义属性配置类生成一个元素数据文件,
这个文件可以生成以后在未来的配置文件中,我们就达到和官方一致效果,可以自动提示     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
<!--     打jar包插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

注解(装配原理)

//@SpringBootApplication:标注这个类是一个springboot的应用:启动类下所有的资源被导入
@SpringBootApplication

1.@ComponentScan()     定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中

@ConfigurationPropertiesScan  与上面的配置扫描
2.@SpringBootConfiguration:springboot的配置

         @Configuration:spring配置类

         @Component:说明这也是一个spring的组件(把普通pojo实例化到spring容器中)

@EnablieAutoconfiguration:自动配置
         @Autoconfiguration:自动配置包
              @Import(AutoConfigurationPackages.Registrar.class):自动配置包注册
         @Import(AutoconfigurationImpertSelector.class):自动配置导入选择



//获取所有的配置
List <String> configuration=getCandidateConfigurations()

主启动类如何运行

JavaConfig     @Configuration(配置类)  @Bean(组件)

自动装配

//@SpringBootApplication:标注这个类是一个springboot的应用:启动类下所有的资源被导入
@SpringBootApplication
public static void main(String[] args) {
    SpringApplication.run(SpringbootApplication.class,args);

run():1.判断是普通项目还是Web项目      2.推断当前的主类     3.存在监听器,获取上下文处理bean,全面接管SpringMVC的配置

application.yml

application.properties  语法结构:key=value(官方不推荐)

语法结构:key:空格value

# 普通的key-value
name: liuben

# 对象
student:
  name: liuben
  age: 19

# 行内写法

#对象
student1: {name:liuben,age:18}
#数组
pets:
  - cat
  - dog
  - pig

pets1: [cat,dog,pig]

给属性赋值的几种方式

yaml可以直接给实体类赋值

@Component //实现bean注入
@Autowired //把bean对象的setter/getter方法省略,自动帮你getter/setter
@Qualifier  //意思为合格者,表明哪个实现类才是我们所需要的,在注解的括号中添加类名(多个类同时存在时选择)
@ConfigurationProperties(prefix = "person")  //将实体类和配置类绑定起来,prefix为前缀(连接配置类的名)
@Validated  //数据校验  JSR-303

1.用@Value(" ")一个一个赋值

public class Dog {
    @Value("旺财")
    private String name;
    @Value("3")
    private Integer age;

@Component  //注册bean
public class Person{
//直接使用@value
@Value("${person.name}")   //从配置文件中赋值
private String name;
@Value("#{11*2}")  //EL表达式
Private Integer age;
@Value("true")    //字面量
Private Boolean happy;

}

1. #{} 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符;而${}仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

2. #{} 解析之后会将String类型的数据自动加上引号,其他数据类型不会;而${} 解析之后是什么就是什么,他不会当做字符串处理。

3. #{} 很大程度上可以防止SQL注入(SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作);而${} 主要用于SQL拼接的时候,有很大的SQL注入隐患。

4.在某些特殊场合下只能用${},不能用#{}。例如:在使用排序时ORDER BY ${id},如果使用#{id},则会被解析成ORDER BY “id”,这显然是一种错误的写法。

2.yml配置文件

将实体类和配置文件绑定起来,映射到这个组件中

@Component
@ConfigurationProperties(prefix = "person")
public class Person {



person:
  name: liuben
  age: 19
  happy: true
  birth: 2009/09/25
  maps: {k1:v1,k2:v2}
  list:
    - code
    - music
    - girl

松散绑定:比如我的yml中写的last-name,这个和lastName是一样的,-后面跟着的字母默认是大写

JSR-303校验:添加@Validated注解      一种校验方式(对输入的字段进行校验,判断是否满足条件),放在定义的上面 eg:Private String name;

   具体使用数据直接在网上搜

只有在单独获取配置文件的某个值的时候,可以使用一下@value,其他时候都用@configurationProperties

可在以下位置配置yml文件:(优先级从高到低排序)

1.file:./config/

2.file:./

3.classpath:/config/

4.classpath:/

多环境配置

1.使用properties(麻烦)

可以选择激活哪一个配置文件

application.properties(在此调控)

# springboot的多环境配置:可以选择激活哪一个配置文件
spring.profiles.active=test

application-dev.properties

application-test.properties

2.使用yml(推荐)

application.yml

server:
    port:8081
spring: 
    profiles:
    active:dev


---
server:
   port:8082
spring:
   profiles:dev


---
server:
   port:8083
spring:
   profiles:test

2.SpringBoot Web开发

自动装配

xxxxAutoConfiguration  向容器中自动配置组件

xxxxProperties:自动装配类,装配配置文件中自定义的一些内容

静态资源

@Controller标识的类,控制层/表现层

@Service     业务逻辑层

@Resposity   Dao层/持久层

@ResponseBody将java对象转为json格式的数据

@RestController=@Controller+@ResponseBody

使用以下方式处理静态资源

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

优先级:resources>static(默认)>public

thymeleaf模板引擎

在templates目录下的所有页面,只能通过controller来跳转

这个需要模板引擎的支持   thymeleaf

ctrl+f  打开idea搜索

只要需要使用thymeleaf,只需要导入对应的依赖就可以,我们将html放在我们的templates目录下即可

<dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-java8time</artifactId>
        </dependency>

所有的html元素都可以被thymeleaf替换接管       

th:元素名
th:text="${msg}"     th:style=""

导入头文件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

语法

变量:${...}

选择表达式:*{...}

消息:#{...}

URL:@{...}

片段:~{...}

使用

test.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--所有的html元素都可以被thymeleaf  替换接管;  th:元素名-->
<div th:text="${msg}"></div>
</body>
</html>

IndexController

package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

//在templates目录下的所有页面,只能通过controller来跳转
@Controller
public class IndexController {
   @RequestMapping("/test")
    public String test(Model model){
        model.addAttribute("msg","hello,springboot");
       return "test";
    }
}

一些表达式

IndexController.java

package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Arrays;

//在templates目录下的所有页面,只能通过controller来跳转
@Controller
public class IndexController {
   @RequestMapping("/test")
    public String test(Model model){
        model.addAttribute("msg","<h1>hello,springboot</h1>");

        model.addAttribute("users", Arrays.asList("liu","ben"));
        return "test";
    }
}

test.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--所有的html元素都可以被thymeleaf  替换接管;  th:元素名-->
<div th:text="${msg}"></div>
<div th:utext="${msg}"></div>

<hr>

<h3 th:each="user:${users}" th:text="${user}"></h3>

</body>
</html>

MVC

配置原理

package com.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.Locale;


//扩展springmvc   dispatchservlet
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    //如果想diy一些定制化的功能,只要写这个组件,然后将它交给springboot,springboot就会帮我们自动装配
    // ViewResolver  实现了视图解析器接口的类,我们就可以把它看做视图解析器
    @Bean
    public ViewResolver myViewResolver(){
        return new MyViewResolver();
    }


    //自定义了一个自己的视图解析器MyViewResolver
    public static class MyViewResolver implements ViewResolver{

        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            return null;
        }
    }
}

3.员工管理系统

准备工作

页面放templates  

资源放static

pojo:Department   Employee

dao:DepartmentDao    EmployeeDao

Lombok:java的一个库,能自动插入编辑器并构建工具,不需要为类编写getter和equals方法

(使用:xml导入依赖,再在类上加  @Data)

@AllArgsConstructor有参构造
@NoArgsConstructor无参构造

@Repository和@Controller、@Service、@Component的作用差不多,都是把对象交给spring管理。@Repository用在持久层的接口上,这个注解是将接口的一个实现类交给spring管理

@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法

首页实现

添加静态资源需要

# 关闭模板引擎的缓存
spring.thymeleaf.cache=false

首页配置:所有页面的静态资源都需要使用thymeleaf接管

url:@{}

页面国际化

中英文可以直接切换

#我们的配置文件的真实位置
spring.messages.basename=i18n.login

1.配置i18n文件

2.如果需要在项目中进行按钮自动切换,自定义一个组件LocaleResolver

3.将自己写的组件配置到spring容器   @Bean

4.#{}

登录功能实现

@RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求

@ResponseBody的作用其实是将java对象转为json格式的数据(在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中)

@RequestParam用于将请求参数区数据映射到功能处理方法的参数上

使用model完成数据的页面回显

public String login(@RequestParam("username") String username,
                        @RequestParam("password") String password,
                        Model model)

后台往前台传参数(账号密码错误,返回登录失败)

html

<p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>

java

model.addAttribute("msg","用户名或密码错误!");

拦截器

必须登录过后才能访问除了首页以及登录界面的其他页面

展示员工列表

model.addattribute(K,V)往前台传数据,可以传对象,可以传List,通过el表达式 ${}可以获取到

1.提取公共页面

1.th:fragment="sidebar"
2.th:replace="~{commons/commons::sidebar}"
3.如果要传递参数,可以直接使用()传参,接受判断即可

2.列表循环展示

添加员工

1.按钮提交

2.跳转到添加页面

3.添加员工成功

4.返回首页

页面通过controller跳到添加页面,先查出原来的页面,添加结束,跳到controller保存增加信心,再通过controller重定向到原来的展示页面

*转发操作
* 1.forward:转发页面和转发到的页面可以共享request里面的数据
  redirect:不能共享数据
  *
  * 2. forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
       redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

  * 3.转发是服务器行为,重定向是客户端行为

修改员工

拿添加员工改,比添加员工多一个将原本的数据返回

404

在resources的templates里创建error文件夹,将404页面放入

注销

session.invalidate();

4.如何写一个网站

1.前端搞定:页面长什么样子:数据

2.设计数据库(难点)

3.前端让他能够自动运行,独立化工程

4.数据接口如何对接:json

5.前后端联调测试

5.整合Mybatis框架

整合包  mybatis-spring-boot-starter

勾选配置

 右侧database连接数据库,选择相应的表

proerties或者yml配置

导入lombok依赖

 创建User类

创建Mapper接口类

 配置mybatis

去mybatis官网找文档

修改namespace,写sql语句

 再去properites中整合mybatis

写sql语句,可以直接从UserMapper中alt+enter创建过来

 跳过了service层,写了controller

业务层调用dao层,controller调用service层 

6.安全

springsecurity

shiro

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值