Spring boot
木十一的木马
这个作者很懒,什么都没留下…
展开
-
Field userManageService in com....
在Service层的实现类未加@Service注解原创 2022-01-08 01:14:03 · 1796 阅读 · 0 评论 -
SpringBoot常用注解以及作用
1.@SpringBootApplication这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。@SpringBootApplication 是 @Configuration 、@EnableAutoConfiguration、@ComponentScan注解的集合。@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制@ComponentScan: 扫描被@Component (@Service,@Co原创 2021-12-08 18:03:32 · 2553 阅读 · 0 评论 -
mybatis批量删除和插入
批量删除:.xml<delete id="deleteByIds" parameterType="java.lang.Long" > delete from student where id in <foreach collection="idList" index="index" item="item" open="(" separator="," close=")"> #{item} </foreach><原创 2021-11-29 22:34:55 · 158 阅读 · 0 评论 -
mybatis模糊查找
<select id="showShop" resultType="com.qcby.demo1107.entity.Shop"> select * from shop <where> <if test="shop.shopName"> shop_name like CONCAT('%',#{shop.shopName},'%') </if>原创 2021-11-21 19:09:51 · 180 阅读 · 0 评论 -
二级菜单树的实现
1.实体类SysMenu:@Data@AllArgsConstructor@NoArgsConstructorpublic class SysMenu { @TableId(type = IdType.AUTO) private Long id; @TableField(value = "menu_name") private String menuName; @TableField(value = "menu_permission") priva原创 2021-11-21 14:10:37 · 184 阅读 · 0 评论 -
Spring boot实体类中常用基本注解
1.@TableFieldexist 表示是否为是数据库字段select 表示是否查询该字段value表示表中字段名和实体类的字段名不一致时,value=表中字段名(1)@TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错(2)@TableField非主键字段使用比如数据中的表中的字段是name但是实体类是userName那么就需要在u原创 2021-10-13 18:02:41 · 4965 阅读 · 0 评论 -
面向切面编程:操作日志
在项目中,操作日志至关重要,操作日志记录的是:谁干了什么事;我们可以利用面向切面编程实现操作日志的打印与记录:1.首先,添加依赖:<!--spring aop 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifact原创 2021-09-17 19:29:39 · 555 阅读 · 0 评论 -
跨域问题与体现
跨域:当请求地址的协议、域名、端口三者之中任意一个与当前页面的地址不同即为跨域;如:前台出现这种错误即为跨域:关键字:CORS原创 2021-09-16 00:58:48 · 115 阅读 · 0 评论 -
spring boot 实现发送邮箱验证码
首先设置一下发件人邮箱,以QQ邮箱为例:找到帐户,开启POP3/SMTP服务然后会提醒你怎么去实现,验证完后,会给你一个授权码,记住这个授权码,后端spring boot 会用到下面回到IDEA,写代码实现发送验证码。1.引入依赖:<!-- 邮箱验证码依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <原创 2021-09-13 10:43:48 · 3810 阅读 · 4 评论 -
spring boot文件的上传与下载
1.添加依赖:<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version></dependency>2.配置文件上传目录和访问前缀:// application.yml 文件# 文件上传下载相关配置file: path:原创 2021-09-12 02:50:25 · 280 阅读 · 0 评论 -
集成日志框架
1.日志框架有好多种,如:log4j、log4j2(log4j的升级版)、logback(spring boot 默认)、Jboss-logging等等。2.slf4是日志接口规范,代码对接slf4,实现和具体日志框架解耦,无需修改编码即可切换日志框架。在这里以log4j2日志框架为例:pom文件:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>原创 2021-09-08 00:19:02 · 176 阅读 · 4 评论 -
Mybatis Plus 连表操作及分页
collection 关键词多对多查询一.1.当子查询接收一个参数时:不涉及具体的名称映射,名字可以任意2.当子查询接受多个参数时:{自定义参数名称1=数据库字段名称1, 自定义参数名称2=数据库字段名称2}自定义参数名称是什么在子查询中参数名就是什么{userId=id, userName=user_name}自定义参数名称 = 数据库字段名称二.Mybatis Plus 连表操作的分页处理(分页信息的xml为上述的)Mapper层:Service层:Controlle原创 2021-09-06 00:41:39 · 867 阅读 · 0 评论 -
Mybatis Plus条件查询
QueryWrapper说明:继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取首先我们写一个判断字符串是否为空的工具类public class StringUtil { /** * @Author liu-miss * @Description //TODO 判断字符串是否为空字符串或NULL;原创 2021-09-03 23:40:57 · 5000 阅读 · 0 评论 -
Spring启动的流程
启动:1.(1)、扫描系统中所有配置有指定注解@Controller、@Service、@Bean、@Component等等(2)、通过指定配置配的路径通过反射 obj.getClass().newInsxxxx => 反射创建对象实例 => 放入容器map中解析bean的时候,检查字段是否有需要注入的注解 @Autowired、 @Resource=>初始化启动完毕...原创 2021-09-03 02:37:41 · 200 阅读 · 0 评论 -
整合JWT
1.token存在的问题:(1)生成token之后,只要项目一重新启动,所有用户将被强制下线;(2)没办法控制token的有效时长,比如,希望token三天有效;2.JWT:Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额原创 2021-09-02 23:40:32 · 164 阅读 · 0 评论 -
Mybatis Plus配置以及单表操作
MyBatis-Plus ,是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。他的官方网站为:(https://mp.baomidou.com/guide/)当我们只涉及到单表操作的时候使用Mybatis plus 是不需要写xml的sql语句的1.添加Mybatis plus依赖2.注释掉之前的mybatis配置,新添mybatis plus配置到此配置完成,接下来开始测试新建一个Role类,包括对应的Mapper、Service接口和原创 2021-09-01 11:39:05 · 421 阅读 · 0 评论 -
整合Swagger接口文档
Swagger接口文档:自动生成接口文档1.添加依赖:<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <versio原创 2021-08-30 20:34:19 · 193 阅读 · 0 评论 -
读取swagger配置文件里的内容
首先在配置文件类中加入swagger配置:接着创建一个properties包,其中有个SwaggerProperties类/** * TODO Swagger类 * * @author DB * <br>CreateDate 2021/8/30 11:24 */@Component@ConfigurationProperties(prefix = "swagger")public class SwaggerProperties { private String原创 2021-08-30 11:48:51 · 1116 阅读 · 0 评论 -
Mvc参数传递
一.基本数据类型传递1.@RequestParam,POST和GET均支持注解定义@RequestParam注解源码:@Target({ElementType.PARAMETER}) // 只能作用于参数上@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RequestParam { // 定义参数名称,默认和名字一致 @AliasFor("name") String value() def原创 2021-08-30 10:32:43 · 776 阅读 · 0 评论 -
debug调试初识
debug调试的重要性:调试是定位软件瑕疵的最直接和最有效的方法 。 没有哪个程序员能一下子 写出没有错误的代码。 而使用以调试器 为主的调试 工具进行调试是定位瑕疵的最直接方法 , 可以从问题 的症状入手 , 正向跟 踪或者反向追溯。Idea中debug调试的使用方式:我们可以使用快捷键:Shift + F9 启动debug调试在程序行左侧单机一下就可以设置断点注意点:断点一定要打在程序可执行的行,不能打在像大括号这样的行上面;当执行到哪一行,那一行是高光的可以看到断点所在行之上的所有变量原创 2021-08-29 17:13:02 · 528 阅读 · 0 评论 -
返回封装结果集Result
在做后端的开发的时候需要给前台返回一个结果集,结果集中包含状态码、返回信息和返回对象;返回的结果集中会有常量的出现,所以我们先封装一个常量类,方便调用;public class ResultConstant { //返回状态码:200-》成功; 500-》失败 public final static int OK = 200; public final static int ERROR = 500; public final static int MAN_CODE原创 2021-08-27 01:55:21 · 2007 阅读 · 0 评论 -
Map集合
Map存储的是键值对:k - vMap<String, int> map = new HashMap(); //尖括号<>代表的是泛型,逗号前的String是Key的类 型;逗号后的int是Value的类型,泛型一旦确定就只能存储这种形式的数据map.put("k1", 1); //put是往里面放入map类型的数据 map.put("k1", 2); //当key相同时就会原创 2021-08-27 00:47:50 · 145 阅读 · 0 评论 -
利用自定义注解实现权限验证
思路:根据自定义注解,给对应权限能够查看到的资源的Controller方法上添加注解(也就是一个权限字符串),权限字符串跟方法是一对多的关系,同一个权限字符串可以添加到多个方法上;当用户有对应的权限时才能查看对应的资源;所以我们可以获取到用户所拥有的所有权限字符串集合(登录时获取到,放入令牌池) & 当前所访问的方法对应的权限字符串(反射动态获取方法上的注解) => 判断集合中是否有这一个创建一个anno包,包里创建PreAuth,注意PreAuth是Annotation类型的,原创 2021-08-19 21:21:53 · 1560 阅读 · 0 评论 -
SpringBoot登录拦截器
创建一个包叫:interceptor新建一个类:LoginInterceptor,这个类需要是实现HandlerInterceptor 接口public class LoginInterceptor implements HandlerInterceptor { //点进去这个接口,按Alt+7,查看他的方法;我们需要重写preHandle方法 //需要先执行preHandle,再执行Cotroller层;preHandle就是拦截的作用 //@Override表示重写接口方法原创 2021-08-19 05:15:14 · 220 阅读 · 0 评论