目录

  • 前言
  • 1.为了使用swagger方便调试,不验证权限
  • 找到SecurityConfig文件
  • 第一步
  • 第二步
  • 2.SQL相关
  • 2.1 union、union all、or 效率对比
  • 2.2 exists、in 使用场景
  • 2.3 in、or 效率对比


前言

使用VS Code编写springboot代码需要安装的插件(个人习惯,仅供参考):

  • Debugger for Java
  • Spring Initializr Java Support
  • Language Support for Java™ by Red Hat
  • Maven for Java
  • Spring Boot Extension Pack
  • MybatisX

1.为了使用swagger方便调试,不验证权限

找到SecurityConfig文件

ruoyi-framework\src\main\java\com\ruoyi\framework\config\SecurityConfig.java

第一步

为了避免出现类似这种状况
{ "msg": "请求访问:/store/production/list,认证失败,无法访问系统资源", "code": 401 } 改这里

.antMatchers(
	HttpMethod.GET,
	"/",
	"/*.html",
	"/**/*.html",
	"/**/*.css",
	"/**/*.js",
	"/profile/**", 
	"/**/**" // 在这加这个
).permitAll()

anonymous() 允许匿名用户访问,不允许已登入用户访问
permitAll() 不管登入,不登入 都能访问

第二步

为了避免出现这种状况
{ "msg": "获取用户信息异常", "code": 401 } 改这里

@EnableGlobalMethodSecurity(
	prePostEnabled = false, // 改这个
	securedEnabled = true
)

2.SQL相关

2.1 union、union all、or 效率对比

union
表链接后会利用字段的顺序进行排序,以此筛选掉重复的数据行,最后再返回结果。因此,当数据量很大时 union 效率很低

union all
相比 union,union all 在表链接时不会删除重复的数据行,直接返回表联合后的结果。因此,union all 执行效率要高很多,在不需要去重和排序时,更推荐使用 union all

or
or 用于 SQL where 子句中,SQL 脚本可读性更高,但是它会引起全表扫描,根本不走索引查询。所以通常情况下,union [all] 查询会利用索引进行查询,执行效率要高于 or

* 但是当 or 条件中查询列相同,or 的执行效率要高于 union。

2.2 exists、in 使用场景

由于 SQL 做子查询最优方案是小表驱动大表。
对于 in 来说是子查询表驱动外表,当子查询表数据少于主表数据时推荐使用。
exists 是外表驱动子查询表,因此当外表数据少于子查询表时更推荐使用。

2.3 in、or 效率对比

如果in和or所在列有索引(包括主键索引),or和in没啥差别,执行计划和执行时间都几乎一样
如果in和or所在列没有索引的话,随着in或者or后面的查询条件的增加,in的耗时不会有太大的增长;但是or的耗时基本上是指数级增长,所以优先选用 in