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 对比
| 维度 | MyBatis | JPA |
|---|---|---|
| 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。
相关课程
练习
- 写一条 JOIN 查询:track + lesson 数量