CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
ORM 与数据库设计/课时/MyBatis
RawBlame
课时目录12 节

ORM 与数据库设计

  1. 01ORM 是什么
  2. 02范式与规范化
  3. 03ER 模型
  4. 04JPA 与 Hibernate
  5. 05MyBatis
  6. 06Spring Data 家族
  7. 07Schema 迁移
  8. 08N+1 与抓取策略
  9. 09MariaDB 与 MySQL
  10. 10ORM 与事务
  11. 11反模式
  12. 12综合练习

MyBatis

Mapper XML、何时选 MyBatis vs JPA。

35 分钟

MyBatis

MyBatis 是「半自动 ORM」:Java 接口 + XML(或注解)写 SQL,框架负责参数绑定与结果映射。CodeRoadMap 后端在复杂查询、批量操作上常用 MyBatis。

学习目标

  • 读懂 Mapper 接口与 XML 结构
  • 映射 cf_track / cf_lesson 查询
  • 判断 MyBatis vs JPA 选型

Mapper 接口

@Mapper
public interface TrackMapper {

    Track selectBySlug(@Param("slug") String slug);

    List<Lesson> selectLessonsByTrackId(@Param("trackId") Long trackId);

    int insertTrack(Track track);
}

XML 映射

<!-- resources/mapper/TrackMapper.xml -->
<select id="selectBySlug" resultType="com.example.Track">
  SELECT id, slug, title, category
  FROM cf_track
  WHERE slug = #{slug}
</select>

<select id="selectLessonsByTrackId" resultType="com.example.Lesson">
  SELECT id, track_id, slug, title, order_index
  FROM cf_lesson
  WHERE track_id = #{trackId}
  ORDER BY order_index
</select>

#{} 预编译防注入;${} 仅用于动态表名/排序(慎用)。

与 JPA 对比

维度MyBatisJPA
SQL 控制完全手写多数自动生成
学习成本会 SQL 即上手注解 + 抓取策略
复杂 JOIN自然有时需 @Query / native
对象图手动组装@OneToMany 导航

建议:域模型 CRUD 用 JPA;统计、动态 SQL、遗留库用 MyBatis。勿同一实体两套不一致字段。

与 Spring Boot 集成

依赖 mybatis-spring-boot-starter,配置:

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.domain

对照 sb-jdbc 理解底层仍是 JDBC。

相关课程

  • sql-join
  • orm-jpa
  • sb-transaction

练习

  • 写一条 JOIN 查询:track + lesson 数量
GROUP BY track_id
  • 在 backend 搜索 Mapper.xml,找一条动态 <if> 条件
  • 列出你会选 MyBatis 的两个本站场景
  • 小结

    MyBatis = SQL 你写,映射框架做。 下一课看 Spring Data 全家桶如何统一 Repository 风格。

    加载本节练习…
    ← 上一课JPA 与 Hibernate下一课 →Spring Data 家族