在 Java Web 开发中,数据库操作是非常重要的一部分。
早期我们使用 JDBC 直接操作数据库,但 JDBC 存在代码冗余、维护困难等问题,因此出现了很多 ORM 框架,其中 MyBatis 是目前非常流行的持久层框架之一。


一、什么是 MyBatis

MyBatis 是一个 优秀的持久层框架,用于简化 Java 程序与数据库之间的交互。

MyBatis 的主要作用:

将 Java 对象与 SQL 语句进行映射,实现数据库操作。

简单来说:

Java对象  ←→  SQL语句  ←→  数据库

MyBatis 通过 XML 或注解 来管理 SQL,使开发者可以更加灵活地控制 SQL。


二、为什么使用 MyBatis

在 MyBatis 出现之前,很多项目使用 JDBC 操作数据库。

使用 JDBC 的问题:

  1. SQL 语句写在 Java 代码中,维护困难

  2. 大量重复代码(连接数据库、关闭资源)

  3. ResultSet 手动封装对象比较麻烦

例如 JDBC 查询代码:

Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement ps = conn.prepareStatement("select * from user");
ResultSet rs = ps.executeQuery();

while(rs.next()){
    System.out.println(rs.getString("name"));
}

代码复杂且重复。

而 MyBatis 可以简化为:

List<User> list = userMapper.findAll();

大大提高开发效率。


三、MyBatis 的核心思想

MyBatis 的核心是:

SQL 与 Java 对象映射

映射关系:

数据库表  →  Java对象
表字段    →  对象属性
SQL语句   →  Mapper方法

示例:

数据库表

user
id
name
age

Java 对象

public class User {
    private Integer id;
    private String name;
    private Integer age;
}

SQL 映射:

<select id="findAll" resultType="User">
    select * from user
</select>

四、MyBatis 核心组件

MyBatis 的核心组件包括:

1 SqlSessionFactory

作用:

创建 SqlSession 对象

通常在项目启动时创建。


2 SqlSession

作用:

执行 SQL

常用方法:

  • selectOne()

  • selectList()

  • insert()

  • update()

  • delete()

示例:

SqlSession session = factory.openSession();
List<User> list = session.selectList("findAll");

3 Mapper 接口

Mapper 用于定义数据库操作方法。

例如:

public interface UserMapper {

    List<User> findAll();

    User findById(int id);

    int insert(User user);
}

4 Mapper XML

用于编写 SQL。

<select id="findAll" resultType="User">
    select * from user
</select>

五、MyBatis 环境配置

1 引入依赖

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.13</version>
</dependency>

2 创建配置文件

mybatis-config.xml

<configuration>

    <environments default="development">
        <environment id="development">

            <transactionManager type="JDBC"/>

            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>

        </environment>
    </environments>

</configuration>

3 创建 Mapper

public interface UserMapper {

    List<User> findAll();

}

4 编写 Mapper XML

<mapper namespace="com.mapper.UserMapper">

    <select id="findAll" resultType="User">
        select * from user
    </select>

</mapper>

5 测试代码

SqlSession sqlSession = sqlSessionFactory.openSession();

UserMapper mapper = sqlSession.getMapper(UserMapper.class);

List<User> list = mapper.findAll();

System.out.println(list);

六、MyBatis 常用标签

1 select

查询数据

<select id="findById" resultType="User">
    select * from user where id = #{id}
</select>

2 insert

插入数据

<insert id="insert">
    insert into user(name,age) values(#{name},#{age})
</insert>

3 update

更新数据

<update id="update">
    update user set name=#{name},age=#{age} where id=#{id}
</update>

4 delete

删除数据

<delete id="delete">
    delete from user where id=#{id}
</delete>

七、MyBatis 动态 SQL

MyBatis 支持动态 SQL。

常用标签:

标签作用
if条件判断
where自动添加 where
set更新字段
foreach循环

示例

<select id="findUser" resultType="User">
    select * from user
    <where>
        <if test="name != null">
            name like concat('%',#{name},'%')
        </if>
    </where>
</select>

八、MyBatis 优点

优点:

  1. SQL 与代码分离

  2. 支持动态 SQL

  3. 学习成本低

  4. 灵活性高

  5. 与 Spring 集成方便


九、MyBatis 缺点

缺点:

  1. SQL 需要自己编写

  2. 大型项目 SQL 文件较多

  3. 不适合复杂 ORM 场景


十、MyBatis 面试高频问题

1 MyBatis 和 JDBC 区别?

回答:

MyBatis 是一个持久层框架,对 JDBC 进行了封装,可以自动完成数据库连接管理、SQL 执行和结果映射,从而减少大量重复代码,提高开发效率。


2 #{} 和 ${} 的区别?

写法区别
#{}预编译,防止 SQL 注入
${}字符串拼接,存在 SQL 注入风险

推荐使用:

#{}

3 MyBatis 一级缓存和二级缓存?

一级缓存:

SqlSession 级别

二级缓存:

Mapper 级别

十一、总结

MyBatis 是 Java 后端开发中最常用的持久层框架之一。

核心特点:

  • SQL 与代码分离

  • 灵活控制 SQL

  • 与 Spring 生态兼容

在实际项目中,MyBatis 常常与:

  • Spring

  • Spring Boot

  • MyBatis-Plus

一起使用,构成完整的开发框架。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐