- 博客(136)
- 收藏
- 关注
原创 网页聊天室 -- 测试报告
基于 Spring Boot 3 开发的网页版即时聊天室系统,支持用户管理、好友管理、会话管理、实时消息收发和聊天记录持久化等功能。具备 WebSocket 长连接通信机制,确保消息不丢失,会话数据可以通过数据库持久化存储,保障用户聊天记录可追溯。具备异常回滚机制,确保两个用户的会话创建,是正常创建。完整的测试用例(思维导图):网页聊天室 – 测试用例由于一个浏览器,会存储 session信息,我们需要打开两个浏览器:Edge,chromechrome,登录的是 hehuashuEdge,登录的是 li
2026-03-09 17:56:12
485
原创 图书管理系统(9)前端代码修改 & 系统完结
这个图书管理系统,非常的简陋,仅作为练习使用。不建议大家使用我介绍的 图书管理系统 ,去作为 课程设计。如果你是第一次点击这篇博客的,需要你将我 图书管理系统 的博客列表中,从这篇开始看:图书管理系统(1)项目准备,用户登录接口,添加图书接口直到看到这篇博客:图书管理系统(8)统一管理返回结果这个 图书管理系统 的实现,需要你从我的 gitee上,将 无Mybatis版本 的图书管理系统源代码下载下来。gitee链接:https://gitee.com/mrbgvhbhjv/java-ee-cour
2026-02-25 19:35:39
936
原创 图书管理系统(8)统一管理返回结果
统一的数据返回格式使用 @ControllerAdvice 和 ResponseBodyAdvice 的方式实现 :@ControllerAdvice 表示控制器通知类添加类 ResponseAdvice ,实现 ResponseBodyAdvice 接口, 并在类上添加 @ControllerAdvice 注解统一数据返回格式,有这么几个优点方便前端程序员更好的接收和解析后端数据接口返回的数据降低前端程序员和后端程序员的沟通成本,按照某个格式实现就可以了,因为所有接口都是这样返回。
2026-02-25 19:34:56
652
原创 图书管理系统(7)完善强制登录功能
第一次将 拦截器 运用在简单的项目中,实现 强制登陆 的功能。强制登陆 的功能。在很多网站上,都由应用,有拦截器实现,是主流方式,需要多理解,吃透这个实现的方式。以上代码的意思,通过注释,你应该能看懂,看不懂的,使用 ai工具(deepseek,豆包……)图书管理系统(8)统一管理返回结果。
2026-02-25 19:34:10
1230
原创 统一功能处理(3)统一异常管理
实际开发中,统一异常管理,捕捉异常,一般不使用 Exception。因为 Exception 是所有异常的 父类,太广泛了。企业开发中,一般使用 自定义的异常。图书管理系统(7)完善强制登录功能。
2026-02-24 11:05:47
1035
原创 统一功能处理(2)统一数据返回格式
统一的数据返回格式使用 @ControllerAdvice 和 ResponseBodyAdvice 的方式实现 :@ControllerAdvice 表示控制器通知类添加类 ResponseAdvice ,实现 ResponseBodyAdvice 接口, 并在类上添加 @ControllerAdvice 注解统一数据返回格式,有这么几个优点方便前端程序员更好的接收和解析后端数据接口返回的数据降低前端程序员和后端程序员的沟通成本,按照某个格式实现就可以了,因为所有接口都是这样返回。
2026-02-24 11:05:02
1214
原创 统一功能处理(1)拦截器
拦截器是Spring框架提供的核心功能之⼀,主要用来拦截用户的请求,在指定方法前后,根据业务需要执行预先设定的代码。创建一个 intercepter包,里面定义 LoginIntercepter类。实现 HandlerInterceptor接口,并重写其所有方法@Slf4j@Component/*** @return* true:对目标方法放行,不会拦截* false:拦截目标方法,通过验证之后,才能访问*/@Override。
2026-02-23 14:48:28
1463
原创 图书管理系统(6)强制登陆(前端实现)
目前,仅仅是 图书列表展示 页面,进行了强制登录功能的实现,后续,学完 统一功能 这个知识后,再对 图书管理系统,进一步进行完善。所以,想要实现整个图书管理系统,我们就需要学习 统一功能处理 这个知识点。统一功能处理(1)拦截器。
2026-02-23 14:45:33
948
原创 图书管理系统(5)强制登陆(后端实现)
上述代码,我们在逐步使用代码封装的操作了。首次接触,如何实现强制登录功能,掌握其实现思路第一次在小型项目中,多次对代码,进行封装,认识到代码封装的好处。图书管理系统(6)强制登陆前端。
2026-02-21 10:54:42
1104
原创 图书管理系统(4)删除图书接口
删除,分为两种:逻辑删除,物理删除逻辑删除:从逻辑上进行删除,使用数字,表示删除状态 数据的 delete_flag=0,表示没有删除,delete_flag=1,表示这个数据在逻辑上已经删除了 sql语句:update book_info set status=0 where id =?物理删除:使用delete关键字。 sql语句:delete from book_info where id=?批量删除,并不是用户固定的选择,有可能这一次的。
2026-02-21 10:54:02
753
原创 图书管理系统(2)图书列表接口
列表接口,是最难理解的,在这个图书管理系统中。其中,涉及到分页,枚举,代码封装等方面的知识。建议多写几遍。我们这个代码中,使用的分页,是最原始的分页操作。Mybatis本身就提供了分页的插件,给我们使用。分页功能,一般是由后端实现的,前端传递参数(起始页面,每一页的个数)过来后端。图书管理系统(3)修改图书接口。
2026-02-20 18:53:54
1367
原创 图书管理系统(3)修改图书接口
后端接口(Controller)代码,接收前端参数的时候,一定要和方法名对应上,不然,接口就接收不到前端的参数。Sql语句的 ‘,’ 一定要记得写上,不然 sql语句会报错的。无法修改数据。图书管理系统(4)删除图书接口。
2026-02-20 18:53:16
818
原创 图书管理系统(1)项目准备,用户登录接口,添加图书接口
/Mapper层//Controller层:// 1. 验证是否为空//2.匹配用户名和密码//3. 存储 Session//4. 返回结果if (!// 根据用户名,获取用户信息// userInfo == null 表示: 查询不到用户,就返回 false// 防止密码泄露,此处的 userInfo对象,密码设置为 null,但是不影响数据库中的数据// 密码为 "",其他人无法通过session,获取到用户密码// 没有学数据库相关的操作,写死用户名和密码。
2026-02-18 19:32:48
1397
原创 Mybatis(17)Mybatis-Plus条件构造器(2)& 自定义 SQL
的举例使用介绍。QueryWrapper 和 UpdateWrapper存在⼀个问题,就是需要写死字段名,如果字段名发生变更,可能会因为测试不到位酿成事故。MyBatis-Plus 给我们提供了⼀种基于Lambda表达式的条件构造器,它通过 Lambda 表达式来引用实体类的属性,从而避免了硬编码字段名,也提高了代码的可读性和可维护性。分别对应 QueryWrapper和UpdateWrapper。MyBatis-Plus 🚀 为简化开发而生。
2026-02-18 19:29:44
1216
原创 Mybatis(16)Mybatis-Plus条件构造器(1)
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。换句话说:条件构造器(Wrapper)配合 实体类接口继承BaseMapper<T> 后,提供的 select,delete,updata 方法,自动生成 select,delete,updata 语句条件构造器(Wrapper)+方法 == SQL中的。
2026-02-17 14:26:13
1135
原创 Mybatis(15)@TableName注解 & @TableField注解 & @TableId注解
TableName注解 :MyBatis-Plus ORM 映射的核心注解之一,确保了Java 对象与数据库表之间的正确对应关系。(实体类和表之间的映射)注解:MyBatis-Plus ORM 映射的核心注解之一,当Java 实体类属性名与数据库表字段名 不一致时,使用此注解建立映射关系。(属性和字段之间的映射)表名: 实体类的驼峰表示法转换成蛇形表示法(下划线分割), 作为表名。比如UserInfo -> user_info字段: 根据实体类的属性名 转换为蛇形表示法作为字段名。
2026-02-17 14:25:19
1007
原创 Mybatis(14)Mybatis-Plus入门 & 简单使用
使用 MP框架,和 Mybatis 差不多。引入依赖添加配置文件创建实体类编写 mapper接口创建(依赖注入) mapper接口对象,调用方法与 Mybatis 不同的是 Mybatis-plus,mapper接口,需要继承 BaseMapper<T>接口,T,换成这个接口操作的实体类。Java实体类的名称,数据库表的名称,按照规范来,MP内置的命名规范,会自动匹配 Java实体类和数据库表。所以,命名规范,很重要,特别是在 MP 的使用中。如果命名不规范,MP 提供了。
2026-02-16 11:58:54
945
原创 Mybatis(13)MyBatis Generator(xml生成器)& Mybatis-Plus初识
使用这个插件,能让它帮你编写 sql语句了,就不用你自己写了。但是,如果你连 sql语句,都不想写,不想看,那么,Mybatis-Plus,是另一个好的选择。这篇博客,主要讲如何快速生成 xml文件代码,通过 xml文件的代码。实现数据库的增删查改。还有对有一个简单的介绍。Mybatis(14)Mybatis-Plus入门 & 简单使用。
2026-02-16 11:56:15
1071
原创 Mybatis(12)综合案例:表白墙(留言板)
一旦服务器重启,所有数据都会丢失。若要实现数据的持久化存储,需将数据存入数据库。接下来,我们将借助 MyBatis 框架来完成数据的增删改查操作。我们定义两个,查询所有留言信息 和 新增留言信息 的接口。使用 注解或XML 的方式实现。由于是比较简单的 Sql语句,我们采用注解的方式实现接口@Mapper/*** 查询所有留言信息* @return*//*** 添加新的留言信息* @return*/
2026-02-14 10:51:58
870
原创 Mybatis(11)动态 SQL(2):set,foreach,include
这个集合是 (20,21,22,23)这种,相同类型的数据。各个标签,怎么用的,要清楚,多练习几遍。Mybatis动态sql后续,会使用更高级的工具,自动生成 xml的代码,不用我们手写,但是,还是要有基础知识。有了基础知识,工具写出来的代码,我们才知道要怎么改。Mybatis(12)综合案例:表白墙(留言板)
2026-02-14 10:51:41
718
原创 Mybatis(10)动态 SQL(1):新增 & 查询
目前,我需要插入一条记录到 user_info表,但是,我对新插入的数据的gender字段,要求是 非必填参数,如何实现?一条 sql语句,可以分为这几个部分:1,2部分:where标签,建议:仅在 查询语句 中使用,不要在 修改,删除语句中,使用 where标签。修改语句,如果你where标签 的内容,程序员忘记传入参数,导致内容为空,就不会生成 where关键字,导致表中所有的数据的信息,都被修改。删除语句,如果你。
2026-02-13 12:50:30
1116
原创 Mybatis(9)数据库连接池 & 企业开发规范
数据库连接池 负责分配、管理和释放数据库连接,它允许应用程序重复使用⼀个现有的数据库连接,而不是再重新建立⼀个没有使用数据库连接池的情况:每次执行SQL语句, 要先创建⼀个新的连接对象, 然后执行SQL语句, SQL语句执行完, 再关闭连接对象释放资源。这种重复的创建连接, 销毁连接比较消耗资源。使用数据库连接池的情况:程序启动时, 会在数据库连接池中创建⼀定数量的Connection对象, 当客户请求数据库连接池, 会从数据库连接池中获取Connection。
2026-02-13 12:50:09
951
原创 Mybatis(8)#{}和${}的区别,排序,模糊查询
Mybatis 实现 模糊查询:由于 like 后面的字符,无法 保证输入的参数是可控的,故而不能使用 ${},而是使用 concat。这篇博客,重点掌握这个:#{}:预编译处理, ${}:字符直接替换#{} 可以防⽌SQL注⼊${}存在SQL注⼊的⻛险, 查询语句中, 可以使用 #{} ,推荐使用 #{}但是⼀些场景, #{} 不能完成, 比如 排序功能, 表名, 字段名作为参数时, 这些情况需要使用${}
2026-02-12 19:00:19
1336
原创 Mybatis(7)其他查询操作(多表查询)
多表查询的方式,还有很多实现方式,我是使用了在返回值指定的 类(上面的 ArticleInfo) 中,添加属性,接收 字段 的值。上述多表查询,我们进行了演示,但是,我仅仅是演示,不去深入说明的理由是:企业中,尽量避免多表查询,但不是不能用!!!多表查询,数据量太大,查询数据速度慢,很影响程序的性能。更推荐使用嵌套查询(也叫子查询)。
2026-02-12 18:59:59
1315
原创 Mybatis(6)XML方式:新增,删除,修改
使用 注解 实现 增删改查,注解是:@Insert,@Delete,@update,@Select使用 xml 实现 增删改查,标签是:,,,# 数据库连接配置# 数据库连接配置password : 123456 driver - class - name : com . mysql . cj . jdbc . Driver # 配置打印 MyBatis ⽇志。
2026-02-11 00:16:18
880
原创 Mybatis(5)Mybatis基础操作(XML)& 简单查询
看到上述的报错信息,注意 xml文件,配置文件 ,接口的名字,是否相关参数都正确。总的来说,还是建议使用第三种方式,配置文件,驼峰自动转换(前提是遵守命名规范)的方式,用于 对象的属性和数据表的字段 的映射。配置文件,自动映射,我开头的配置文件已经配置好了。配置文件,配置好 xml 的配置信息接口的名字 和 xml文件中namespace 需要对应xml文件存在的包名,xml文件的后缀结尾名,要和配置文件中的配置信息,对应起来。
2026-02-11 00:15:59
1167
原创 Mybatis(4)Mybatis基础操作:删除 & 修改
delete 和 update ,使用的时候,一定一定要加 where!!!!Mybatis(5)Mybatis基础操作(XML)& 简单查询。
2026-02-10 00:14:12
449
原创 Mybatis(3)Mybatis基础操作:增加 & 解决映射问题
增加数据@Insert注解:直接在 Mapper 接口的方法上使用,用于执行插入操作。如果需要获取插入后的主键,可以使用@Options注解配合@Insert解决 数据库字段名和 Java对象属性的映射问题推荐使用 配置文件的方式,前提是需要遵守数据库字段名的命名规范 和 Java类的属性的命名规范。Mybatis(4)Mybatis基础操作:删除 & 修改。
2026-02-10 00:13:52
862
原创 Mybatis(2)Mybatis简单查询(参数传递)
使用两个参数查询的时候,方法参数和#{} 括号中的字符建议匹配上,一一对应。查询数据,使用的是 @Select注解。打印 Mybatis日志:# 配置打印 MyBatis⽇志 mybatis : configuration : log-impl : org.apache.ibatis.logging.stdout.StdOutImpl参数传递传递单个参数:参数名 和 占位符的名字,不相同也能赋值。(建议是一样的名字,一一对应)传递多个参数:方法参数名 和 占位符的名字,要求必须 一一对应。
2026-02-09 11:12:03
1336
原创 Mybatis(1)Mybatis 入门
Mybatis 是一个持久层的框架,用来访问数据库的,持久化保存数据。Spring框架 和 Mybatis框架,是没有任何关系的。Springboot 集成了 Mybatis框架,可以通过 pom文件,导入 Springboot 项目中,使用。类似于很多软件,集成了 deepseek 一样,可以使用 deepseek,但是,两个软件不是同一个公司的产品。框架就是把很多共同的东西封装起来。Mybatis 是基于 JDBC封装 的,把 JDBC共同的操作封装,简化操作。
2026-02-09 11:11:44
1056
原创 综合练习:验证码案例(2)后端代码
前提:生成的验证码,是一个图片,我们可以设置响应的 Content-Type这个代码,写在最前面:获取 响应 的输出流对象(OutputStream)使用 hutool工具,生成验证码图片 2.1 避免硬编码问题,把图片的 宽,高 编写到配置文件当中 2.2 建立新的类(CaptchaProperties 或 Captcha)读取配置文件中,验证码图片的 宽高,注入到类的属性当中 2.3 注入创建的类 ,创建对象 2.4 使用 get方法,从对象中获取 宽高,填入生成验证码的方法中。
2026-02-08 19:08:21
1134
原创 综合练习:验证码案例(1)总体设计
验证码:随机字符 + 干扰信息。数字 0~9字母 a~z A~Z汉字随机字符,可以放在数组里,如果要用,随机拿出来四个,五个,就可以了。生成验证码的代码,在 github 上,有很多开源的,gitee上也有,直接去搜索就行。Hutool 核心资源汇总:生成验证码图片,返回验证码图片给前端校验验证码是否正确Mybatis(1)Mybatis 入门。
2026-02-08 19:07:59
1143
原创 Spring日志
了解应用如何个人化推荐?根据你最近使用的应用的日志,服务器会有日志登录你浏览的商品(购物软件),浏览的视频(短视频软件)……公司里面的大数据团队,会根据日志,清洗数据,算法团队训练数据模型,推送个性化内容。Logger定义Logger是 SLF4J 提供的日志记录接口,用于实际执行日志记录操作(如info()debug()error()等方法)。作用:提供日志记录功能,开发者通过调用Logger的方法来记录日志。
2026-02-08 19:07:23
572
原创 Spring配置文件(2):yml
yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔。yml配置文件的格式:yml 文件,是以 键值对 的方式,组织信息的。Key: Value或者Key:空格Value注意:‘:’ 后面是有空格的,这个空格,绝对不能省略>。这是格式要求。读取对象读取集合(数组)读取 Mapyml的优缺点:优点:写法简单,可读性好,支持更多的数据类型,支持更多的编程语言缺点:不适合写复杂的配置⽂件,对格式有较强的要求。
2026-02-07 08:38:30
1128
原创 Spring配置文件(1):properties
配置文件的作用:配置文件主要是为了解决 硬编码 带来的问题, 把可能会发生改变的信息, 放在⼀个集中的地方, 当我们启动某个程序时, 应用程序从配置文件中读取数据, 并加载运行.XXX.ymlSpringboot 配置文件,可以自定义配置信息。Springboot 配置文件,可以通过内置好的 配置项,重新设置 程序运行端口号。可以使用 @Value 读取配置文件的信息。配置信息,读取的时候默认以 Spring 的方式处理使用参数接受时,Springboot 会自动转换类型。
2026-02-07 08:37:06
834
原创 SpringIoC & DI(5):DI详解
更多的时候,解决 多个相同类型的对象的依赖注入问题,我们使用的是:@Resource 或者 @Qualifier + @Autowired@Primary,几乎不用。有多个 相同类型(例如:多个 Student类型 ) 的对象,使用 @Autowired 进行依赖注入,会失败。@Primary(确定对象的最高优先级)@Qualifier(结合 @Autowired 根据 Bean的名称 获取对象)@Resource(非 Spring 的注解)更多的时候。
2026-02-06 08:27:24
738
原创 SpringIoC & DI(6): SpringIoC & DI总结
SpringIoC 和 DI 的内容,已经全部学完。Spring配置文件(1):properties。
2026-02-06 08:26:58
1105
原创 SpringIoC & DI (4)DI详解(三种注入方式)
DI: Dependency Injection,叫做 依赖注入。依赖注入是一个过程,是指IoC容器在创建Bean时,去提供运行时所依赖的资源,而资源指的就是对象。传统开发模式中需要自己通过 new 创建对象, 现在不需要再进行创建, 把创建对象的任务交给容器, 程序中只需要依赖注入 (Dependency Injection,DI)就可以了。什么叫做依赖?依赖,就是完成这项工作的必须品,是完成这个工作不可或缺的东西。IoC,是存储 Bean的方式。DI,是获取 Bean的方式。
2026-02-05 15:02:18
724
原创 SpringIoC & DI (3):IOC详解(方法注解 @Bean)
ComponentScan,实际上已经包含在了启动类声明注解 @SpringBootApplication 中了推荐做法:把启动类放在我们最外层的包的路径下,这样我们定义的bean就都可以被扫描到。(当然,你创建程序的时候,就已经是这么做的了)@Bean 注解,是一个方法注解,当同一个类,需要管理多个对象的时候,就可以用这个注解。@Bean 注解必须要结合 五个类注解 中的一个,结合使用。@Bean 注解,可以给 Bean的名称,重命名。
2026-02-05 15:01:33
782
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅