MyBatis XML映射文件编写
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs (Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。
在 MyBatis 中,XML 映射文件是非常关键的部分,它定义了如何将 Java 对象映射到 SQL 语句以及如何将 SQL 查询结果映射回 Java 对象。下面,我们将详细介绍如何编写 MyBatis 的 XML 映射文件。
1. XML 映射文件的基本结构
每个 MyBatis 的映射文件都包含了一个 <mapper>
元素作为根元素。在 <mapper>
元素内部,你可以定义多种映射语句,如 <select>
、<insert>
、<update>
和 <delete>
。
xml
<?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">
<!-- SQL 映射语句将在这里定义 -->
</mapper>
- namespace:命名空间,它是绑定 MyBatis 接口的全路径名,用于唯一标识 mapper。
2. SQL 映射语句
2.1 <select>
用于查询操作。你可以使用 #{}
来进行参数替换,防止 SQL 注入。
xml
<select id="selectUserById" parameterType="int" resultType="com.example.domain.User">
SELECT * FROM users WHERE id = #{id}
</select>
- id:唯一标识符,与 Mapper 接口中的方法名对应。
- parameterType:输入参数的类型。
- resultType:SQL 查询返回的结果类型,即 Java 对象的全路径名。
2.2 <insert>
、<update>
和 <delete>
这些标签分别用于插入、更新和删除操作。对于修改数据库的操作,MyBatis 支持使用 <selectKey>
来获取自动生成的主键。
xml
<insert id="insertUser" parameterType="com.example.domain.User">
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>
- keyProperty:指定 Java 对象的哪个属性用于接收生成的主键值。
- order :指定
<selectKey>
相对于插入语句的执行顺序,BEFORE
或AFTER
。
3. 映射复杂结果
对于复杂的查询,你可能需要将结果映射到多个 Java 对象或者映射到 Java 对象的集合中。MyBatis 提供了 <resultMap>
元素来支持复杂的映射。
xml
<resultMap id="userResultMap" type="com.example.domain.User">
<id property="id" column="user_id" />
<result property="username" column="user_name" />
<result property="email" column="email_address" />
<!-- 更多映射 -->
</resultMap>
<select id="selectUsers" resultMap="userResultMap">
SELECT user_id, user_name, email_address FROM users
</select>
- :用于映射主键字段。
- :用于映射非主键字段。
4. 注意事项
- 确保 XML 文件的命名空间和路径与 Mapper 接口的全路径名一致。
- 在
<mapper>
标签内,避免使用 MyBatis 保留的关键字。 - 仔细检查 SQL 语句中的参数替换,确保没有 SQL 注入的风险。
- 使用
<resultMap>
可以更灵活地控制复杂对象的映射关系。
通过上面的介绍,你应该对 MyBatis 的 XML 映射文件编写有了基本的了解。在实际开发中,根据具体需求编写相应的 SQL 映射语句,将大大提高数据访问层的开发效率和灵活性。