MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
MyBatis 简介
MyBatis 的核心是一个持久层映射器(Mapper),它定义了 SQL 语句和参数到 Java 对象的映射。MyBatis 通过 XML 配置文件或注解来定义映射规则,这使得 SQL 语句和 Java 代码分离,提高了代码的可读性和可维护性。
入门指南
1. 环境搭建
要开始使用 MyBatis,首先需要搭建 Java 开发环境,并添加 MyBatis 依赖。
1.1 创建 Maven 项目
使用 Maven 来管理项目依赖。在 pom.xml 文件中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
</dependencies>
1.2 配置数据库连接
在 application.properties 或 application.yml 中配置数据库连接信息:
# application.properties
jdbc.url=jdbc:mysql://localhost:3306/mydatabase
jdbc.username=root
jdbc.password=root
jdbc.driver=com.mysql.cj.jdbc.Driver
2. 定义 Mapper 接口
创建一个接口,定义方法来操作数据库:
public interface UserMapper {
User getUserById(int id);
void addUser(User user);
}
3. 创建 XML 映射文件
为 UserMapper 接口创建一个对应的 XML 映射文件,定义 SQL 语句:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.entity.User">
SELECT * FROM users WHERE id = #{id}
</select>
<insert id="addUser">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>
</mapper>
4. 配置 SqlSessionFactory
创建 SqlSessionFactory 用于创建 SqlSession,这是 MyBatis 的核心对象:
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
5. 使用 MyBatis
使用 SqlSession 执行数据库操作:
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user.getName());
}
进阶实践
1. 动态 SQL
MyBatis 支持动态 SQL,可以动态构建 SQL 语句:
<select id="findUsersByCondition" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
2. 插入、更新和删除
MyBatis 提供了简单的 insert、update 和 delete 操作:
<insert id="addUser" parameterType="User">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>
<update id="updateUser" parameterType="User">
UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
3. 关联和嵌套查询
MyBatis 支持复杂的关联和嵌套查询,可以轻松地处理一对多、多对多等关系:
<select id="getUserWithRoles" resultMap="UserWithRolesMap">
SELECT u.*, r.*
FROM users u
LEFT JOIN user_roles ur ON u.id = ur.user_id
LEFT JOIN roles r ON ur.role_id = r.id
WHERE u.id = #{id}
</select>
<resultMap id="UserWithRolesMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<collection property="roles" ofType="Role">
<id property="id" column="role_id"/>
<result property="name" column="role_name"/>
</collection>
</resultMap>
总结
通过本指南,你学习了如何从入门到精通 MyBatis。MyBatis 是一个功能强大的框架,可以帮助你更高效地完成 Java 数据库操作。通过实践和探索,你可以进一步掌握 MyBatis 的更多高级特性,为你的项目带来更高的效率和质量。
