Mybatis 手撸专栏
第3章:实现映射器的注册和使用
欢迎来到《Mybatis 手撸专栏》的第3章!在本章中,我们将深入探讨如何实现 Mybatis 映射器的注册和使用。映射器是 Mybatis 中负责定义数据库访问方法和 SQL 语句映射的接口,通过映射器,我们可以更方便地进行数据库操作。
在本文中,我将向您展示如何手动实现 Mybatis 映射器的注册和使用,并提供示例代码以供参考。
1. 映射器接口定义
首先,让我们定义一个映射器接口,用于访问数据库中的用户信息。假设我们有一个 User
实体类,其包含 id
和 name
属性。我们将创建一个名为 UserMapper
的接口,并在其中定义一些常用的数据库访问方法。
public interface UserMapper {
User getUserById(int id);
List<User> getAllUsers();
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
在上述接口中,我们定义了获取单个用户信息、获取所有用户信息、插入用户信息、更新用户信息以及删除用户的方法。这些方法将用于执行对应的 SQL 语句。
2. 映射器 XML 文件
接下来,让我们编写映射器的 XML 文件,其中包含了 SQL 语句以及结果映射配置。对于 UserMapper
接口,我们创建一个名为 UserMapper.xml
的映射文件。
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="getAllUsers" resultType="com.example.model.User">
SELECT * FROM user
</select>
<insert id="insertUser">
INSERT INTO user (id, name) VALUES (#{id}, #{name})
</insert>
<update id="updateUser">
UPDATE user SET name = #{name} WHERE id = #{id}
</update>
<delete id="deleteUser">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
在上述 XML 文件中,我们使用了 <mapper>
标签指定了映射器的命名空间,并使用了不同的 SQL 标签定义了对应的 SQL 语句。注意,我们通过 id
属性为每个标签指定了唯一的标识符,以便在 Java 代码中进行调用。此外,我们还使用 resultType
属性定义了返回结果的类型。
3. 映射器注册和使用
3.1 映射器注册
在使用映射器之前,我们需要将其注册到 Mybatis 的配置中,以便让 Mybatis 知道我们要使用哪个映射器。在注册映射器之前,先让我们创建一个名为 MybatisConfig.xml
的配置文件。
<!-- MybatisConfig.xml -->
<configuration>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
在上述配置文件中,我们使用了 <mappers>
标签来定义要注册的映射器。在本例中,我们通过 <mapper>
标签的 resource
属性指定了映射器 XML 文件的路径。
接下来,在我们的 Java 代码中,我们需要加载这个配置文件并创建 SqlSessionFactory
对象,以便创建数据库会话。
public class MybatisApp {
public static void main(String[] args) throws IOException {
// 加载 Mybatis 配置文件
InputStream inputStream = Resources.getResourceAsStream("MybatisConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 获取映射器代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 使用映射器方法进行数据库操作
User user = userMapper.getUserById(1);
System.out.println(user);
List<User> userList = userMapper.getAllUsers();
System.out.println(userList);
User newUser = new User(2, "John Doe");
userMapper.insertUser(newUser);
newUser.setName("Jane Doe");
userMapper.updateUser(newUser);
userMapper.deleteUser(2);
// 提交事务并关闭 SqlSession
sqlSession.commit();
sqlSession.close();
}
}
首先,我们加载了 MybatisConfig.xml
配置文件,并使用 SqlSessionFactoryBuilder
构建了 SqlSessionFactory
对象。然后,我们通过 SqlSessionFactory
创建了 SqlSession
对象。
接着,我们使用 SqlSession
对象的 getMapper()
方法获取了映射器的代理对象。这样,我们就可以直接调用映射器的方法进行数据库操作了。
最后,我们展示了一些基本的数据库操作,如获取单个用户信息、获取所有用户信息、插入用户信息、更新用户信息以及删除用户。
4. 总结
通过本章的学习,我们了解了 Mybatis 映射器的注册和使用方法。我们首先定义了映射器接口,并在其中定义了数据库访问方法。然后,我们编写了映射器的 XML 文件,其中包含了 SQL 语句和结果映射配置。最后,我们通过注册映射器和使用映射器的代理对象,实现了数据库的增删改查操作。
希望本章的内容对您理解和使用 Mybatis 映射器有所帮助。下一章,我们将继续探讨 Mybatis 的更多重要功能,敬请期待!