- 博客(11)
- 收藏
- 关注
原创 【无标题】FastAPI + 异步SQLAlchemy 后端项目实战|模块化路由、ORM分层完整开发流程
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True, comment="主键id")2. db.get()、db.commit()、db.refresh()、db.execute() :会向MySQL发送请求,阻塞IO,必须添加await。bookname: Mapped[str] = mapped_column(String(100), comment="图书名称")
2026-07-26 14:16:08
203
原创 从零手写公共字段自动填充:自定义注解 + AOP + 反射 + ThreadLocal 完整落地(苍穹外卖业务实践)
市面上普遍使用 Mybatis-Plus 提供的MetaObjectHandler实现自动填充,但面试中经常会被追问:不使用 Mybatis-Plus,原生 Mybatis 如何手动实现公共字段自动填充?面试话术:项目中如果使用 Mybatis-Plus 可以直接用框架自带填充,但为了应对原生 Mybatis 场景、吃透底层原理,我在苍穹外卖中手动实现了 AOP 通用填充方案。Mybatis-Plus 自动填充:底层封装黑盒,面试容易被深挖底层原理,且原生 Mybatis 项目无法使用;
2026-06-26 23:12:51
203
原创 【无标题】Promise 和async/await之区别
日常开发中,异步操作无处不在(比如接口请求、定时器),而 Promise 和 async/await 就是 JavaScript 处理异步的核心方案。很多新手会混淆两者关系,其实一句话就能理清:async/await 是 Promise 的语法糖,底层依然依赖 Promise,只是写法更简洁、可读性更强。
2026-06-07 22:32:02
225
原创 Spring. Bean对象与设计模式饿/懒汉式之区别
目的 保证“类的对象只有1个” 控制“Bean的创建时机”(底层还是单例)二、Spring中:Bean的饿汉/懒汉加载(容器控制Bean创建时机)维度 设计模式的饿汉/懒汉单例 Spring中Bean的饿汉/懒汉加载。// 2. 类加载时就初始化实例(饿汉:提前准备好)// 3. 第一次调用时才创建实例(懒汉:延迟准备)// 懒汉式:第一次调用getInstance时才创建实例。一、设计模式:饿汉式/懒汉式单例(自己写单例类)// 容器启动时不创建,第一次用的时候才创建。// 2. 先声明实例(不初始化)
2026-05-28 23:00:39
212
原创 【无标题】集合嵌套List<Map<String, Object>> & 实体类 之优缺点
/ 写错key就报错。// 类型安全,不用强转。userList.add(new User(1, "张三", 20));userList.add(new User(2, "李四", 22));map1.put("username", "张三");map2.put("username", "李四");// 1. 直接造数据,不用写实体类。
2026-02-23 20:52:09
276
原创 两大返回值配置之区别
resultMap和resultType是 MyBatis 里最核心的两个返回值配置。resultType:自动映射,字段名一样就能自动对应。resultMap:手动映射,字段名不一样必须用它。数据库列名 和 Java实体类属性名 完全一样。缺点:名字不一样就映射不上,值为 null。1. resultType(自动映射)2. resultMap(手动映射)数据库列名 ≠ Java 属性名。-- 定义映射关系 -->优点:灵活、能处理复杂关系。一对一、一对多、多对多。
2026-02-17 20:42:00
58
原创 MyBatis/MyBatis-Plus 中的「SQL 参数索引越界异常问题所在及处理方法
但如果要让“孙”作为变量,就需要把通配符和变量分开,用 CONCAT() 拼接成完整的匹配规则(如 CONCAT('%', #{name}, '%') )——这一步就是将“变量占位符”从引号内抽离,通过函数动态拼接成查询条件。在SQL中进行字符串拼接操作,具体用了 CONCAT() 函数来拼接模糊查询的通配符( % ),属于动态模糊查询的参数拼接写法。以截图datagrip中的SQL语句为例,此时占位符出现在引号中,这时启动idea中的启动类就会出现日志中的情况。此时APIFOX接口便可以成功调试请求。
2025-12-19 15:18:05
211
原创 Java中PageHelper的拦截器实现机制
执行分页SQL后,将查询结果与总条数封装为 Page 对象(继承 ArrayList ),包含页码、页大小、总条数、总页数等信息,最后清除 ThreadLocal 中的参数。2. 拼接分页语法(MySQL用 limit ,Oracle用 rownum ),生成分页SQL(如 select * from user limit 0,10 );若开启 count 查询(默认开启),拦截器会生成总条数SQL(如 select count(*) from user ),单独执行获取总记录数。1. 解析原始SQL。
2025-12-17 21:52:03
329
1
原创 今日心得之JAVA平常使用日志输出时为什么不用拼接字符串
使用拼接日志字符串会在日志级别被关闭的情况下也会执行字符串拼接操作,造成不必要的性能开销。
2025-11-21 21:25:09
129
原创 JAVA使用日志,为什么一定要用门面API记录日志[特殊字符]
public void test() { logger.info("直接使用Log4j2 API");若要切换为 Logback 框架,需要修改所有import和日志对象的创建方式,费时费力。
2025-11-20 23:46:39
158
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅