- 博客(85)
- 收藏
- 关注
原创 @RestController 与 @Controller 注解说明
摘要:本文对比了Spring框架中@Controller和@RestController两个注解的区别。@Controller用于传统MVC模式,默认返回视图名称,需配合@ResponseBody才能返回数据;@RestController是组合注解,默认所有方法返回值直接作为HTTP响应体,适用于RESTful API开发。文章通过代码示例展示了两种注解的使用方式,并总结了它们各自的适用场景:@Controller适合返回页面的传统Web应用,@RestController更适合返回JSON/XML等数据
2025-07-22 19:48:25
385
原创 MyBatis-Plus 配置与使用指南
MyBatis-Plus配置与使用指南提供了完整的整合步骤:首先添加Maven依赖并排除冲突组件;其次配置数据源和MyBatis-Plus参数;然后创建带注解的实体类;接着定义继承BaseMapper的接口并配置扫描路径;最后演示基本CRUD操作。该框架通过@TableName等注解简化ORM映射,内置通用Mapper方法减少SQL编写,支持逻辑删除等全局配置,并提供SQL日志输出功能,能显著提升开发效率。
2025-07-18 22:29:16
935
原创 逻辑删除实现及配置说明
本文介绍了逻辑删除的实现方法,通过配置MyBatis-Plus实现数据标记而非物理删除。主要内容包括:1)数据库添加is_deleted字段;2)实体类使用@TableLogic注解;3)服务层调用MP方法自动执行逻辑删除;4)yml文件配置全局规则。系统会自动将删除操作转为更新,并在查询时过滤已删除数据。这种方式既保留历史数据又简化开发,适用于需要数据追溯的场景。
2025-07-18 22:24:10
409
原创 mybatisplus分页查询
本文介绍了使用MyBatis-Plus实现分页查询的完整方案。代码分为Controller层和Service层,包含参数获取、条件构建、分页查询等关键步骤。重点讲解了IPage分页对象的使用,包括其核心属性和常用方法,并对比了不可变分页和可变分页的适用场景。同时说明了排序方法的参数配置,通过动态条件构建和统一分页封装,实现了灵活高效的分页查询功能,便于前后端交互和数据展示。
2025-07-18 22:19:42
741
原创 resultMap
MyBatis-Plus与MyBatis在结果集映射上存在显著差异:MyBatis-Plus通过自动映射功能实现数据库列与实体属性的匹配,基于驼峰命名规则和元数据解析,内置多种映射处理器,仅在特殊情况下需要手动定义resultMap;而MyBatis必须通过resultMap显式配置映射关系,特别是在列名不匹配或处理复杂结果集时。MyBatis-Plus的自动映射机制包括命名约定、元数据解析、内置处理器和插件扩展四个核心功能,简化了开发流程。
2025-07-18 22:14:56
215
原创 # MyBatis-Plus 通常不需要使用 PageHelper 插件
摘要:MyBatis-Plus内置强大分页功能,无需额外使用PageHelper。其通过拦截器自动实现SQL分页改写,支持多种数据库,并允许功能扩展。配置示例展示了如何为MySQL/PostgreSQL设置分页插件(含乐观锁功能),只需指定数据库类型即可自动适配分页语法。相比PageHelper需要手动调用startPage(),MyBatis-Plus的分页更简洁高效,且避免了兼容性问题,但特殊需求时两者可共存(需注意配置冲突)。
2025-07-18 22:13:32
219
原创 MyBatis-Plus 的自动填充功能
这是因为自动填充是通过 MyBatis-Plus 的拦截器机制实现的,而自定义 SQL 或手动 SQL 语句不会经过这些拦截器。当你调用 BaseMapper 的insert()方法时,框架会检测字段的填充策略(如FieldFill.INSERT)并执行填充逻辑。自定义 SQL 的限制:如果你使用以下方式,自动填充将不会生效:自定义 XML 中的 SQL 语句。那么基于它自身封装的方法(如 updateById)来实现的,当使用自定义的 SQL 时,需要手动添加填充逻辑。
2025-07-18 22:10:20
415
原创 MyBatis-Plus 的乐观锁机制
要启用 MyBatis-Plus 的乐观锁机制,在更新操作时必须确保传递给更新方法的实体对象中 version 字段有值。
2025-07-18 22:06:56
221
原创 mybatislog插件
在 application.yml 或 application.properties 中配置 MyBatis 的日志输出,确保 SQL 语句能够正常输出到控制台。如果使用的是自定义的日志框架(如 Logback、Log4j),需要确保日志级别配置正确,以便能够看到 SQL 语句的输出。通过以上步骤,你就可以在开发过程中方便地使用 MyBatis Log 插件查看完整的 SQL 语句,提高开发效率。插件会自动将带有占位符的 SQL 语句和参数进行合并,生成完整可执行的 SQL 语句,方便你查看和调试。
2025-07-18 21:59:21
655
原创 .sort(Comparator.comparing()) 的各种排序方式
【代码】.sort(Comparator.comparing()) 的各种排序方式。
2025-07-18 21:56:40
220
原创 实体类多对一关系
JoinColumn(name = “operate_log_id”, nullable = false):在数据库层面,会在 OperatePosition 表中创建一个名为 operate_log_id 的外键列,以此来关联 OperateLog 表的主键,并且该外键列不允许为空。OperatePosition(操作坐标):作为关系里的 “多” 方,记录了某次操作的具体坐标,而且每个坐标都和唯一的操作日志相对应。操作位置OperatePosition:多。操作记录OperateLog:一。
2025-07-18 21:55:16
375
原创 BeanUtils忽略属性
在上述代码里,BeanUtils.copyProperties(dbData, room, ignoreProperties) 方法会复制 room 对象的属性到 dbData 对象,同时忽略 ignoreProperties 数组里的属性,如此就能避免继承的属性被覆盖。BeanUtils.copyProperties 有一个重载方法,允许你指定要忽略的属性。你可以把继承类的属性添加到忽略列表中。
2025-07-18 21:50:20
256
原创 springdoc-openapi 为 Swagger 实现分组功能
【代码】springdoc-openapi 为 Swagger 实现分组功能。
2025-07-18 21:47:37
419
原创 RestTemplate发送请求
/ 准备请求体// 设置请求头// 创建HttpEntity对象// 使用exchange方法发送POST请求url,MyResponseType.class // 指定响应类型。
2025-07-18 21:34:13
435
原创 axios请求各种类型
headers: 设置请求头(如 {‘Authorization’: ‘Bearer token’})withCredentials: 是否携带跨域凭证(如 cookie)params: 用于 GET 请求的查询参数(自动编码到 URL)data: 用于 POST/PUT 请求的请求体数据。用于删除资源,参数可以通过 URL 或请求体传递。timeout: 请求超时时间(毫秒)
2025-07-18 21:24:19
312
原创 hashmap嵌套
获取键set:.keySet()内层可以输出set和value。.get(循环中定义的键名)再从内层hash获取键set。在循环中获取内层hash表。
2024-12-01 15:58:07
246
原创 牛客刷题 数据库专项练习
读"脏"数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为"脏"数据,即不正确的数据。数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。外模式是具体的用户模式(每个用户只能看到和访问骑对应的外模式的 数据),描述的是数据的局部逻辑结构。数据的逻辑独立性是指数据库逻辑结构的变化(如数据定义的修改、数据间联系的变更等)不影响用户的应用程序。
2024-10-16 00:56:15
712
1
原创 牛客刷题 队列专项练习
而带链的队列,由于每个元素都包含一个指针域指向下一个元素,当带链队列为空时 front=rear=Null ,插入第 1 个元素时, rear+1 指向该元素, front+1 也指向该元素,插入第 2 个元素时 rear+1 , front 不变,删除 1 个元素时 front+1。对于序列( 12 , 13 , 11 , 18 , 60 , 15 , 7 , 19 , 25 , 100 ),用筛选法建堆,必须从值为 ________ 的数据开始建初始堆。该队列中的元素个数为( )
2024-10-14 13:38:33
664
原创 牛客刷题 栈专项练习
4)存储内容的不同:栈在函数调用时,函数调用语句的下一条可执行语句的地址第一个进栈,然后函数各个参数进栈,其中静态变量是不进栈的,而堆中一般是在头部用一个字节存放堆的大小,堆中的具体内容是人为安排的;链栈由于采用了链表的方式作为存储方式,入栈时,使用malloc申请空间后,用指针相连接,所以节点个数没有限制,但是出栈时,如果栈中的元素个数为0,则不能继续出栈,栈长:s.top+1;出栈操作x=s.data[--s.top];若5出栈时,栈的情况为1,2,4,5,那么5的前一个出栈为3,后一个出栈为4。
2024-10-14 13:09:45
380
原创 牛客刷题day2
2.其次,需要理解子类覆盖父类方法的问题,也就是方法重写实现多态问题。这里的str2必须在运行时才知道str2是什么,所以它是指向的是堆里定义的字符串“hello”,所以这两个引用是不一样的。这里的str1指的是方法区的字符串常量池中的“hello”,编译时期就知道的;其中:类中静态块按照声明顺序执行,并且(1)和(2)不需要调用new类实例的时候就执行了(意思就是在类加载到方法区的时候执行的)题中父类初始化调用的方法为子类实现的方法,子类实现的方法中调用的baseName为子类中的私有属性。
2024-10-08 22:38:47
897
原创 牛客刷题day1
总的来说,执行的顺序是一致的。},java判断处为boolean类型,应该如j==3,j>1之类才行;(3)接口中常规的来说不能够定义方法体,所以无法通过get和set方法获取属性值,所以属性不属于对象,属于类(接口),因为默认使用static修饰。1.若catch(){}、finally{}块中,如果有throw 语句,则,try{}catch(){} finally{}块之外的代码不执行。(2)如果属性是基本数据类型,需要赋初始值,若是引用类型,也需要初始化,因为默认有final修饰,必须赋初始值;
2024-10-08 21:36:12
1010
原创 Redis启动时报错: Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
Redis启动时报错: Creating Server TCP listening socket 127.0.0.1:6379: bind: No error。这个错误说明已经开启了redis,并且已经占用了端口6379,需要停止redis后再开启。
2024-10-08 15:37:04
421
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅