首页技术栈归档照片墙音乐日记随想收藏夹友链留言关于

MyBatis 基础入门

写作时间:2026-07-08

MyBatis 基础入门

MyBatis 简介

MyBatis 是一款优秀的持久层框架,支持自定义 SQL、存储过程及高级映射。与 Hibernate 的全自动 ORM 不同,MyBatis 让开发者直接编写 SQL,对查询优化有完全控制权。

核心组件

组件 说明
SqlSessionFactory 创建 SqlSession 的工厂
SqlSession 执行 SQL、获取 Mapper、管理事务
Mapper 接口 映射 SQL 的 Java 接口
Mapper XML 存放 SQL 的 XML 文件
Configuration MyBatis 全局配置对象

环境搭建

Maven 依赖

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.15</version>
</dependency>
<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <version>8.3.0</version>
</dependency>

mybatis-config.xml

<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="mapper/UserMapper.xml"/>
  </mappers>
</configuration>

第一个例子

UserMapper.java

public interface UserMapper {
  User selectById(Long id);
  List<User> selectAll();
  int insert(User user);
  int update(User user);
  int delete(Long id);
}

UserMapper.xml

<mapper namespace="com.example.mapper.UserMapper">
  <select id="selectById" resultType="com.example.entity.User">
    SELECT * FROM user WHERE id = #{id}
  </select>
</mapper>

执行

String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
try (SqlSession session = factory.openSession()) {
  UserMapper mapper = session.getMapper(UserMapper.class);
  User user = mapper.selectById(1L);
}

#{ } 与 ${ }

符号 说明 安全性
#{ } 预编译占位符,自动加引号 防注入
${ } 直接拼接字符串 有风险
<!-- 安全:PreparedStatement 占位符 -->
SELECT * FROM user WHERE name = #{name}

<!-- 必要场景:动态表名/排序(需白名单校验) -->
SELECT * FROM ${tableName} ORDER BY ${column} ${direction}
avatar

yuanyourdomain

写代码,做研究,记录生活。

RECOMMENDED

MyBatis 动态 SQL

2026-07-08

Nginx 基础入门

2026-07-08

Maven 多模块与私服

2026-07-08