返回 随笔记录
随笔记录

七、持久层框架

博主
大约 8 分钟

七、持久层框架

范围:MyBatis、JPA/Hibernate、JDBC、连接池、DAO架构、分库分表 知识点数量:198项 返回总目录


7.1 MyBatis

7.1.1 基础使用

  • 734. SqlSessionFactory - 掌握会话工厂创建,理解单例模式
  • 735. SqlSession - 掌握会话使用,理解非线程安全
  • 736. Mapper接口 - 掌握Mapper代理,理解动态代理原理
  • 737. XML映射 - 掌握resultMap,理解嵌套查询和嵌套结果
  • 738. 注解映射 - 掌握@Select/@Insert/@Update/@Delete
  • 739. 参数传递 - 掌握@param和Map,理解单个参数处理
  • 740. 结果映射 - 掌握自动映射和手动映射,理解驼峰配置
  • 741. 动态SQL - 掌握if/choose/when/otherwise/foreach/where/set
  • 742. sql片段 - 掌握include引用,理解SQL复用
  • 743. 多表联查 - 掌握association和collection

7.1.2 高级特性

  • 744. 一级缓存 - 掌握SqlSession级缓存,理解BaseExecutor
  • 745. 二级缓存 - 掌握namespace级缓存,理解CachingExecutor
  • 746. 插件机制 - 掌握Interceptor,理解@Intercepts和@Signature
  • 747. PageHelper分页 - 掌握分页插件,理解物理分页和逻辑分页
  • 748. 类型处理器 - 掌握TypeHandler,理解枚举和JSON处理
  • 749. 批量操作 - 掌握ExecutorType.BATCH,理解JDBC批处理
  • 750. 多数据源 - 掌握动态数据源,理解AbstractRoutingDataSource
  • 751. 延迟加载 - 掌握lazyLoadingEnabled,理解按需加载
  • 752. 自定义缓存 - 掌握Cache接口,理解Redis二级缓存
  • 753. MyBatis-Plus - 掌握BaseMapper,理解代码生成器
  • 754. 逻辑删除 - 掌握@TableLogic,理解软删除
  • 755. 自动填充 - 掌握MetaObjectHandler,理解创建时间填充

7.1.3 源码原理

  • 756. 解析器模块 - 掌握XML解析,理解XPathParser
  • 757. SQL解析 - 掌握SqlSource,理解DynamicSqlSource和RawSqlSource
  • 758. 反射工具 - 掌握Reflector,理解反射增强
  • 759. 绑定模块 - 掌握MapperProxy,理解MapperMethod
  • 760. 执行器 - 掌握SimpleExecutor/ReuseExecutor/BatchExecutor
  • 761. 事务管理 - 掌握JdbcTransaction和ManagedTransaction
  • 762. 配置加载 - 掌握XMLConfigBuilder,理解配置解析顺序
  • 763. 插件原理 - 理解责任链模式,掌握四大对象拦截

7.2 JPA/Hibernate

7.2.1 实体映射

  • 764. @Table/@Column - 掌握表字段映射,理解nullable/unique/length
  • 765. @Temporal - 掌握日期映射,理解DATE/TIME/TIMESTAMP
  • 766. @Enumerated - 掌握枚举映射,理解ORDINAL/STRING
  • 767. @Lob - 掌握大对象映射,理解CLOB/BLOB
  • 768. @Embedded - 掌握嵌入对象,理解@AttributeOverride
  • 769. @MappedSuperclass - 掌握继承映射,理解基类设计
  • 770. 复合主键 - 掌握@IdClass和@EmbeddedId
  • 771. 继承策略 - 掌握SINGLE_TABLE/JOINED/TABLE_PER_CLASS
  • 772. @Formula - 掌握公式字段,理解只读属性
  • 773. @Generated - 掌握数据库生成值

7.2.2 关联映射

  • 774. fetch策略 - 掌握EAGER vs LAZY,理解N+1问题
  • 775. cascade类型 - 掌握PERSIST/MERGE/REMOVE/REFRESH/DETACH
  • 776. orphanRemoval - 掌握孤儿删除,理解级联区别
  • 777. N+1问题 - 掌握JOIN FETCH优化,理解@BatchSize
  • 778. @EntityGraph - 掌握实体图,理解命名实体图
  • 779. 双向关联 - 掌握mappedBy,理解关系维护方
  • 780. @OrderBy - 掌握集合排序
  • 781. @Where - 掌握过滤条件,理解软删除

7.2.3 Hibernate进阶

  • 782. 一级缓存 - 掌握Session缓存,理解快照对比
  • 783. 二级缓存 - 掌握Hibernate缓存,理解Ehcache/Redis集成
  • 784. 脏检查 - 掌握变更检测,理解flush机制
  • 785. 批量操作 - 掌握JDBC批处理,理解hibernate.jdbc.batch_size
  • 786. 自定义类型 - 掌握UserType,理解复合类型
  • 787. 拦截器 - 掌握Interceptor,理解事件监听
  • 788. 多租户 - 掌握MultiTenancy,理解DATABASE/SCHEMA/DISCRIMINATOR
  • 789. 悲观锁 - 掌握LockModeType.PESSIMISTIC_WRITE
  • 790. 查询优化 - 掌握Query Hint,理解fetch size
  • 791. 自然ID - 掌握@NaturalId,理解业务主键

7.3 JDBC与连接池

7.3.1 JDBC基础

  • 792. DriverManager - 掌握驱动加载,理解SPI机制
  • 793. Connection - 掌握连接获取,理解AutoCommit
  • 794. Statement - 掌握SQL执行,理解SQL注入风险
  • 795. PreparedStatement - 掌握预编译SQL,理解参数化查询
  • 796. CallableStatement - 掌握存储过程,理解IN/OUT参数
  • 797. ResultSet - 掌握结果集处理,理解TYPE_FORWARD_ONLY
  • 798. 事务管理 - 掌握手动事务,理解savepoint
  • 799. 元数据 - 掌握DatabaseMetaData和ResultSetMetaData
  • 800. 大数据处理 - 掌握setFetchSize,理解流式查询
  • 801. 批量更新 - 掌握addBatch/executeBatch

7.3.2 连接池

  • 802. HikariCP - 掌握高性能连接池,理解FastList和ConcurrentBag
  • 803. Druid - 掌握监控功能,理解WallFilter和StatFilter
  • 804. 连接池配置 - 掌握maximumPoolSize、connectionTimeout、idleTimeout
  • 805. 连接泄漏检测 - 掌握leakDetectionThreshold,理解泄漏追踪
  • 806. 连接池监控 - 掌握指标暴露,理解活跃/空闲连接数
  • 807. 动态数据源 - 掌握AbstractRoutingDataSource,理解路由键
  • 808. 连接验证 - 掌握connectionTestQuery,理解validationTimeout
  • 809. 连接池对比 - 理解HikariCP vs Druid vs Tomcat JDBC
  • 810. 连接池调优 - 掌握 sizing公式,理解CPU核心数与连接数关系

7.4 持久层架构

7.4.1 DAO模式

  • 811. DAO设计 - 掌握数据访问对象,理解接口+实现分离
  • 812. Repository模式 - 掌握仓储模式,理解集合语义
  • 813. 通用DAO - 掌握BaseDao,理解泛型DAO
  • 814. 代码生成 - 掌握MyBatis Generator/JOOQ,理解逆向工程
  • 815. 多表查询 - 掌握联表查询,理解INNER/LEFT/RIGHT JOIN
  • 816. 复杂查询 - 掌握子查询和联合查询,理解UNION
  • 817. 分页查询 - 掌握LIMIT/OFFSET,理解深分页问题
  • 818. 批量操作 - 掌握批量插入/更新/删除
  • 819. 审计字段 - 掌握创建时间/更新时间/创建人
  • 820. 软删除 - 掌握is_deleted标记,理解逻辑删除

7.4.2 性能优化

  • 821. 分页优化 - 掌握limit偏移优化,理解游标分页
  • 822. 批量插入 - 掌握批量处理,理解MyBatis foreach批量
  • 823. 读写分离 - 掌握主从切换,理解动态数据源路由
  • 824. 分库分表 - 掌握ShardingSphere,理解分片算法
  • 825. 慢查询优化 - 掌握执行计划,理解索引优化
  • 826. 缓存策略 - 掌握查询缓存,理解二级缓存
  • 827. 连接池优化 - 掌握连接复用,理解超时配置
  • 828. SQL优化 - 掌握EXPLAIN分析,理解索引覆盖
  • 829. 字段优化 - 掌握SELECT *问题,理解按需查询
  • 830. 大字段处理 - 掌握TEXT/BLOB延迟加载

7.4.3 分库分表

  • 831. ShardingSphere-JDBC - 掌握轻量级分片,理解Java Agent
  • 832. ShardingSphere-Proxy - 掌握数据库代理,理解透明分片
  • 833. 分片策略 - 掌握inline/standard/complex/hint分片
  • 834. 分布式主键 - 掌握Snowflake/UUID/Leaf,理解主键生成
  • 835. 分片算法 - 掌握Hash/Range/List分片
  • 836. 广播表 - 掌握全库同步,理解字典表
  • 837. 绑定表 - 掌握关联分片,理解避免跨库JOIN
  • 838. 读写分离 - 掌握主从路由,理解负载均衡
  • 839. 数据迁移 - 掌握双写迁移,理解数据校验
  • 840. 全局表 - 掌握配置表同步,理解一致性维护

进度统计

  • 领域:持久层框架
  • 知识点总数:198项
  • 已完成:0项
  • 待完成:198项

实战项目建议

  • 项目1:通用DAO封装 - 基于MyBatis封装通用CRUD、分页、批量操作
  • 项目2:分库分表实战 - 使用ShardingSphere实现订单表分库分表
  • 项目3:数据迁移工具 - 实现从单体数据库到分片数据库的在线迁移工具

常见面试问题

  • MyBatis一级缓存和二级缓存的区别?什么场景下二级缓存会失效?
  • Hibernate的N+1问题是什么?如何解决?
  • HikariCP为什么快?核心优化点有哪些?
  • 分库分表后如何解决跨库JOIN和分布式事务?
  • MyBatis插件原理?四大对象可以拦截哪些方法?

推荐学习资源

  • 书籍:《MyBatis源码分析》《JPA持久层开发实战》《ShardingSphere原理与实践》
  • 视频:极客时间《MyBatis源码深度剖析》《分库分表实战》
  • 官方:MyBatis官方文档、Hibernate官方文档、ShardingSphere官方文档

返回总目录

知识点测试

读完文章了?来测试一下你对知识点的掌握程度吧!

评论区

使用 GitHub 账号登录后即可发表评论,支持 Markdown 格式。

如果评论系统无法加载,请确保:

  • 您的网络可以访问 GitHub
  • giscus GitHub App 已安装到仓库
  • 仓库已启用 Discussions 功能