MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
MyBatis 简介
MyBatis 遵循约定优于配置( Convention Over Configuration)的原则,使得配置和映射更为简单。它支持自定义 SQL、存储过程以及高级映射,比如关联、继承等。
MyBatis 的核心组件
- SqlSessionFactory:生产 SqlSession 的工厂类。
- SqlSession:可以执行 SQL 语句并返回结果的对象。
- Executor:MyBatis 的核心接口,负责执行查询、更新、删除等操作。
- MappedStatement:存储 Mapper 文件的 SQL 语句和参数。
- SqlSource:提供 SQL 语句的来源。
MyBatis 深度解析
MyBatis 配置
MyBatis 的配置主要包括:
- 数据源配置:配置数据库连接信息,如 JDBC URL、用户名、密码等。
- 事务管理配置:配置事务管理器,如 JDBC 或 CGLIB。
- 环境配置:配置不同的开发、测试和生产环境。
- 映射器配置:配置 Mapper 接口和 XML 映射文件。
MyBatis 映射
MyBatis 映射主要分为以下几种:
- 静态映射:在 XML 文件中直接编写 SQL 语句。
- 动态映射:使用 SQL片段和动态 SQL 来构建 SQL 语句。
- 存储过程映射:通过 MyBatis 的插件机制来实现。
- 关联映射:处理一对多、多对一、一对一的关联关系。
MyBatis 缓存
MyBatis 提供了两种类型的缓存:
- 一级缓存:SqlSession 级别的缓存,用于存储同一个 SqlSession 中相同 SQL 语句的结果。
- 二级缓存:全局级别的缓存,用于存储相同 SQL 语句在不同 SqlSession 中的结果。
MyBatis 实战案例
1. 添加用户
假设我们有一个 User 表,包含 id、username 和 password 字段。下面是使用 MyBatis 添加用户的示例:
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<insert id="insertUser" parameterType="User">
INSERT INTO user(username, password) VALUES (#{username}, #{password})
</insert>
</mapper>
// UserMapper.java
public interface UserMapper {
void insertUser(User user);
}
2. 查询用户
下面是使用 MyBatis 查询用户的示例:
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUserById" resultType="User">
SELECT id, username, password FROM user WHERE id = #{id}
</select>
</mapper>
// UserMapper.java
public interface UserMapper {
User selectUserById(int id);
}
3. 更新用户
下面是使用 MyBatis 更新用户的示例:
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<update id="updateUser" parameterType="User">
UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
</mapper>
// UserMapper.java
public interface UserMapper {
void updateUser(User user);
}
4. 删除用户
下面是使用 MyBatis 删除用户的示例:
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
// UserMapper.java
public interface UserMapper {
void deleteUser(int id);
}
通过以上实战案例,我们可以看到 MyBatis 在实际开发中的应用。掌握 MyBatis 的配置、映射和缓存机制,将有助于提高我们的开发效率。
