• SpringBoot学习笔记(项目创建,yaml,多环境开发,整合mybatis SMM)


     一、SpringBoot入门

    1.1 SpringBoot概述

    SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。

    Spring程序缺点:配置繁琐,依赖设置繁琐。SpringBoot程序优点:自动装配,起步依赖(简化依赖配置),赋值功能(内置服务器)。

    版本管理:以后不需要管版本,只需要告诉是SpringBoot几,就自动将所有最佳组合的版本配合在一起做好。

    依赖管理:所有的依赖SpringBoot都已经自动装配好。

    起步依赖

    starter:SpringBoot中创建项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的。

    parent:所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的。

     Springboot简化了SpringMVC的开发: 

     核心功能是靠下面的继承来实现

    1. <parent>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-parent</artifactId>
    4. <version>3.1.3</version>
    5. <relativePath/> <!-- lookup parent from repository -->
    6. </parent>

    1.2 项目创建与启动

    第1步:新建Maven项目(或项目),选择Spring初始化,并配置模块相关信息

    注意选择Spring Initializr;Package name后面的后缀要删掉,和Group保持一致;

    第2步:选择当前模块需要使用的技术集,勾选Spring Web

    第3步:开发控制器类,在java下面创建controller然后新建类BookController,在里面编写代码如下

    1. @RestController
    2. @RequestMapping("/books")
    3. public class BookController {
    4. @GetMapping("/{id}")
    5. public String getById(@PathVariable Integer id){
    6. System.out.println("id ==> "+id);
    7. return "hello , spring boot !";
    8. }
    9. }

    第4步:然后右键下面的文件运行,启动:

    1.3 项目.jar包运行

    Maven中点击Package会将项目打成一个.jar包:

     

    右键.jar包点击Open in 点击Explorer:

    在搜索栏中输入cmd,然后输入java -jar,输入一个s然后点击Tab键就可以自动补全,然后点击运行即可:

    依赖的是下面的插件:

    1.4 配置文件书写格式

    想改变端口号:

    1. 在application.properties里写入:

    server.port=80
    

     2. 在resources下创建application.yml【主要书写方式】里写入下面代码,注意port:后面有一个空格:

    1. server:
    2. port: 80

    3. 在application.yaml里写入如下代码:

    1. server:
    2. port: 80

    自动提示功能消失解决方案:

    生效顺序:properties > yml > yaml 

    二、yaml

    2.1 yaml格式

    YAML(YAML Ain't Marku Language)是一种数据序列化格式。

    优点:容易阅读。容易与脚本语言交互。以数据为核心,重数据轻格式。

    YAML文件拓展名:.yml(主流)、.yaml

    yaml语法规则:

    层级关系用冒号结束;以缩进表示层级关系(类似python);在属性后面要添空格;大小写敏感

    2.2 yaml数据读取

    方法1:使用@Value读取单个数据

    方法2:全部封装到nvironment对象

     方法3:自定义对象封装指定数据

    三、多环境开发

    3.1 配置问题

    在.yml和.yaml中按照如下方式书写,可以切换不同的环境,输入profile选第1个就行,输入port选第1个填入端口后即可:

    在properties文件中的书写按照如下方式:

     

    3.2 命令行启动参数设置

    打包之前先执行clean

    在后面加上:--spring.profiles.active=环境名 ,可以使用不同的环境启动。

    如果想更改启动.jar包的端口也是可以的,只需要在后面加上 : --server.port=端口号。

    还可以进行累加,例如下面采用88端口以test的环境启动:

    3.3 兼容问题

    以maven为主,boot为辅,以maven控制版本,然后让boot加载maven的版本。

    假如maven是pro生效,SpringBoot是dev生效,那么最终是用dev:

    首先要在Maven中设置多环境,boot中要读取引用Maven中设置的多环境:

     

    在打包之前需要导入下面的插件,需要将占位符解析,将里面的值改为true。

    1. <plugin>
    2. <groupId>org.apache.maven.plugins</groupId>
    3. <artifactId>maven-resources-plugin</artifactId>
    4. <version>3.2.0</version>
    5. <configuration>
    6. <encoding>UTF-8</encoding>
    7. <useDefaultDelimiters>true</useDefaultDelimiters>
    8. </configuration>
    9. </plugin>

    3.4 配置文件分类

    IDEA的resources下的config里的配置文件优先级是第3级:

     

    在jar包目录下写一个配置文件,可以覆盖IDEA里的配置文件,优先级是第2级:

    还可以在jar包目录下写一个config配置文件,是第1级:

    四、SpringBoot整合MyBatis实现增删改查

     4.1 Spring整合mybatis

    第1步:新建项目。新建全新项目,注意更改依赖:

    第2步:连接数据库。更改.properties的配置文件文件后缀为.yml,书写jdbc配置:

    1. spring:
    2. datasource:
    3. driver-class-name: com.mysql.cj.jdbc.Driver
    4. url: jdbc:mysql://localhost:3306/ssm_db
    5. username: root
    6. password: 111111

    第3步:设置实体类。创建domain-Book,在里面写入实体类:

    第4步:创建接口。创建dao-BookDao数据层接口,写SQL语句

    1. @Mapper
    2. public interface BookDao {
    3. @Select("select * from tb_brand where id = #{id}")
    4. public Book getById(Integer id) ;
    5. }

    — — — — — — 知识加油站 — — — — — —

    @Mapper注解用于标记一个接口作为MyBatis的Mapper接口。它告诉MyBatis框架将该接口识别为一个Mapper,并自动生成实现该接口的代理对象。当使用@Mapper注解标记接口后,MyBatis将会自动为该接口生成实现类,它会根据接口方法上的注解来动态构建相应的SQL语句,并执行数据库操作。

    @ContextConfiguration注解用于指定Spring应用程序上下文的配置信息,以加载和初始化Spring容器。classes属性可以指定一个或多个配置类,用于加载Spring容器中的bean。

    — — — — — — — — — — — — — — — — 

    5. 测试。在测试类中编写测试方法:

    1. @ContextConfiguration(classes = SsmMybatisApplication.class)
    2. @SpringBootTest
    3. class SsmMybatisApplicationTests {
    4. @Autowired
    5. private BookDao bookDao;
    6. @Test
    7. void contextLoads() {
    8. Book byId = bookDao.getById(1);
    9. System.out.println(byId);
    10. }
    11. }

    6. 可以指定数据源,导入依赖,然后再.yml文件中指定type

    1. <dependency>
    2. <groupId>com.alibaba</groupId>
    3. <artifactId>druid</artifactId>
    4. <version>1.1.16</version>
    5. </dependency>

     

    4.2 增

    在dao — BookDao接口中添加如下方法:

    1. @Insert("insert into tb_brand(brand_name,company_name,ordered,description,status)"
    2. +"values(#{brand_name},#{company_name},#{ordered},#{description},#{status})")
    3. public void add(Brand book);

    4.3 删

    注意:等号右边的#{ID}只是一个占位符,会根据传入的ID值,被替换为具体的值,因此不一定要与实体类中的id取一样的变量名。等号左边的id是数据库中的字段id,因此名称一定要匹配。

    1. @Delete("delete from tb_brand where id = #{ID}")
    2. public void delete(int ID);

    4.4 改

    SQL语句书写复杂,不适合用注解,因此要用XML配置文件,配置方法如下:

    第1步:在 java — com — itheima — dao的BookDao接口里写入如下方法:

    public void update(Brand brand);

    第2步:在resources下创建mybatis-config.xml文件。在resources下创建mapper包,创建BookMapper.xml。


    第3步:主配置文件(mybatis-config.xml)模板如下(setting中是开启驼峰命名):

    1. "1.0" encoding="UTF-8" ?>
    2. configuration
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    5. <configuration>
    6. <settings>
    7. <setting name="mapUnderscoreToCamelCase" value="true"/>
    8. settings>
    9. configuration>

    第4步:接口映射文件(Mapper.xml 文件包含了SQL语句)模板如下:

    注意要修改如下几个地方:1. namespace要更改为接口的全路径。2. 这里第一个update要根据增删改查的不同更换为不同操作词汇 3. 这里第二个update要替换为接口中的方法名

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.itheima.dao.BookDao">
    6. <!--查询-->
    7. <update id="update" >
    8. update tb_brand
    9. <set>
    10. <if test="brand_name != null and brand_name !='' ">
    11. brand_name = #{brand_name},
    12. </if>
    13. <if test="company_name != null and company_name !='' ">
    14. company_name = #{company_name},
    15. </if>
    16. <if test="ordered != null ">
    17. ordered = #{ordered},
    18. </if>
    19. <if test="description != null and description !='' ">
    20. description = #{description},
    21. </if>
    22. <if test="status != null ">
    23. status = #{status},
    24. </if>
    25. </set>
    26. where id = #{id};
    27. </update>
    28. </mapper>

    注意2个点:第一个update tb_brand后面是用标签来修改值,第二个test里面写的是实体类的变量名,第三个在后还要写where语句用于确定要修改的数据。

    第5步:加载配置文件。在.yml文件中指定指定mybatis全局配置文件和接口映射文件位置(注意这里的相对路径从.yml文件所在的resources下开始):

    1. mybatis:
    2. config-location: classpath:mybatis-config.xml
    3. mapper-locations: classpath:mapper/*.xml

    config-location 用于指定MyBatis的全局配置文件的路径。mapper-locations 用于指定Mapper XML文件的路径。

    第6步:编写测试方法:

    1. @ContextConfiguration(classes = SsmMybatisApplication.class)
    2. @SpringBootTest
    3. class SsmMybatisApplicationTests {
    4. @Autowired
    5. private BookDao bookDao;
    6. @Test
    7. void contextLoads() {
    8. String companyName = "彭德科技有限公司";
    9. int id = 1;
    10. Brand brand = new Brand();
    11. brand.setCompany_name(companyName);
    12. brand.setId(id);
    13. bookDao.update(brand);
    14. }
    15. }

    4.5 查

    1. @Select("select * from tb_brand where id=#{id}")
    2. public Brand select(int id);

    五、SpringBoot整合

    5.1 整合junit

    首先要搞清楚什么是要写的,什么是不要写的。大家写得一样的是不用写的。

    首先在java下面创建BookService接口:

    1. public interface BookService {
    2. public void save();
    3. }

    然后在service下面创建impl包,然后再impl包下面创建BookServiceImpl类,写入如下代码:

    1. @Service
    2. public class BookServiceImpl implements BookService {
    3. @Override
    4. public void save() {
    5. System.out.println("book service is running ...");
    6. }
    7. }

    在测试类里写入如下代码:

     

    只需要加入@Autowired注解,把要测试的资源注入进去,然后直接使用即可:

    1. @SpringBootTest
    2. class Demo4ApplicationTests {
    3. @Autowired
    4. private BookService bookService;
    5. @Test
    6. void contextLoads() {
    7. bookService.save();
    8. }
    9. }

    在java类下面的这个类相当于配置类:

     ’

    会自动加载同层目录下的文件,如果不在同层目录,就需要自己指定:

    5.2 基于SpringBoot整合实现SSM

    1. 新建一个项目,同上:

    2. 导入druid坐标,编写配置类.yml格式,同上:

    3. config包可以删掉,dao包中的BookDao要加一个@Mapper注解,其余不变:

     

    4. 编写测试类;复制静态页面放在static页面下:

    5. 启动java下的启动类:

    即可正常展示:

    六、心得总结

    6.1 学习复盘

    待写...

    6.2 面试真题

    1. springboot优点,技术选型原因,为什么不用其他框架?为什么要使用SpringBoot做开发?与传统的开发有什么不一样的?

    2. spring boot中的控制反转?

    3. SpringBoot的启动类上要加什么注解?这个注解的原理?SpringBoot的启动原理?

    4. Spring Boot的自动装配流程?SpringBoot自动配置原理?

    5. SpringbootApplication是如何实现依赖注入的?

    6. springboot框架url映射过程?

    7. 聊聊Springboot与SpringCloud的区别?

    8. 在Spring boot的一个请求中,如何实现并发?

    9. Springboot如何开发一个http接口?

    10. return model过程?

    6.3 常见问题

    1. 如果端口号没能更改成功,要检查启动的是否是正确的项目:

    2. 如果因为中文导致无法打包或者乱码的按下面方式处理:

    3. 无法注入依赖 / 无法访问配置的Bean

    在Test类上加上:@ContextConfiguration(classes = 配置类.class)

  • 相关阅读:
    MySQL数据库——主从复制及读写分离
    docker 安装mongodb 实现 数据,日志,配置文件外挂
    java开发技巧
    ZYNQ的程序固化
    分布式事务详解
    数据结构--第七天
    Spring:核心容器(6)
    【Qt】信号和槽机制
    BATJ高频面试249道题:微服务+多线程+分布式+MyBatis +Spring
    关于python的数据可视化与可视化:数据读取
  • 原文地址:https://blog.csdn.net/RuanFun/article/details/132818151