← 返回笔记

学习笔记

MyBatis 入门:从 JDBC 到 ORM

2026-08-18 09:00 MyBatisMySQL

对比原生 JDBC 的样板代码、硬编码 SQL 与手写映射,梳理 MyBatis 的核心价值。

MyBatis 入门:从 JDBC 到 ORM

来源:数据库访问框架技术课程 + 大二下学期笔记 · 整理:婉萤

先记住 JDBC 的痛

写过原生的 JDBC 再回头看,它有三个硬伤:

  1. 连接创建/关闭的样板代码占了一半篇幅
  2. SQL 硬编码在 Java 字符串里,改一条语句要重新编译
  3. 结果集到对象的映射全靠手写 rs.getString("name"),字段一多就是灾难

MyBatis 就是来治这三处的。

三件套结构

mybatis-config.xml —— 核心配置:数据源、事务、Mapper 注册:

<environments default="mysql_conn">
  <environment id="mysql_conn">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
      <property name="driver" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://localhost:3306/db?serverTimezone=Asia/Shanghai"/>
    </dataSource>
  </environment>
</environments>

Mapper XML —— SQL 的家,与 DAO 接口一一对应:

<mapper namespace="com.ts.dao.PersonDao">
  <select id="findByName" resultType="com.ts.entity.Person">
    SELECT * FROM person WHERE name LIKE CONCAT('%', #{name}, '%')
  </select>
</mapper>

DAO 接口 —— 只声明方法,实现由框架动态代理生成。

学习路径上的关键节点

  • 参数传递:单参数、多参数(@Param)、Map、对象
  • 动态 SQL<if> / <where> / <foreach>——按条件拼查询不写一堆 if 拼字符串
  • 关联映射:一对多(Emp-Classes)、多对一、一对一(Idcard-People),自定义 ResultMap
  • 日志:log4j 配置 log4j.logger.com.ts.dao=TRACE,SQL 执行一目了然

踩坑记录

  • mybatis-config.xml 的 URL 里 & 必须写成 &amp;,否则解析报错
  • Mapper 的 namespace 必须与 DAO 接口全限定名一致,resource 路径用 / 不用 .

配套练习:MybatisDemo(10+ 组映射、动态 SQL、多表关联)、Snack_TestProject(多表 + 中间表关联)。