SpringBoot前后端分离项目快速入门什么是springboot?springboot整合mybatis如何实现分页
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默认读取: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