Welcome Huihui's Code World ! !
接下来看看由辉辉所写的关于Spring Boot的相关操作吧
目录
Welcome Huihui's Code World ! !
一.Spring Boot是什么
二.为什么要使用Spring Boot
三.怎么在IDEA中使用Spring Boot
1.创建新的Spring Boot 项目:
2.编写Spring Boot 应用程序:
项目结构说明
properties文件转换成yml文件
3.运行Spring Boot 应用程序:
四. Spring Boot 集成
1.集成JDBC
2.集成Mybatis
Mybatis逆向生成代码
配置数据源
逆向生成代码
测试
3.集成Pagehelper
4.集成Druid数据库连接池
5.集成Log日志
五.易错以及注意点总结
1.代码编写位置
2.配置文件的格式选择
3.mapper所在包必须在启动类中开启扫描
4.配置数据源出现的时区错误
Spring Boot是一个基于Spring框架的开源应用程序框架,它大大简化了Spring应用程序的开发过程。Spring Boot提供了一种快速且简单的方式来创建基于Spring的应用程序,同时也提供了许多开箱即用的功能,包括嵌入式Web服务器、安全性、指标监控、外部化配置等。由于Spring Boot的高度集成和自动配置,开发人员可以更加专注于业务逻辑的开发,从而提高了开发效率
Spring Boot还支持许多插件和扩展,使得开发人员可以方便地集成各种第三方库和工具,例如JPA、Spring Data、Thymeleaf等。此外,Spring Boot还支持构建微服务应用程序,开发人员可以使用Spring Cloud框架来实现微服务的注册和发现、负载均衡、断路器等功能。
总之,Spring Boot是一个非常方便、易用且强大的开发框架,使得开发人员可以更加专注于业务逻辑的实现,而不用花费大量时间和精力在繁琐的配置和集成上
❗❗注意❗❗
SpringBoot 基于 Spring 开发。SpringBoot 本身并不提供 Spring 框架的核心特性以及扩展功能,也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具
快速开发:Spring Boot提供了大量的自动配置功能,避免了开发人员手动配置繁琐的XML文件和注解,从而缩短了开发时间。
简化配置:Spring Boot支持外部化配置,可以将配置信息放在外部文件中,减少了代码中硬编码的情况,也方便了应用程序的部署和管理。
易于维护:Spring Boot的模块化结构,使得应用程序的不同部分之间的耦合度降低,易于维护和扩展。
丰富的插件支持:Spring Boot支持很多插件和扩展,例如JPA、Spring Data、Thymeleaf等,可以方便地集成其他第三方库和工具。
高度集成:Spring Boot已经集成了许多常用的框架和组件,包括Spring MVC、Spring Data、Hibernate等,可以快速搭建一个完整的应用程序。
容易部署:Spring Boot支持嵌入式Web服务器,可以直接将应用程序打包成一个可运行的Jar文件,方便部署和运行。
1.创建新的Spring Boot 项目:
- 打开IntelliJ IDEA,创建一个Moudule
- 在左侧菜单中选择“Spring Initializr”,然后点击“Next”。
- 在弹出窗口中选择项目的基本信息,比如Group、Artifact等,然后点击“Next”
- 在接下来的页面中选择需要使用的依赖,比如Spring Web、Spring Data JPA等,然后点击“Next”。
2.编写Spring Boot 应用程序:
- 在项目结构中,可以看到自动生成的Spring Boot应用程序的基本结构,包括主应用程序类(通常带有
@SpringBootApplication
注解)、控制器类、服务类等。- 可以在
src/main/java
目录下编写自己的Java类,例如控制器类、服务类等。- 在
src/main/resources
目录下编写配置文件,例如application.properties
或application.yml
3.运行Spring Boot 应用程序:
1.集成JDBC
引入依赖
org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java 5.1.44 修改application.yml文件
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf8 username: 用户名 password: 密码
2.集成Mybatis
引入依赖
org.mybatis.spring.boot mybatis-spring-boot-starter 2.3.0 修改application.yml文件
#mybatis配置 mybatis: #配置SQL映射文件路径 mapper-locations: classpath:mapper/*.xml #配置别名 type-aliases-package: com.zking.SpringBoot.model
在启动类中添加@MapperScan({"com.zking.SpringBoot.mapper"})注解
package com.wh.springboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.mybatis.spring.annotation.MapperScan; @SpringBootApplication //@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) @MapperScan({"com.zking.SpringBoot.mapper"}) public class SpringbootApplication { public static void main(String[] args) { SpringApplication.run(SpringbootApplication.class, args); } }
Mybatis逆向生成代码
配置数据源
以上我们已经整合了JDBC以及Mybatis,现在我们来配置一下数据源
如果我们没有下载相应的驱动依赖便会弹出一个警告弹窗,我们在这里选择download就行
这里出现了一个错误,表示JDBC驱动程序无法识别MySQL服务器时区设置
所以我们直接在URL中添加一个时区的配置就好啦
serverTimezone=UTC
逆向生成代码
测试
数据便可以显示出来了
3.集成Pagehelper
引入依赖
com.github.pagehelper pagehelper-spring-boot-starter 1.4.6 org.springframework.boot spring-boot-starter-aop 修改application.yml文件
#pagehelper分页插件配置 pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql
service以及serviceimpl中的方法都需要传入pagebean这个参数,并且在serviceimpl的方法上需要使用自定义的分页注解
controller层
package com.wh.springboot.controller; import com.github.pagehelper.PageHelper; import com.wh.springboot.mapper.TBookMapper; import com.wh.springboot.page.PageAnnotation; import com.wh.springboot.page.PageBean; import com.wh.springboot.service.IBookService; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.beans.factory.annotation.Autowired; /** * @author是辉辉啦 * @create 2023-12-12-14:44 */ @RestController @RequestMapping("/book") public class BookController { @Autowired private IBookService bookService; @RequestMapping("/list") public Object hello(PageBean pageBean){ PageHelper.startPage(pageBean.getPage(),pageBean.getRows()); return bookService.select(pageBean); } }
分页的自定义注解
package com.wh.springboot.page; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface PageAnnotation { }
分页切面类
package com.wh.springboot.page; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Aspect @Component public class PageAspect { @Pointcut("@annotation(PageAnnotation)") public void cut() { } @Around("cut()") public Object aroundHandler(ProceedingJoinPoint point) throws Throwable { Object[] args = point.getArgs(); PageBean pageBean = new PageBean().setOpen(false); for (Object arg : args) { if (arg instanceof PageBean) pageBean = (PageBean) arg; } PageHelper.startPage(pageBean.getPage(), pageBean.getRows(), pageBean.isOpen()); Object val = point.proceed(); if (pageBean.isOpen()) { Page> page = (Page>) val; pageBean.setTotal(page.getTotal()); } return val; } }
PageBean
package com.wh.springboot.page; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; @Data @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) public class PageBean { private Integer page = 1; private Integer rows = 5; private Long total = 0L; private boolean open = true; public int start() { return (page - 1) * rows; } public int previous() { return Math.max(this.page - 1, 1); } public int next() { return Math.min(this.page + 1, maxPage()); } public int maxPage() { return (int) Math.ceil(this.total.intValue() / (this.rows * 1.0)); } }
如果修改了依赖中的版本还是不可以的话,那就退出IDEA再进来一次就好啦
4.集成Druid数据库连接池
引入依赖
com.alibaba druid-spring-boot-starter 1.2.15 修改application.yml文件
druid: #2.连接池配置 #初始化连接池的连接数量 大小,最小,最大 initial-size: 5 min-idle: 5 max-active: 20 #配置获取连接等待超时的时间 max-wait: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 time-between-eviction-runs-millis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 min-evictable-idle-time-millis: 30000 validation-query: SELECT 1 FROM DUAL test-while-idle: true test-on-borrow: true test-on-return: false # 是否缓存preparedStatement,也就是PSCache 官方建议MySQL下建议关闭 个人建议如果想用SQL防火墙 建议打开 pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filter: stat: merge-sql: true slow-sql-millis: 5000 #3.基础监控配置 web-stat-filter: enabled: true url-pattern: /* #设置不统计哪些URL exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" session-stat-enable: true session-stat-max-count: 100 stat-view-servlet: enabled: true url-pattern: /druid/* reset-enable: true #设置监控页面的登录名和密码 login-username: admin login-password: admin allow: 127.0.0.1 #deny: 192.168.1.100
进入到这个页面之前需要登录,登录的密码以及用户名是自己在yml文件中配置的
5.集成Log日志
修改application.yml文件
#log日志配置 logging: level: #指定项目目录输入日志信息 com.wh.springboot.mapper: debug
1.代码编写位置
所有编写的代码都必须写在与启动类同级的位置中,不然的话,你写的代码它是无效的,因为它是无法被扫描的
2.配置文件的格式选择
建议使用yml文件的格式,因为yml文件的格式更加清晰,我们能够一眼看出来各种配置信息的层级关系
properties的文件格式
大家可以自行观看上面两中文件的格式,对比下来也不难发现,yml文件的层级更加的清晰
3.mapper所在包必须在启动类中开启扫描
@MapperScan({"com.wh.springboot.mapper"})
如果没有开启扫描,则无法启动项目
4.配置数据源出现的时区错误
出现的错误
Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.
我们只需要添加serverTimezone=UTC这个时区的设置便可以啦
好啦,今天的分享就到这了,希望能够帮到你呢!dede