likes
comments
collection
share

SpringBoot前后端分离项目快速入门什么是springboot?springboot整合mybatis如何实现分页

作者站长头像
站长
· 阅读数 45

1.什么是springboot

springboot是一个快速开发的框架,其采用完全注解的方式,简化了XML配置(因为它的配置文件只有一个application.properties或application.yml),并且内置了tomcat服务器 能够快速整合其他框架 降低了框架整合的复杂度

1.1 springboot优点
  • 内置web服务器 tomcat 无需部署war包 生成的是jar包 只要运行main()
  • 简化了xml配置文件,只需要一个配置文件
  • 简化了maven配置
  • springboot自动装配了spring springmvc
  • 快速构建项目 和简化了其他框架的整合 :通过一些简单的配置 一些注解 配置类
  • 天然集成spring cloud 微服务框架

2.创建springboot

SpringBoot前后端分离项目快速入门什么是springboot?springboot整合mybatis如何实现分页 注:springboot默认读取:application.properties或者application.yml所有配置 文件名不能改

2.1 通过springboot+mybatis
  • 配置springboot数据源(使用德鲁伊连接池也可以,需要自己导入依赖)或者使用springboot自带的连接池

  • 配置springboot关联mybatis映射文件

  • 配置springboot分页插件(导入pageHelper依赖)

  • springboot2.6以上 默认不允许任何情况下的循环引用 是关闭状态 需要开启  # 修改内置tomcat端口号 默认8080  server.port=9999  # 配置项目前缀 默认: /  # server.servlet.context-path=/  ​  ​  ### 整合mybatis  #### 1.配置数据源(springboot自带的)  spring.datasource.url=jdbc:mysql://localhost:3306/sc240601?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&rewriteBatchedStatement=true  spring.datasource.driver-class-name=com.mysql.jdbc.Driver  spring.datasource.username=root  spring.datasource.password=root  #### 2.关联映射文件  mybatis.mapper-locations=classpath:mapper/*.xml  ​  #### 3.分页插件  ​  #### 4.springboot2.6需要开启循环引用 默认是false关闭的  spring.main.allow-circular-references=true

  • 启动类 添加一个注解@MapperScan 它会帮你创建mapper接口实现类

     @SpringBootApplication
     //整合mapper接口的包  创建mapper接口实现类
     @MapperScan("com.sc.springboot.mapper")
     public class SpringbootApplication {
         public static void main(String[] args) {
             SpringApplication.run(SpringbootApplication.class, args);
         }
     }
    
2.2 springboot整合分页插件
  • 导入springboot支持的PageHelper依赖

     <dependency>
                 <groupId>com.github.pagehelper</groupId>
                 <artifactId>pagehelper-spring-boot-starter</artifactId>
                 <version>1.2.12</version>
             </dependency>
    
  • 配置文件配置分页插件

     #### 3.分页插件
     #### 配置数据库方言  屏蔽不同数据库sql语句的查询
     pagehelper.helper-dialect=mysql
     #### 可选的 不配置也能用 但是会有bug
     #### 配置分页合理化参数 默认是false
     #### 页码数<0 默认让你查询第一页
     #### 页码数>总页数  默认查询最后一页
     pagehelper.reasonable=true
     #### 如果每页条数=0  是否查询全部数据  默认false
     pagehelper.page-size-zero=true
     #### 是否支持通过mapper接口传递分页参数 默认false
     #### 设置true 开启全局设置 会实现自动分页
     pagehelper.support-methods-arguments=true
     #### 设置分页参数
     pagehelper.params=pageNum=pageHelperStart;pageSize=pageHelperRows
    
  • 业务层之前怎么使用现在还是怎么使用

     public PageInfo<OAdmin> show(Integer pageNum, Integer pageSize) {
             PageHelper.startPage(pageNum,pageSize);
             return new PageInfo<>(mapper.show());
         }
    

    注:springboot默认扫描是启动类所在的包以及子包下,如果创建在外面了springboot就不会扫描1了@Controller失效了

2.3 可了解spingboot启动图标是可以自定义的

www.bootschool.net/ascii 图标在线生成工具

springboot启动项目后使用自己的默认图标 如果想去修改图标的方式:

  • 利用网址生成一个banner.txt 文件
  • 也可以自定义一个banner.txt
  • 最后把这个文件放入resources目录下(清空缓存)

3. springboot日志系统

springboot默认使用的LogBack日志系统,无需多余配置 默认启用,默认情况下是把日志打印在控制台,开发环境还需要把日志保存到本地 默认级别是info 也可以设置单独某一个模块的日志级别

3.1 日志级别 debug<info<warn<error
  • debug: 用于记录应用程序在调试程序下的信息 比如:请求处理的时间 参数...这些信息是辅助开发的 但是在正式环境 不适合开启 因为设置了debug级别 会显示所有更高级的日志信息
  • info: 用于记录应用程序正常运行时的状态 比如:系统启动完成 请求处理完成 ...如果设置了info级别 显示(info warn error 三个级别日志)
  • warn: 用于记录程序运行过程中出现的警告或者一些异常 这些异常不会导致程序出现问题 用于引起开发者注意的 比如: 网络有波动 网络连接异常.. 如果设置warn级别 显示(warn error)
  • error: 用于记录已经发生的错误情况 可能会导致程序无法运行 告诉开发者要及时处理
3.2 配置方式
 ### 日志配置
 #指定日志生成的位置,生成一个默认的文件名.log
 #logging.file.path=d:\log
 #指定日志文件名, file.name 和 file.path 不能同时生效
 #存储项目当前的工作空间
 logging.file.name=sb.log
 #配置全局日志级别 默认info
 logging.level.root=info
 #特定包 如果比较重要或者报错了 是可以单独设置级别的
 logging.level.com.sc.springboot.mapper=debug
3.3 手动编写日志
 //1.定义日志对象
     private static final Logger LOG=
             LoggerFactory.getLogger(AdminController.class);
     @Autowired
     AdminService as;
     @RequestMapping("/testLog")
     public Result testLog(Integer num){
         //2.通过LOG对象.方法() 添加日志
         LOG.debug("开始进入testLog方法,执行请求处理");
         LOG.info("开始处理中...");
         LOG.warn("接收到了参数,num:"+num+",可能会有问题");
         try {
             int result = 100 / num;
         }catch (Exception e){
             LOG.error("num分母为0了");
         }
         return new Result(1,"成功",null);
     }

4.springboot跨域

跨域简称cors(Cross-Origin-Resource-Sharing) 跨域资源共享, 在项目开发过程中,会发送很多网络请求(比如: 超链接 表单 js ajax) 如果在发送请求时(协议 和ip地址(域名) 端口) 这三者只要有一个不同 就会产生跨域问题 就无法进行正常的交互了 特别是前后端分离的项目 一定会出现跨域问题 这是必须要解决的

4.1 主流解决方案
  • 后端解决方案:

    • 可以使用跨域注解@CrossOrigin 使用不灵活 只能控制所有请求 或者一些单一请求可以跨域 满足不了开发需求 适合测试使用

    • 通过springboot实现配置类手动编写跨域规则

       //跨域配置类
       @Configuration
       public class CorsConfig implements WebMvcConfigurer{
           //跨域配置类 不需要创建一个对象(因为 springboot已经创建好了)
           //我们需要的是在它创建的对象这里面 添加跨域规则
           public void addCorsMappings(CorsRegistry registry) {
              //形参设置允许跨域规则   
              registry.addMapping("/**")  //设置允许跨域路径
                      .allowedOriginPatterns("*") //设置允许跨域域名
                      .allowCredentials(true)  //是否允许cookie
                      .allowedMethods("GET","POST","PUT","DELETE")   //设置允许的请求方式
                      .allowedHeaders("*")   //设置允许的头部信息
                      .maxAge(3600);   //设置每次跨域的时间 单位是秒
           }
       }
      
    • 通过配置类 跨域过滤器 优势在于过滤器优先级更高 什么请求都是先经过过滤器的

       //跨域过滤器配置类
       @Configuration
       public class CorsFilterConfig {
           @Bean
           public CorsFilter corsFilter(){
               return new CorsFilter(source());
           }
           @Bean
           public CorsConfigurationSource source(){
               UrlBasedCorsConfigurationSource source=
                       new UrlBasedCorsConfigurationSource();
               source.registerCorsConfiguration("/**",config());
               return source;
           }
           @Bean
           public CorsConfiguration config(){
               CorsConfiguration config=
                       new CorsConfiguration();
               //设置跨域规则
               config.addAllowedOrigin("*");
               config.addAllowedHeader("*");
               config.setAllowedMethods(Arrays.asList("GET","POST","PUT","DELETE"));
               config.setAllowCredentials(true);
               config.setMaxAge(3600L);
               return config;
           }
       }
      

      注:具体使用哪种 要看项目的环境

      比如:如果项目中添加了拦截器, 而且前端请求传递了请求头部信息 这样请求经过的先后顺序就会出现问题,当请求发送过来会先经过拦截器 , 而不是直接进入mapper映射 所以这时返回的头部信息 并没有设置跨域 这样之前配置的跨域配置类还没有其作用就出现了跨域问题

      解决: 所以如果使用跨域过滤器就不同了 过滤器执行时先于拦截器 所以无论发送什么请求 传递什么头部信息 也不会出现请求顺序的问题

  • 前端解决方案:

    • 通过Proxy写一个代理组件 让其转发给后端

注: 无论是前端还是后端 两种跨域方式都需要实现 虽然实现了一个即可 但是我不知道对方是否做了跨域 所以都需要做

4.2 springboot配置类是什么?

springboot把原来那些不经常修改的配置 通过类来完成(注入数据源 注入工厂 注入事务管理类)

把经常修改的内容(端口号 包的地址)才通过配置文件编写 所以springboot通过类来完成的配置 叫做配置类

配置文件1:经常改的 2.每次可以复制粘贴

 //编写方式
 //1.类的注解  标注我是配置类 随着 项目启动进行加载 只加载一次  
 //Myconfig也只会创建一个
 @Configuration
 public class MyConfig{
     //2.方法的注解 等价于之前的bean标签  会把方法的返回值 
     //存储spring容器中 只会调用一次  
     @Bean
     AdminService getService(){
         return new AdminServiceImpl();
     }
     //3.属性的注解  读取springboot配置文件的内容 根据key 读取value
     //将value 给下面的属性赋值 
     //注: @Value只要是在容器中的类都可以随意使用
     @Value("${server.port}")
     int port;
 }
 ​

5. springboot自动装配

springboot自动装配基本功能都是启动类注解@SpringbootApplication来实现的,里面还包含了很多子注解

  • @ComponentScan: IOC扫描包注解, 自动扫描启动类所在的包以及子包下的所有类 也可以手动配置(但是默认扫描的位置就失效了)
  • @EnableAutoConfiguration: 自动装配注解,根据导入的相关依赖 或者依赖属性 进行自动注入(比如: 有的类需要注入数据源 有的需要session工厂)
  • @SpringbootConfiguration: 配置类注解 让配置类生效

6.springboot常用注解 ---面试题

  • springboot相关:

    • @SpringbootApplication 启动类注解
    • @ComponentScan 扫描包注解
    • @MapperScan 整合Mapper接口
    • @SpringbootConfiguration 启用配置类注解
    • @EnableAutoConfiguration 自动装配注解
    • @Configuration 配置类注解
    • @Bean 创建bean对象注解
    • @Value 读取配置文件内容注解
  • spring相关:

    • @Autowired 自动注入注解
    • @Service @Controller @Component 扫描注解
    • @Transactional 事务注解
    • aop相关...
  • springmvc相关:

    • @RequestMapping @GetMapping @PostMapping 配置请求地址注解
    • @RestController 组合注解
    • @ResponseBody 将返回的结果转换成json返回给前端
    • @RequestBody 将前端提交的json数据 转换java中的对象
    • @RequestParam 配置请求传递参数 还可以加默认值
    • DateTimeFormat 日期格式化注解
转载自:https://juejin.cn/post/7415654362992967695
评论
请登录