SpringBoot快速入门-基础篇

SpringBoot快速入门

SpringBoot快速配置部署:

1)通过IDEA 中Spring

  • 创建新的项目/模块 Spring Initializr
  • 默认通过Spring官网创建SpringBoot项目
  • 编写Controller

2) 在线创建:

  • 使用阿里云,自定义URL:阿里云
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2mFvU3hz-1681899499933)(/Users/tanshilin/Library/Application%20Support/typora-user-images/image-20230410171941081.png)]

3) 没有网络创建:

  • 创建普通Maven工程
  • 继承Spring-boot-starter-parent Maven父类启动starter的继承
  • 添加依赖Spring-boot-starter-web
  • 制作引导类Application

SpringBoot中的依赖:

parent

    1. 开发SpringBoot程序要继承spring-boot-starter-parent
    2. spring-boot-starter-parent中定义了若干个依赖管理
    3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
    4. 继承parent的形式也可以采用引入依赖的形式实现效果

starter

  • 启动需要的依赖管理

引导类

  • @SpringBootApplication注解
  • 引导类时Boot工程的执行入口,运行main方法可以启动项目
  • SpringBoot工程运行后初始化Spring容器,扫描引导类所在包目录,加载所有目录下配置的Bean

内嵌Tomcat- Server服务器配置

  • 默认使用tomcat
  • jetty

SpringBoot配置

三种配置方法:

- properties 
- YML (主流推荐)
- YAML

配置文件的加载顺序:

Properties > YML > YAML 加载顺序

*配置自动提示消失配置: * 通过模块中facets配置Spring配置加载文件,其中设置添加配置文件更改为配置加载文件。

YAML语法规则:

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 缩进表示层级关系,属性名冒号后面 : 与数据间添加空格
  • “-” 表示单个模块的划分
  • “#”表示注释

YAML中数据读取

  • 1 使用@Value注解,结合SpEL表达式获取数据

    • ${一级属性名.二级属性名}
    • 使用"[ ]"获取数组中保存属性
    • 通过字符串包裹的 数据表达式 “” 其中转义字符可以经过解析
    1. 使用 Environment对象封装全部配置信息

      • 使用@Autowireed自动配置数据到Environment对象中

      • 需要获取数据时,enviroment调用getProperty()获取数据

    1. 引用对象封装数据
        1. 使用@ConfigurationProperties注解绑定配置信息到封装类中
        2. 封装类需要定义为Spring管理的Bean,否则无法进行属性注入

SSM整合

需要掌握,如何整合技术

整合JUnit

1. 整合的使用*@SpringBootTest*表示当前为测试类
2. SpringBootTest测试类运行时,会优先在本地目录中查找@SpringBootConfiguration即SpringBoot配置类,其中@SpringBootApplication引导类注解同样包含配置类
3. 若本地目录中不存在配置类,使用classes = XXX.class 指定引导类,进行加载,或者也可以配置@SpringBootConfiguration配置类

整合Mybatis

1. 选择使用Mybatis-Framworks技术集
2.设置数据源与映射配置 DataSource等
3. 数据库SQL映射需要添加@Mapper被容器识别到
配置识别:
  • 1,MySql8.X驱动强制要求设置时区
    • 修改URL,添加ServerTimezone设定
    • 修改MySql数据库配置
    1. 驱动类过时时,提醒更换为com.mysql.cj.jdbc.Driver

整合Mybatis-Plus

    1. 手工添加Mybatis-Plus对应的starter

      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.4.3</version>
      </dependency>
      
    2. 数据层接口使用BaseMapper简化开发

    3. MP的调试日志

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

整合Druid

    1. 整合Druid需要导入Druid对应的starter

    2. <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>druid-spring-boot-starter</artifactId>
              <version>1.2.6</version>
          </dependency>
      
    3. 根据Druid提供的配置方式进行配置

SSMP整合案例

数据层

  • 配置Mybatis中的Page分页
    1. 使用IPage封装分页数据

    2. IPage page = new Page(1, 5);
      
    3. 分页操作依赖MyBatis-Plus分页拦截器实现功能

    4. @Configuration
      public class MPConfig {
          @Bean
          public MybatisPlusInterceptor mybatisPlusInterceptor(){
              //定义拦截器容器
              MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
              //添加内部拦截器
              //添加 分页拦截器
              interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
              return interceptor;
          }
      }
      
    5. 借助MyBatisPlus日志查阅执行SQL语句

    bookDao.selectPage(page, null);
    

    之后返回的IPage对象,依旧是原本传入的IPage对象,IPage原本存在属性,可以高度复用,调用出IPage封装的5个数据

    @Test
    void testGetPage(){
        IPage page = new Page(2,5);
        bookDao.selectPage(page, null);
        System.out.println(page.getCurrent());		//当前页码值
        System.out.println(page.getSize());			//每页显示数
        System.out.println(page.getTotal());		//数据总量
        System.out.println(page.getPages());		//总页数
        System.out.println(page.getRecords());		//详细数据
    }
    
  • 按条件查询
      1. 使用QueeryWrapper对象封装查询条件

      2.     @Test
            void selectByConditionTest(){
                QueryWrapper<Book> wrapper = new QueryWrapper<Book>();
                //wrapper设置条件匹配,like匹配
                wrapper.like("name", "spring");
                List<Book> books = bookDao.selectList(wrapper);
                System.out.println(books);
            }
        }
        
      3. 推荐使用LambdaQueryWrapper对象

      4. @Test
          void selectByConditionTest(){
              /*QueryWrapper<Book> wrapper = new QueryWrapper<Book>();
              //wrapper设置条件匹配,like匹配
              wrapper.like("name", "spring");*/
              String name = "spring"; //设置为name变量
              LambdaQueryWrapper<Book> lambdaQueryWrapper = new LambdaQueryWrapper<>();
              lambdaQueryWrapper.like(name != null, Book::getName, name); //首先检测name条件是否为null
              List<Book> books = bookDao.selectList(lambdaQueryWrapper);
              System.out.println(books);
          }
        
      5. 所以查询操作封装成方法调用

      6. 查询条件支持动态条件拼装

业务层 Service

使用Mybatis-Plus快速开发
    1. 使用通用接口( IService )快速开发Service

      • public interface IBookService extends IService<Book> {
            //添加非通用操作API接口
        }
        
    2. 使用通用实现类( ServiceImpl <M,T> )快速开发ServiceImpl

      • 业务层接口实现类快速开发,关注继承的类需要传入两个泛型,一个是数据层接口,另一个是实体类

      • @Service
        public class IbookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService {
            @Autowired
            private BookDao bookDao;
            //添加非通用操作的API
        }
        
    3. 可以在通用接口基础上做功能重载或功能追加

    4. 注意重载时不需要覆盖原始操作,避免原始提供的功能丢失

表现层开发

  • 表现层开发如下
@RestController
@RequestMapping("/books")
public class BookController {

    @Autowired
    private IBookService iBookService;

    //查询所有映射
    @GetMapping
    public List<Book> listAll(){
        return iBookService.list();
    }

    //据id查询
    @GetMapping("{id}")
    public Book listById(@PathVariable Integer id){
        return iBookService.getById(id);
    }

    //分页查询
    @GetMapping("{currentPage}/{pageSize}")
    public IPage<Book> listByPage(@PathVariable Integer currentPage, @PathVariable Integer pageSize){
        return iBookService.getPage(currentPage, pageSize);
    }

    //添加
    @PostMapping
    public Boolean saveBook(@RequestBody Book book){
        return iBookService.save(book) ;
    }


    //更新
    @PutMapping
    public Boolean updateBook(@RequestBody Book book){
        return iBookService.update(book, null);
    }

    //删除
    @DeleteMapping("{id}")
    public Boolean removeBook(@PathVariable Integer id){
        return iBookService.removeById(id);
    }
}

总结
    1. 其中Restful制作表现层接口
      • Get : 请求数据
      • Post :新增
      • Delete : 删除
      • Put : 更新
    2. 接收参数:
      • 实体数据(封装在请求体中) : @RequestBody
      • 路径变量(URL) : @PathVariable

表现层消息的一致性

  • 设计统一的返回值结果类型便于前端开发读取数据

  • 返回值结果类型可以根据需求自行设定,没有固定格式

  • 返回值结果模型类用于后端与前端进行数据格式统一,也称为前后端数据协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值