MyBatis 是一款优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis 简介
MyBatis 本是 Apache 的一个开源项目,但后来在 2013 年 11 月 26 日,MyBatis 官方网站宣布 MyBatis 3.2.0 正式成为 Apache 软件基金会的一部分。MyBatis 的设计哲学是保持简单,但功能强大。它支持定制化 SQL、存储过程以及高级映射。
MyBatis 核心概念
1. Mapper 接口
Mapper 接口定义了数据库操作的接口,MyBatis 会根据接口的方法名称和参数类型动态生成 SQL 语句。
public interface UserMapper {
User selectById(Integer id);
int updateNameById(User user);
}
2. Mapper XML
Mapper XML 文件包含了 SQL 语句的定义,它与 Mapper 接口相对应。在 XML 文件中,你可以使用 SQL 语句、参数、结果集映射等。
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectById" resultType="com.example.entity.User">
SELECT * FROM users WHERE id = #{id}
</select>
<update id="updateNameById">
UPDATE users SET name = #{name} WHERE id = #{id}
</update>
</mapper>
3. SqlSessionFactory
SqlSessionFactory 是 MyBatis 的核心接口,它负责创建 SqlSession 对象。SqlSession 是 MyBatis 的会话,它包含了面向数据库执行 SQL 命令的方法。
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
4. SqlSession
SqlSession 提供了执行 SQL 命令的方法,如 selectOne()、selectList()、insert()、update() 和 delete()。
User user = sqlSession.selectOne("com.example.mapper.UserMapper.selectById", 1);
MyBatis 核心技巧
1. 动态 SQL
MyBatis 支持动态 SQL,可以在 XML 文件中根据条件动态地拼接 SQL 语句。
<select id="selectUsers" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
name = #{name}
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>
2. 关联映射
MyBatis 支持复杂的关联映射,如一对一、一对多、多对多等。
<resultMap id="userResultMap" type="User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="email" column="email" />
<collection property="orders" ofType="Order">
<id property="id" column="id" />
<result property="orderNumber" column="orderNumber" />
<result property="orderDate" column="orderDate" />
</collection>
</resultMap>
3. 缓存机制
MyBatis 提供了两种缓存机制:一级缓存和二级缓存。
- 一级缓存:会话级别的缓存,默认开启。
- 二级缓存:全局缓存,需要手动开启。
<settings>
<setting name="cacheEnabled" value="true" />
</settings>
4. 分页插件
MyBatis 支持分页插件,如 PageHelper。
PageHelper.startPage(1, 10);
List<User> users = sqlSession.selectList("com.example.mapper.UserMapper.selectUsers");
总结
MyBatis 是一款功能强大且易于使用的持久层框架。通过掌握 MyBatis 的核心概念和技巧,你可以高效地实现数据库操作。在开发过程中,结合实际需求灵活运用 MyBatis,将大大提高你的开发效率。
