MyBatis 快速开始

本节用"原生方式"跑通第一个 MyBatis 程序:不借助 Spring,直接用 SqlSessionFactoryBuilder 构建 SqlSessionFactory,再用 SqlSession 对一张 user 表做增删改查,先看清 MyBatis 最底层的运行链路。

1. 添加依赖

在 pom.xml 引入 mybatis(主线 3.5.x,要求 Java 8+,小版本以官方文档为准)与数据库驱动(MySQL 用 com.mysql:mysql-connector-j):

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.x</version>
</dependency>
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.x</version>
</dependency>

2. 建表与实体类

准备 user 表和对应 POJO(getter/setter 省略,IDE 可生成):

CREATE TABLE `user` (
  `id`   INT PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `age`  INT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
public class User {
    private Integer id;
    private String name;
    private Integer age;
    // 省略 getter/setter(IDE 可自动生成)
}

3. 全局配置 mybatis-config.xml

放在 classpath 根目录(src/main/resources/mybatis-config.xml):environments 定义连接环境,mappers 注册映射文件。

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

4. 编写 Mapper XML

每条语句用对应标签声明,namespace 唯一命名整组语句;#{id} 是预编译占位符,按参数属性取值(详见第 5 章)。

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectById" resultType="com.example.entity.User">
        SELECT id, name, age FROM user WHERE id = #{id}
    </select>
    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO user(name, age) VALUES(#{name}, #{age})
    </insert>
    <update id="update">UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}</update>
    <delete id="delete">DELETE FROM user WHERE id = #{id}</delete>
</mapper>

5. 用 Java 代码执行 CRUD

下面是一个完整类(User 放在 com.example.entity 包;运行前补上 import:org.apache.ibatis.io.Resources、org.apache.ibatis.session.*):

public class QuickStart {
    public static void main(String[] args) throws Exception {
        // 1) 构建 SqlSessionFactory:整个应用只建一次,应做成单例
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        // 2) 每次"一批操作"开一个 SqlSession;true 表示自动提交
        try (SqlSession session = factory.openSession(true)) {
            // 查询:语句全名 = namespace + "." + id
            User u = session.selectOne("com.example.mapper.UserMapper.selectById", 1);
            System.out.println(u.getName()); // 输出:张三

            // 新增:useGeneratedKeys 把自增主键写回对象的 id 字段
            User nu = new User();
            nu.setName("李四");
            nu.setAge(20);
            session.insert("com.example.mapper.UserMapper.insert", nu);
            System.out.println(nu.getId()); // 输出:2

            nu.setName("李四改"); // 修改与删除
            session.update("com.example.mapper.UserMapper.update", nu);
            session.delete("com.example.mapper.UserMapper.delete", 2);
        } // try 结束自动 close,连接归还连接池
    }
}

运行 main 即可看到日志中的多次 SQL,增删改查全部生效。

小结

原生方式 = mybatis-config.xml + Mapper XML + SqlSessionFactory + SqlSession,四步跑通 CRUD。执行链路上:Builder 解析 XML 生成语句对象 → openSession 拿连接 → 语句执行时预编译 SQL、绑定参数、映射结果 → close 归还连接。后续章节逐个深入这些部件。

笔记加载中…