SpringBoot

目录

SpingBoot介绍

什么是SpringBoot

SpringBoot有神魔特点

Pom.xml介绍

坐标

parent标签作用

定位

原则

作用

插件说明build

概念

作用

注意事项:

maven命令

注意事项

POM文件常见报错

父版本报错解决办法

插件报错

SpringBoot高级用法

properties文件

代码示例

yml文件

作用

读取properties文件时注意事项

Spring自动装配

Spring容器(IOC)

依赖注入原理

自动装配说明

SpringBoot整合Mybatis

    SpringBoot整合Mybatis 添加配置文件

1.连接数据库创建配置文件

2.SpringBoot整合Mybatis

SpringBoot整合MybatisPlus

    MybatisPlus

    orm思想

以对象的方式操作数据库

    SpringBoot整合Mybatis流程

     @SpringBootTest

    Mybatis调用流程

    MP入门案例

    MP实现原理


SpingBoot介绍

什么是SpringBoot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者

SpringBoot有神魔特点

(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

(2)内嵌Tomcat或Jetty等Servlet容器;

(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;

(4)尽可能自动配置Spring容器;

(5)提供准备好的特性,如指标、健康检查和外部化配置;

(6)绝对没有代码生成,不需要XML配置。

Pom.xml介绍

坐标

  1. 组ID公司域名倒着写groupId
  2. artfactId项目名称不允许重复
  3. version项目版本

parent标签作用

定位

SpringBoot主要的作用整合SSM,使得框架的使用更加简化

原则

开箱即用

作用

1.SpringBoot在内部兼容了当下几乎所有的第三方框架
 2.SpringBoot官网已经将所有兼容的版本进行了定义(几乎解决了版本冲突问题)以后几乎不写版本号
概括: parent标签中管理其他的项目版本信息.

插件说明build

概念

 SpringBoot项目与Maven整合的一个插件

作用


    可以通过插件 执行项目打包/测试/文档生成等操作


注意事项:

该插件不能省略
项目发布时: java -jar xxxx.jar  报错:没有主清单信息!!!!

maven命令

  • clean清除缓存 即删除target文件
  •  install打包

注意事项


   打包之后如果没有生成xxx.jar文件程序此时运行没有问题则去本地位置查找

POM文件常见报错

父版本报错解决办法

  •     清缓存重启
  •     仓库中找到删除回到idea之后刷新maven

插件报错

  • 重启之后依然报错添加版本号
  • 如果暂时不影响代码运行则不管

SpringBoot高级用法

properties文件


数据结构: KEY-VALUE

数据类型: String类型/Number数值
语法:  

  • 1.key-value使用=号连接
  • 2.不需要添加多余的""号
  • 3.pro文件在IDEA中的编码格式UTF-8(手动可改)
  • pro文件在被程序读取时默认采用ISO-8859-1格式,中文必定乱码
  • 4.key=value不要出现多余的空格

代码示例

xxx.properties

person.name=王狗蛋

读取配置文件

package com.jt.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/*
 * 接收用户请求
 * 响应用户的json串*/
@RestController
@RequestMapping()
/*1.响应用户json 可以将对象转化成为json串
 * 2.如果返回值为String类型则返回本身
 * json永远都是串*/
@ResponseBody
//Spring容器启动时,动态添加配置文件 /代表根目录resources文件夹  一般需要修改字符集
//关于注解赋值规范 1.必须满足key-value结构 2.如果属性值只有一个,并且是value属性则可以省略不写 3.如果还是乱码 检查pro字符集编码
@PropertySource(value = "classpath:/person.properties", encoding = "UTF-8")

public class HelloController {
    //   private String day="1";
    /*Spring容器内部为属性赋值
    语法 spel表达式 ${day}
     */
    @Value("${user.day}")
    private String day;
    @Value("${person.name}")
    private String name;

    @RequestMapping("/getMsg")
    public String getMsg() {
        return "这个雨下几天:" + day + "\t" + name;
    }
}

yml文件

  • 数据结构 key-value
  • 数据类型 String/Number

语法:

  • 1.key:(空格)value
  • 2.key与key之间有层级关系,注意缩进
  • 3.字符编码都采用UTF-8
  • 4.可读性较pro文件 更加友好
  • 用法语properties文件基本类似

作用

  •     实现了.java文件与属性赋值的解耦
  •     为了实现特定的业务的赋值.
  •     SpringBoot整合第三方框架时,如果需要额外的配置文件时,常常采用上述的操作实现. 方便扩展
  •     Redis为属性赋值操作

读取properties文件时注意事项

  •     使用PropertiesSource注解(value=“classpatth:/路径”,encoding="utf-8")
  •     默认是字符串不需要再加双引号
  •     使用@Value注解("key")

Spring自动装配

Spring容器(IOC)

  •    说明: Spring容器是在内存中一大块的内存区域,存储Spring管理对象
  •     数据结构: KEY-VALUE结构
  •     数据类型: Map集合
  •     Map详细说明: Key: 类型首字母小写 Value: 对象

依赖注入原理

  • 1.按照类型注入按照属性的类型 去Map集中中查找是否有改类型的对象. 如果有则注入.
  • 2.按照名称注入 根据属性的name 去Map集中中查找对应的KEY

自动装配说明

  •     1.如果对象在进行实例化.如果对象中的属性被 @Autowired注解修饰,则说明应该先注入属性.
  •     2.先根据属性的类型,查找Map集合中是否有该类型的对象.
  •     3.如果根据类型查找没有找到,则根据属性的名称按照name查找对象.
  •     4.如果上述的方式都没有找到,则报错实例化对象失败.
  •     
  •     原则:Spring容器中要求 接口必须单实现. 如果有多实现则通过@Qualifier(“xxxx”)区分即可

SpringBoot整合Mybatis

  •     导入所需要的依赖jar包
  •         mybatis包
  •         数据库驱动包
  •         JDBC包

    SpringBoot整合Mybatis 添加配置文件

1.连接数据库创建配置文件

server:
  port: 8090

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root
    #如果数据库密码以数字0开头 则必须使用""号包裹
    #password: "01234"

#SpringBoot整合Mybatis配置 SpringBoot整合Mybatis
mybatis:
  #定义别名包: 实现对象映射
  type-aliases-package: com.jt.pojo
  #加载映射文件一个接口对应一个映射文件
  mapper-locations: classpath:/mybatis/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

#不打印日志
debug: false

2.SpringBoot整合Mybatis


        驼峰命名规则
       表字段:  user_id,user_name
        对象的属性: userId,userName
        resultType: 保证属性与字段名称必须一致.
        Mybatis提供了驼峰命名规则:
        规则:  字段user_id~~~去除_线~~~之后映射对象的属性userId

 创建映射文件






    
    

    

   创建Mapper接口

package com.jt.mapper;

import com.jt.pojo.User;

import java.util.List;
//Mybatis接口如何交给Spring容器管理!!!!!
public interface UserMapper {
    //查询所有demo_user表的数据
    List getAll();
}

SpringBoot整合MybatisPlus


    MybatisPlus

  •         MyBatis 是一款优秀的持久层框架
  •         Mybatis是一个半自动化的ORM映射框架

    orm思想


        对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换


以对象的方式操作数据库


        1. 要求查询的结果集可以自动的封装为对象 (读)
        2. 利用对象封装数据,之后(自动)动态的生成Sql语句执行相关操作. (更新)


    SpringBoot整合Mybatis流程

  •         导入依赖jar包 数据库驱动/JDBC包/Spring整合Mybatis包
  •         编辑application.yml文件 配置数据源/配置Spring整合Mybatis
  •         编辑Mybatis 接口文件/编辑xxx.xml映射文件
  •         通过@MapperScan为接口创建代理对象.

     @SpringBootTest


        注解是SpringBoot程序 为了简化后端代码测试 提供了专门的测试API.
        测试时需要Spring容器管理对象,同时将测试的对象获取 之后进行测试.
        注意事项: 测试注解只能在测试包中运行.


    Mybatis调用流程


        Spring容器为接口创建代理对象. Spring容器启动对象立即创建
        根据 @Autowired 注解动态注入Mapper接口的代理对象
        用户通过Mapper接口调用方法.(执行业务操作)
        Mybatis根据接口方法动态匹配xml的映射文件
        1.根据Mapper的接口路径匹配xml映射文件中的 com.jt.mapper.UserMapper
        2.根据接口的方法 匹配xml映射文件中的Sql ID 之后执行Sql语句
        5.Mybatis将结果集封装为对象 之后返回.


    MP入门案例

  •         导入jar包


    4.0.0

    org.example
    springboot_demo3_mp2
    1.0-SNAPSHOT
    
        org.springframework.boot
        spring-boot-starter-parent
        2.5.2
        
    

    
        1.8
        
        true
    

    
    
        
            org.springframework.boot
            
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
        
            org.springframework.boot
            spring-boot-devtools
        

        
        
            org.projectlombok
            lombok
        

        
        
            mysql
            mysql-connector-java
            runtime
        

        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        

        
        
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.3
        
    


  •          配置对象关系映射
package com.jt.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;

@Data
@Accessors(chain = true)
@Component
@TableName("demo_user")
public class User {
    @TableId(type = IdType.AUTO )
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
}

            @TableName(表名)
            @TableId(主键)
            @TableFiled()字段 如果符合驼峰命名可以选择不写

  •         继承公共API接口BaseMapper接口
package com.jt.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.User;

public interface UseDao extends BaseMapper {
}
  •         编辑YML配置文件
server:
  port: 8090
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root
    #如果数据库密码以数字0开头 则必须使用""号包裹
    #password: "01234"

#SpringBoot整合Mybatis配置 SpringBoot整合Mybatis
mybatis-plus:
  #定义别名包: 实现对象映射
  type-aliases-package: com.jt.pojo
  #加载映射文件一个接口对应一个映射文件
  mapper-locations: classpath:/mybatis/*.xml
  #mapper-locations: classpath:/UserMapper.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

#不打印日志
debug: false
#打印日志
logging:
  level:
    com.jt.mapper: debug
  •         工具API测试增删改查
package com.jt;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.dao.UseDao;
import com.jt.pojo.User;

import org.apache.ibatis.annotations.Param;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.Collection;

@SpringBootTest
public class RunApp1 {
    @Autowired
    UseDao userDao;
    @Test
    public void test1(){
        QueryWrapper userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.eq("id", 231);
        userDao.delete(userQueryWrapper);
        System.out.println("删除成功");
    }
    @Test
    public void deletes(){
        Collection collection=new ArrayList();
        collection.add(10);
        collection.add(20);
        userDao.deleteBatchIds(collection);
        System.out.println("删除成功");
    }
    @Test
    public void deleteOne(){
        QueryWrapper userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.eq("name", "吴亦凡").eq("sex", "女");
        userDao.delete(userQueryWrapper);
        System.out.println("SuccessFul");
    }
    @Test
    public void testInsert(){
        QueryWrapper userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.eq("name", "吴凡凡");
        userDao.update(new User().setName("朱军海运").setAge(100),userQueryWrapper);
        System.out.println("修改成");
    }
    @Test
    public void test(){

        userDao.updateById(new User().setId(18).setName("云英").setSex("男").setAge(16));
        System.out.println("修改成");
    }
}

    MP实现原理

  •         用户执行User对象入库操作 userMapper.insert(user);
  •         由于接口方法中需要传递泛型对象,则根据用户配置查找对应的泛型对象
  •         根据用户的接口获取Mapper接口的父级接口BaseMapper,根据BaseMapper中的泛型对象 获取信息User.class类型
  •         根据User.class 动态获取@TableName(“demo_user”) 获取对象对应的表名.之后通过@TableField(“name”)绑定与之对应的字段. 至此对象与表完成了映射.
  •         根据上述的映射关系,动态的拼接Sql语句.

        例子: userMapper.insert(user对象) 如何转化Sql?
        **insert into 表名(字段名…) values (属性值…)
        insert into demo_user(id,name,age,sex) values (“吴xx”,xx,xx,xx)
        MP将动态生成的Sql交给Mybatis执行最终实现数据入库操作!!!
 

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