SpringBoot笔记

一、SpringBoot的入门程序开发

spring boot其设计目的是用来简化Spring应用的搭建以及开发过程

pom文件中的坐标是勾选添加的。

开发SpringBoot程序可以根据向导进行联网快速制作

运行SpringBoot程序通过运行Application程序入口进行

1.idea联网版

2.官方创建版

3.阿里云版(我只能操作这个)

步骤:选择自定义URL,输入阿里云start地址(https://start.aliyun.com),创建项目

4.手动制作:

①手动导入坐标(继承与依赖)

②手动添加引导类

5.手动导入外界项目

二、解析

1.parent(减少依赖冲突)

2.Start(减少依赖配置)

就是一个包含了若干个坐标的pom管理文件

3.引导类(启动程序)

①spring的容器

        SpringApplication.run(Springboot0103QuickstartApplication.class, args);

②主要靠注解@SpringBootApplication(配置类)

扫描引导类所在包及其子包加载bean

4.内嵌服务器

服务器是用java语言写的,java语言靠对象运行,其对象可以交给Spring管理

内置服务器:tomcat,jetty,undertow

三、REST开发

REST(Representational State Transfer),表现形式状态转换

根据REST风格对资源进行访问称为RESTful

1.@RequestBody,@RequestParam,@PathVariable的区别

@RequestBody用于接收json数据

@RequestParam用于接收url地址传参或表单传参

@PathVariable用于接收路径参数

2.@RestController等同于@Controller,@ResponseBody

四、基础配置

1.复制工程

保留工程基础结构,抹掉原始工程痕迹

2.属性配置方式

修改服务器端口为http://localhost/

即在springboot默认配置文件application.properties,通过键值对配置对应的属性

server.port=80
# 应用服务 WEB 访问端口
server.port=80
#修改banner
#spring.main.banner-mode=off/# 关闭springboot的logo
#spring.banner.image.location=/设置logo
#日志
#logging.level.root=info/打印日志信息

3.配置文件的类型

properties,yml,yaml

①application. properties(默认,传统)
server.port = 80
②application. yml(主流)
server :
        port : 81
③application. yaml
server :
        port : 82

4.配置文件加载优先级

properties>yml>yaml
不同配置文件中相同的配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

5.属性提示消失解决方案

6.yaml数据格式

xml,properties,yaml都是数据存储格式

YAML(YAML Ain't Markup Language),一种数据序列化格式

以数据为核心,重数据轻格式

同样的名称只能出现一次

 ①核心规则:数据前面要加空格与冒号隔开

数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
likes:
 - game
 - music
等同于:
likes2: [game,music,sleep]

users:
 - name: zhangsan
   age:18
 - name: lisi
   age:18
等同于
users3: [{name:zhangsan,age:18},{name:lisi,age:18}]

字面值表示方式

boolean : TRUE
#TRUE,true,True,FALSE,false False 均可
float : 3.14
#6.8523015e+5 # 支持科学计数法
int : 123
#0b1010_0111_0100_1010_1110 # 支持二进制、八进制、十六进制
null: ~
#使用~表示null
string : HelloWorld
# 字符串可以直接书写
string2 : "Hello World"
# 可以使用双引号包裹特殊字符
date : 2018-02-17
# 日期必须使用 yyyy-MM-dd 格式
datetime : 2018-02-17T15:02:31+08:00 # 时间和日期之间使用 T 连接,最后使用 + 代表时区

7.读取yaml单一属性数据

@Value("${country}")
private String country1;
读取数组类型
@Value("${likes[1]")
private String like1;

8.yaml文件中的变量引用

baseDir: c:\window

使用${属性名}引用数据
tempDir: ${baseDir}\temp

支持转义字符,只不过需要用双引号包裹

9.读取yaml全部属性数据

使用自动装配将所有数据封装到一个对象Environment中
@Autowired
private Environment env;

方法中输出:
  System.out.println(env.getProperty("server.port"))

10.读取yaml引用类型属性数据(封装局部数据)

①定义数据模型封装yaml文件中对应的数据

②定义为Spring管控的bean(@Component)

③指定加载的数据(@ConfigurationProperties(“datasource”))意为前缀叫datasource的对象,可获取其中的属性

定义在Controller类中
@Autowired
private MyDataSource myDataSource;

五、整合第三方技术

1.整合JUnit

①关键是@SpringBootTest

②如果将测试类换到与引导类不同的包下(或不同于子包),需要在测试类中补充@SpringBootTest(classes=引导类的类名.class)
或再添加@ContextConfiguration(classes=引导类的类名.class)
原理是找测试类所在包下是否有类去加载@SpringBootConfiguration的注解
③小结
1. 测试类如果存在于引导类所在包或子包中无需指定引导类
2. 测试类如果不存在于引导类所在的包或子包中需要通过 classes
属性指定引导类

2.整合MyBatis

SpringBoot版本低于2.4.3(不含)Mysql驱动版本大于8.0时,需要在url连接串中配置时区

或在 MySQL 数据库端配置时区解决此问题
注意事项
jdbc:mysql://localhost:3306/ssm_db? serverTimezone=UTC
创建模块,勾选Mybatis,Mysql,设置数据源,定义接口,配置映射

3.整合MybatisPlus

报错了,所以我不决定学了

1. 手工添加 MyBatis-Plus 对应的 starter
2. 数据层接口使用 BaseMapper 简化开发
3. 需要使用的第三方技术无法通过勾选确定时,需要手工添加坐标

4.整合Druid

第一种配置:
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
第二种配置:
spring:
  datasource:
    druid:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://localhost:3306/ssm
     username: root
     password: 123456
一直报错的原因是没有连接数据库。
小结:
整合Druid需要导入Druid对应的starter,根据Druid提供的配置方式进行配置

5.整合第三方技术通用的方式

导入对应的starter,根据提供的配置格式,配置非默认值对应的配置项

六、SSMP

1.模块创建

勾选SpringMVC与MySQL坐标

在pom文件中添加mybatisPlus和druid的依赖

2.实体类的开发

Lombok,一个java类库,提供了一组注解,简化POJO实体类开发

在pom中加lombok的坐标

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

加在实体类上的注解@Data(getter,setter,tostring,hashcode,equals方法都有,但没构造器的方法@Constructor)

3.数据层标准开发

添加测试报错后,在yml文件中加id-type即可

mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_
      id-type: auto
查询所有
@Test
    void testGetAllBook() {
        System.out.println(bookDao.selectList(null));
    }

4.开启MP运行日志

为了方便调试,使用配置方式开启日志,设置日志输出方式为标准输出

  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

5.分页

设置一个拦截器对象,在测试类中添加一个IPage对象

IPage对象中封装了分页操作中所有数据(当前页码,每页数据总量,数据总量,数据)

package com.zhou.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MPConfig {
    //第三方bean的配置方式
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
//定义MP拦截器
        MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
//添加具体的拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }

}
测试类
  @Test
    void testGetPage() {
        IPage page=new Page(1,5);
        bookDao.selectPage(page,null);
    }

6.条件查询

  @Test
    void testGetByCondition() {
        QueryWrapper<Book> qw=new QueryWrapper<>();
        qw.like("name","Spring");
        bookDao.selectList(qw);
    }
    @Test
    void testGetByCondition2() {
        String name=null;
        LambdaQueryWrapper<Book> lqw=new LambdaQueryWrapper<>();
        lqw.like(name!=null,Book::getName,name);
        bookDao.selectList(lqw);
    }

7.业务层标准开发

  @Autowired
    private BookDao bookDao;
    @Override
    public Boolean save(Book book) {
        return bookDao.insert(book)>0;
    }

    @Override
    public Boolean update(Book book) {
        return bookDao.updateById(book)>0;

    }

    @Override
    public Boolean delete(Integer id) {
        return bookDao.deleteById(id)>0;

    }

更新时要设置id的值

标准开发一般在定义接口时写名前加个I

如果@Override报错,则证明方法没被覆盖


public interface IBookService extends IService<Book>{
@Override
    boolean save(Book book);
}

​​​​​​使用MyBatisPlus提供有业务层通用接口(ISerivce<T>)与业务层通用实现类(ServiceImpl<M,T>)【M为继承BaseMapper的Mapper接口】

8.表现层标准开发

表现层数据一致性处理(R对象)

设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议。

package com.zhou.utils;

import lombok.Data;

@Data
public class R {
    private Boolean flag;
    private Object data;

    public R() {
    }

    public R(Boolean flag) {
        this.flag = flag;
    }

    public R(Boolean flag, Object data) {
        this.flag = flag;
        this.data = data;
    }
}

9.前后端的调用

前后端分离结构设计中页面归属前端服务器,

单体工程中页面放置在resources目录下的static目录中

 methods: {
            //列表
            getAll() {
                //发送异步请求
                axios.get("/books").then(res=>{
                    console.log(res.data);
                });
            },

①列表功能

将查询的数据返回页面,利用前端数据双向绑定进行数据展示

 //钩子函数,VUE对象初始化完成后自动执行
        created() {
            //调用查询全部数据的操作
            this.getAll();
        },


//列表
getAll() {
axios.get("/books").then((res)=>{
this.dataList = res.data.data;
});
},

②异常信息处理

package com.zhou.utils;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

//作为Springmvc的异常处理器
@RestControllerAdvice
public class ProjectExceptionAdvice {
    //拦截所有的异常信息
    @ExceptionHandler
    public R doException(Exception ex){
        ex.printStackTrace();
        return new R(false,"服务器故障,请稍后再试!");
    }
    
    
}

各个功能(前端)

爱咋咋地

10.基础篇完结

①pom.xml

配置起步依赖

②application.xml

设置数据源,端口,框架技术相关配置(自增,表名前缀,日志)

③dao

继承BaseMapper,设置@Mapper

④service

调用数据层接口或Mybatis-plus提供的接口快速开发

⑤controller

基于Restful开发

⑥页面

放置在resources目录下的static目录中

实用篇见

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值