P3 Day02 SpringBoot高级用法

1. SpringBoot高级用法

1.1 SpringBoot热部署

1.1.1 热部署说明

每次修改代码修改之后,需要手动的重启服务器. 在开发阶段 能否有一种高效的机制. 每次修改代码之后程序自动重启

1.1.2 添加jar包文件

<!--SpringBoot核心机制: "开箱即用"
        只需导入特定的jar包文件 则可以直接使用其中的功能
        根本原因: SpringBoot是对框架的简化,内部进行了扩展,无需程序员操作.
        -->
        <!--支持热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

   
   

    1.1.3 配置IDEA

    触发机制: 程序的代码被修改了之后需要重启,需要配置IDEA自动的编译代码触发修改的状态.
    组合键: ctrl + shift + alt + / 或者 ctrl + alt + a
    展现效果:
    在这里插入图片描述
    勾选自动的运行:
    在这里插入图片描述

    1.2 lombok插件使用

    1.2.1 安装插件

    在这里插入图片描述

    1.2.2 添加jar包

     		<!--引入插件lombok 自动的set/get/构造方法插件  -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
       
       

      1.2.3 lombok作用

      作用: 简化用户创建**实体对象(POJO)**的过程,由插件自动的完成实体对象中常用方法的构建(get/set/toString/构造等)
      代码:
      在这里插入图片描述

      1.2.4 UserController测试

      在这里插入图片描述

      1.2.5 Lombok链式加载

      //注解的作用: 动态的生成get/set/toString....方法
      @Data   //一般为属性赋值 get/set方法
      @NoArgsConstructor  //无参构造
      @AllArgsConstructor //全参构造
      @Accessors(chain = true) //开启链式加载(重写set方法)
      public class User {
          private Integer id;
          private String name;
          private Integer age;
          private String sex;
          //this 代表当前的对象
          /* public User setId(Integer id){
              this.id = id;
              return this;
          }
          public User setName(String name){
              this.name = name;
              return this;
          }
          }*/
      

        1.2.6 Lombok面试题

        思考: lombok使用需要安装插件.
        问:在Linux系统中运行项目 是否需要提前安装插件?
        答案: 不要
        原因: lombok在编译期有效, 由xxx.java文件 编译为xxx.class文件时,已经动态添加了set/get等方法.所以在项目发布的时候( xxx.class文件组成的xxx.jar) ,所以不需要安装lombok环境

        1.3 SpringBoot测试环境说明

        1.3.1 需求说明

        现在调用流程:
        UserController-------->UserService中的方法-----获取返回值!!!

        需求:
        由于编辑UserController的同事 老婆生孩子没来,导致Controller的方法没有编辑,则导致自己写的Service不知对错,暂时无法测试!!!

        解决方案: SpringBoot由于开发中需要经常编译测试方法,为了降低代码联调的代价.则SpringBoot提供了专门用于测试的注解 @SpringBootTest

        1.3.2 @SpringBootTest用法

        注解说明: 如果测试方法中添加了该注解,则当执行@Test注解方法时,则Spring容器将会启动,启动之后将所有需要依赖注入的信息完整构建.之后用户有针对性的挑选需要测试的代码 测试即可.

        1.3.3 测试类入门案例

        在这里插入图片描述

        1.4 Spring容器内存结构

        1.4.1 SpringBoot加载器顺序

        1. 当用户点击main方法时启动程序.(开始)
        2. SpringBoot程序开始加载主启动类上边的注解@SpringBootApplication(SpringBoot内部运行机制开始执行)
        3. 当SpringBoot程序开始执行,则会动态的获取当前主启动类的包路径.(com.jt)
        4. 通过包扫描的机制 将特定的注解标识的类(Controller/Service/Dao).交给Spring容器管理.
        5. Spring容器维护的是一个Map集合 <K,V>
          key: 类名首字母小写 userController
          value: 实例化的对象
          例子: Map<userController,UserController的对象>
        6. 当对象创建时(实例化),遇到@Autowired 则需要依赖注入对象,当整个Spring容器内部都没有该对象时,则会报错 注入失败. 如果Map中维护了需要注入的对象,.则@Autowired 注入成功, 则最终对象实例化正常.
        7. 当上述的操作都运行成功之后则spring容器启动成功,等待用户的调用.
          在这里插入图片描述

        1.5 SpringBoot整合Mybatis

        1.5.1 创建项目

        在这里插入图片描述

        1.5.2 添加jar包

        <!--集中定义版本号-->
        <!--集中定义版本号-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.5.1</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        
        
        <!--2.添加依赖项-->
        <!--依赖: 项目中需要添加什么功能,则依赖什么jar包.-->
        <dependencies>
            <!--引入SpringMVC功能-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--SpringBoot的测试功能-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        
        <!--2.添加依赖项-->
        <!--依赖: 项目中需要添加什么功能,则依赖什么jar包.-->
        <dependencies>
            <!--引入SpringMVC功能-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--SpringBoot的测试功能-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
                <!--SpringBoot核心机制: "开箱即用"
                只需导入特定的jar包文件 则可以直接使用其中的功能
                根本原因: SpringBoot是对框架的简化,内部进行了扩展,无需程序员操作.
                -->
                <!--支持热部署 -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-devtools</artifactId>
                </dependency>
                <!--引入插件lombok 自动的set/get/构造方法插件  -->
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                </dependency>
                <!--引入数据库驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <scope>runtime</scope>
                </dependency>
                <!--springBoot数据库连接  -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-jdbc</artifactId>
                </dependency>
                <!--spring整合mybatis  暂时  -->
                <dependency>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                    <version>2.2.0</version>
                </dependency>
            </dependencies>
            <!--3.添加build标签-->
            <!--该插件是SpringBoot项目打包时必须添加的.
               如果没有该插件 则导致jar包不能运行
           -->
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <version>2.5.1</version>
                    </plugin>
                </plugins>
            </build>
        
        • 1.5.3 编辑主启动类

          在这里插入图片描述

          1.5.4 编辑POJO对象

          在这里插入图片描述

          1.5.5 编辑Mapper接口

          在这里插入图片描述

          1.5.6 编辑测试类

          注意主启动的包路径
          在这里插入图片描述

          1.5.7 编辑Mapper配置文件

              <
               ?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
          <!--语法:namespace="接口的路径" -->
          <mapper namespace="com.jt.mapper.UserMapper">
              <!--规定: 乌龟的屁股
                  要求: 如果对象中的属性与数据库表中的字段一一对映射时,使用resultType
                       如果对象中的属性与数据库表中的字段不对映射时,使用resultMap
                      一般条件下,单表查询一般使用resultType,多表关联查询时使用resultMap
                  注意事项: 不能添加;号   版本冲突严重 mysql Oracle中
              -->
              <!--id必须与接口方法名称一致-->
              <!--别名包可以简化resultType写法 只写类名-->
              <select id="findAll" resultType="User">
                  select * from user
              </select>
          
        <!--
                关于驼峰规则说明:
                需求: 字段: user_id,user_name
                     属性: userId, userName
                作用: 可以自动的识别中间的"_"按照驼峰规则实现单表的映射.
            -->
           <!-- <resultMap id="userRM" type="User">
                &lt;!&ndash;设定主键&ndash;&gt;
                <id column="user_id" property="userId"></id>
                <result column="user_name" property="userName"></result>
            </resultMap>-->
        
        </mapper>
        
        • 1.5.8 编辑YML配置文件

        server:
          port: 8090
        #spring整合数据源 最快的数据源
        spring<span class="token operator">:</span>
          datasource<span class="token operator">:</span>
            #使用高版本驱动时使用cj
            #serverTimezone<span class="token operator">=</span>GMT<span class="token operator">%</span><span class="token number">2</span>B8   东<span class="token number">8</span>区   <span class="token operator">%</span><span class="token number">2</span>B <span class="token operator">+</span>号
            #<span class="token operator">&amp;</span>useUnicode<span class="token operator">=</span><span class="token boolean">true</span><span class="token operator">&amp;</span>characterEncoding<span class="token operator">=</span>utf8 是否开启unicode编码<span class="token operator">/</span>utf<span class="token operator">-</span><span class="token number">8</span>
            #<span class="token operator">&amp;</span>autoReconnect<span class="token operator">=</span><span class="token boolean">true</span>  断线是否重连
            #<span class="token operator">&amp;</span>allowMultiQueries<span class="token operator">=</span><span class="token boolean">true</span> 是否允许批量操作
            driver<span class="token operator">-</span><span class="token keyword">class</span><span class="token operator">-</span>name<span class="token operator">:</span> com<span class="token punctuation">.</span>mysql<span class="token punctuation">.</span>cj<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>Driver
            url<span class="token operator">:</span> jdbc<span class="token operator">:</span>mysql<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span><span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token operator">:</span><span class="token number">3306</span><span class="token operator">/</span>jt<span class="token operator">?</span>serverTimezone<span class="token operator">=</span>GMT<span class="token operator">%</span><span class="token number">2</span>B8<span class="token operator">&amp;</span>useUnicode<span class="token operator">=</span><span class="token boolean">true</span><span class="token operator">&amp;</span>characterEncoding<span class="token operator">=</span>utf8<span class="token operator">&amp;</span>autoReconnect<span class="token operator">=</span><span class="token boolean">true</span><span class="token operator">&amp;</span>allowMultiQueries<span class="token operator">=</span><span class="token boolean">true</span>
            username<span class="token operator">:</span> root
            #如果密码以数字<span class="token number">0</span>开头<span class="token punctuation">,</span>则使用<span class="token string">""</span>号包裹  <span class="token string">"0123456"</span>
            password<span class="token operator">:</span> root
        
        #SpringBoot整合Mybatis配置
        mybatis<span class="token operator">:</span>
          #设置别名包
          type<span class="token operator">-</span>aliases<span class="token operator">-</span><span class="token keyword">package</span><span class="token operator">:</span> com<span class="token punctuation">.</span>jt<span class="token punctuation">.</span>pojo
          #加载映射文件
          mapper<span class="token operator">-</span>locations<span class="token operator">:</span> classpath<span class="token operator">:</span><span class="token operator">/</span>mappers<span class="token comment">/*.xml
          #开启驼峰映射
          configuration:
            map-underscore-to-camel-case: true
        

        1.6 导入数据库

        1.6.1 SqlYog工具说明

        该版本是绿色版本,所以不需要安装 直接运行即可
        在这里插入图片描述
        编辑用户名和密码
        在这里插入图片描述

        1.6.2 数据库导入/导出

        在这里插入图片描述

        1.7 SpringBoot整合Mybatis核心

        1.7.1 编辑jar包

        当SpringBoot 程序启动时.会加载pom.xml文件中指定的jar包文件. 根据开箱即用的原则 则开始执行Mybatis代码

        		 <!--spring整合mybatis  暂时  -->
                <dependency>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                    <version>2.2.0</version>
                </dependency>
        
         
         
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6

        1.7.2 编辑YML配置文件

        SpringBoot程序加载jar包文件之后,通过YML配置文件实现数据的填充.配置Mybaits相关信息.

        #SpringBoot整合Mybatis配置
        mybatis:
          #设置别名包
          type-aliases-package: com.jt.pojo
          #加载映射文件
          mapper-locations: classpath:/mappers/*.xml
          #开启驼峰映射
          configuration:
            map-underscore-to-camel-case: true
        
         
         

        1.7.3 为接口创建代理对象

        在这里插入图片描述

        1.7.4 编辑测试类

        @SpringBootTest
        public class TestMybatis {
        
        <span class="token comment">//明确:注入一定是对象</span>
        <span class="token comment">//SpringBoot为了整合mybatis,简化代码结构 Spring动态的为Mybatis的接口</span>
        <span class="token comment">//创建代理对象</span>
        <span class="token comment">//代理: 根据原有对象的模型,在运行期动态创建了一个一模一样功能的实例化对象</span>
        <span class="token comment">//案例: 孙悟空(接口)/克隆一个一模一样的对象</span>
        <span class="token annotation punctuation">@Autowired</span>
        <span class="token keyword">private</span> UserMapper userMapper<span class="token punctuation">;</span>
        
        <span class="token annotation punctuation">@Test</span>
        <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testFind</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
            System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>userMapper<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            List<span class="token generics function"><span class="token punctuation">&lt;</span>User<span class="token punctuation">&gt;</span></span> userList <span class="token operator">=</span> userMapper<span class="token punctuation">.</span><span class="token function">findAll</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>userList<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        

        }

          1.7.5 @MapperScan说明

          在这里插入图片描述

          1.7.6 环境自动注入报错说明

          在这里插入图片描述

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

          请填写红包祝福语或标题

          红包个数最小为10个

          红包金额最低5元

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

          抵扣说明:

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

          余额充值