目录
前端
级联显示 el-cascader
级联想进行搜索 filterable
后端
设计表的时候,用冗余字段可以加快查询效率
elasticSearch 重点 GulimallElasticSearchConfig这个配置文件
powerDesigner
PowerDesigner数据库建模工具的使用
https://segmentfault.com/a/1190000038567913
PowerDesigner给字段加注解
https://blog.csdn.net/weixin_33733810/article/details/85992423
PowerDesigner显示code
https://www.cnblogs.com/fanmiao/p/4628296.html
工具类
BeanUtils.copyProperties(attr,attrEntity);
BeanUtils.copyProperties(attr,attrEntity);
这个是spring的工具类,用于拷贝同名属性
String.join
String.join
这个是拼接list的
compareTo()
compareTo()
JVM调优:-Xmx100m
JSONObject.parseObject(String,Class)
Json字符串转对象
JSONObject.parseObject(String,Class)
@注解类
@JsonFormat 改变data返回格式
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)
改变data返回格式
@Valid @Validated @BindingResult 数据校验
spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。
@Validated进行验证,@BindingResult可以获取校验错误信息
参考网址:https://blog.csdn.net/weixin_43770545/article/details/90237097
@ExceptionHandler 统一异常处理
统一异常处理@ExceptionHandler
@JsonInclude 对象中的属性如果为空,不返回给前端时
对象中的属性如果为空,不返回给前端时,可以在实体类的属性上写@JsonInclude(JsonInclude.Include.NON_EMPTY)
@TableField 对象中的属性如果在表里没有
对象中的属性如果在表里没有,可以用@TableField(exist = false)
@TableId mybatis-plus id
如果id自增:@TableId(type = IdType.AUTO)
@Builder 优雅的进行set赋值
lombok中的@Builder
可以优雅的进行set赋值
参考:https://blog.csdn.net/djrm11/article/details/104653877/
@ControllerAdvice 全局异常处理
全局异常处理
@Mapper和@Repository区别
@Repository需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中。
@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。
@Component
@Componnet是用在类上,声明这个类是一个组件被spring管理起来
用途:注入进spring容器中进行管理 和@controller 、@service、@repository
用法一致,只不过前面经常用,看到就联想到是控制层、服务层、持久层
@Bean
@Bean作用在方法上,一般标明返回的对象直接被Spring管理起来
使用:调用的时候和@Component一样,用@Autowired 调用有@Bean注解的方法,多用于第三方类无法写@Component的情况
可参考:Java @Bean 概念和使用
@Pointcut
概念:spring aop切点
举例:
//当使用到QhLog这个类时,会切入切点
@Pointcut("@annotation(net.qh.common.annotation.QhLog)")
public void qhLog(){
log.info("---注入用户操作日志切面---");
}
@Around
概念:通俗来说是调用@Pointcut 中的方法
举例:
@Around("qhLog()")
@Aspect
不太懂
YML
context-path
server:
servlet:
context-path: /xxx
context-path
应用的上下文路径,也可以称为项目路径,是构成url地址的一部分
在每个module的application.properties文件都可以配置server.context-path这个属性。开始使用spring
boot的时候没有注意这个属性,其实默认可以不配置,直接在controller层通过@RequestMapping来设定url的地址路径。
@RestController
@RequestMapping("/mqcp")
public class MQCPContorller {
@Autowired
MQCPServiceImpl mqcpService;
@RequestMapping("/convert")
public String convert(){
mqcpService.convert();
return "ok";
}
}
如果server.context-path没有配,请求的url地址就是 localhost : port/mqcp/convert
如果server.context-path = “/market/task”, 请求的url地址就是 localhost : port/market/task/mqcp/convert
Spring
大白话讲解Spring的@bean注解
https://blog.csdn.net/qq_44543508/article/details/103718958
https://www.hangge.com/blog/cache/detail_2506.html
Shiro
shiro基础版-后端
https://gitee.com/seventeenw/springboot-shiro
谈谈shiro的工作流程
启动项目的时候,首先会 配置SecurityManager的生命周期处理器,然后注册自己写的授权和认证,配置shiro拦截器,并开启注解功能
登录的时候,先判断该用户是否生成过token,来进行保存或者更新token。
发送请求的时候,首先会拦截除option外所有的请求,进行token的非空验证,如果token是空的,则返回错误信息,如果不是空的,则验证token的有效性,如果无效,则返回错误信息,有效的话进行权限验证。先给用户添加角色和权限(授权)再进行验证,无权限返回对应异常,有权限进入对应接口
MybatisPlus
xml 头
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sq.bootshiro.modules.dao.PermissionRepository">
</mapper>
跨域
解决跨域
package com.sq.bootshiro.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* 实现基本的跨域请求
*
*/
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
final CorsConfiguration corsConfiguration = new CorsConfiguration();
/*是否允许请求带有验证信息*/
corsConfiguration.setAllowCredentials(true);
/*允许访问的客户端域名*/
corsConfiguration.addAllowedOriginPattern("*");
/*允许服务端访问的客户端请求头*/
corsConfiguration.addAllowedHeader("*");
/*允许访问的方法名,GET POST等*/
corsConfiguration.addAllowedMethod("*");
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
springBoot升级2.4.0所出现的问题:When allowCredentials is true, allowedOrigins cannot contain the specia
解决办法:跨域配置报错,将.allowedOrigins替换成.allowedOriginPatterns即可。
Docker
默认开启虚拟机启动/关闭
#开启
docker update redis --restart=always
#关闭
docker update redis --restart=no
Swagger
结合springboot使用
Log4j2
结合springboot使用
MAVEN
DepencyManagement和dependencies
DepencyManagement 子项目使用依赖项的统一版本
区别
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
MyBatis-Plus
MyBatis-Plus中的LambdaQueryWrapper是如何实现传入实体方法引用来获取方法属性名的?
https://www.oschina.net/question/162091_2305348?sort=default
其他问题
时间少了8小时
&serverTimezone=Asia/Shanghai
eg.
url: jdbc:mysql://localhost:3306/renren_fast?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai