Skip to content

Java 中的 Mapper 语法

1. Mapper 的概述

  • Mapper 用于在 Java 应用程序与数据库之间进行数据映射。
  • 在 MyBatis 框架中,Mapper 是一个接口,用于定义与数据库交互的 SQL 操作。

2. 使用注解的 Mapper 语法

  • MyBatis 支持使用注解来定义 SQL 语句,不需要使用 XML 配置。
  • 常见注解:
    • @Select:查询操作
    • @Insert:插入操作
    • @Update:更新操作
    • @Delete:删除操作

示例:

java
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.Delete;

public interface UserMapper {

    // 使用注解定义查询
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(int id);

    // 插入数据
    @Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
    void insertUser(User user);

    // 更新数据
    @Update("UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}")
    void updateUser(User user);

    // 删除数据
    @Delete("DELETE FROM users WHERE id = #{id}")
    void deleteUser(int id);
}

3. 使用 XML 配置的 Mapper 语法

  • 在 XML 配置中定义 SQL 语句,Java 接口中只定义方法。
  • 每个 Mapper 对应一个 XML 文件,XML 文件中使用 <select>, <insert>, <update>, <delete> 标签来定义 SQL 操作。

a. Java 接口:

java
public interface UserMapper {
    User getUserById(int id);
    void insertUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
}

b. Mapper XML 文件:

xml

<mapper namespace="com.example.UserMapper">

    <!-- 查询用户 -->
    <select id="getUserById" parameterType="int" resultType="com.example.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <!-- 插入用户 -->
    <insert id="insertUser" parameterType="com.example.User">
        INSERT INTO users(name, age) VALUES(#{name}, #{age})
    </insert>

    <!-- 更新用户 -->
    <update id="updateUser" parameterType="com.example.User">
        UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>

    <!-- 删除用户 -->
    <delete id="deleteUser" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>

</mapper>

4. 常用 Mapper 操作

  • 查询操作 (@Select, <select>):
    • 单条查询返回对象:User getUserById(int id);
    • 多条查询返回列表:List<User> getAllUsers();
  • 插入操作 (@Insert, <insert>):
    • 插入记录:void insertUser(User user);
  • 更新操作 (@Update, <update>):
    • 更新记录:void updateUser(User user);
  • 删除操作 (@Delete, <delete>):
    • 删除记录:void deleteUser(int id);

5. 动态 SQL 支持

  • MyBatis 提供了多种动态 SQL 标签,支持动态构建 SQL 查询。
  • 常见标签:
    • <if>:条件判断
    • <choose>:类似 if-else 语句
    • <where>:自动添加 WHERE 关键字
    • <set>:用于 UPDATE 语句中的动态字段更新

示例:动态查询

xml

<select id="getUsers" resultType="com.example.User">
    SELECT * FROM users
    <where>
        <if test="name != null">AND name = #{name}</if>
        <if test="age != null">AND age = #{age}</if>
    </where>
</select>

6. 注解与 XML 配置的比较

  • 注解方式:适用于简单的 SQL 操作,代码简洁,不需要 XML 配置。
  • XML 配置方式:适用于复杂的 SQL 操作,支持更多动态 SQL 特性,适合项目中 SQL 语句比较复杂的场景。

7. 参数和返回类型

  • parameterType:指定 SQL 语句的输入参数类型。
  • resultType:指定 SQL 查询结果的返回类型。

8. 总结

  • MyBatis 提供了灵活的方式来操作数据库,可以通过注解或者 XML 来定义 SQL 语句。
  • 使用 Mapper 可以有效地将 SQL 语句与 Java 方法绑定,简化数据库操作。

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer