MyBatis XML常用标签

在Java开发过程中,常用的知识点往往被忽视。在使用Spring MVC时,为了满足快速开发的需求,开发者通常会借助代码生成工具进行自动生成。而Spring Boot已经封装了基础的增删改查操作,因此开发者无需手动编写。然而,刚入行的新人可能因为对各种标签的不熟悉而导致接口报错。本文将对MyBatis XML中常用的标签进行汇总,并简单介绍每个标签的功能及其实例。

MyBatis XML常用标签

1. MyBatis XML 配置文件结构

MyBatis 的 XML 配置文件通常包括以下几个主要部分:

  • <configuration>: 根元素,包含整个配置的所有内容。
  • <environments>: 用于定义环境(如开发、测试、生产等)。
  • <mappers>: 用于定义映射器的路径。

示例:

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

2. Mapper XML 文件

每个 Mapper XML 文件用于定义 SQL 语句和其对应的 Java 方法。

  • <select>: 查询操作。
  • <insert>: 插入操作。
  • <update>: 更新操作。
  • <delete>: 删除操作。

示例:

<mapper namespace="com.example.mapper.UserMapper">
    <select id="getUserById" parameterType="int" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    
    <insert id="insertUser" parameterType="com.example.model.User">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>

    <update id="updateUser" parameterType="com.example.model.User">
        UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

3. 参数和返回值

  • parameterType: 指定传入参数的类型,可以是基本类型、JavaBean 或集合。
  • resultType: 指定返回结果的类型,可以是 JavaBean 或其他类型。

4. 动态 SQL

MyBatis 提供了一些标签来支持动态 SQL,例如:

  • <if>: 条件判断。
  • <choose>: 类似于 switch-case。
  • <foreach>: 遍历集合。

示例:

<select id="findUsers" resultType="com.example.model.User">
    SELECT * FROM users
    WHERE 1=1
    <if test="name != null">
        AND name = #{name}
    </if>
    <if test="email != null">
        AND email = #{email}
    </if>
</select>

5. SQL 片段

可以使用 <sql> 标签定义可重用的 SQL 片段,以便在其他 SQL 语句中引用。

示例:

<sql id="userColumns">
    id, name, email
</sql>

<select id="getAllUsers" resultType="com.example.model.User">
    SELECT <include refid="userColumns"/> FROM users
</select>

6. 映射关系

MyBatis 支持一对多和多对一的映射关系,可以使用 <resultMap> 来定义复杂的结果映射。

示例:

<resultMap id="userResultMap" type="com.example.model.User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="email" column="email"/>
    <collection property="orders" ofType="com.example.model.Order">
        <id property="id" column="order_id"/>
        <result property="amount" column="amount"/>
    </collection>
</resultMap>

<select id="getUserWithOrders" resultMap="userResultMap" parameterType="int">
    SELECT u.id, u.name, u.email, o.id AS order_id, o.amount
    FROM users u
    LEFT JOIN orders o ON u.id = o.user_id
    WHERE u.id = #{id}
</select>

7. 缓存

MyBatis 支持一级缓存(SqlSession级别)和二级缓存(Mapper级别),可以通过 <cache> 标签配置。

示例:

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

8. XML 文件的命名约定

  • Mapper XML 文件的命名通常与对应的 Mapper 接口文件保持一致,方便查找和管理。

9. 使用注解

除了 XML 配置外,MyBatis 还支持使用注解定义 SQL 语句,这对于简单的 CRUD 操作非常方便。

示例:

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(int id);
}

其他标签

1. <parameterMap>

用于定义输入参数的映射关系(在现代 MyBatis 中很少使用)。

2. <include>

用于在 SQL 语句中引用定义好的 SQL 片段。

示例:

<select id="getAllUsers" resultType="com.example.model.User">
    SELECT <include refid="userColumns"/> FROM users
</select>

3. <trim>

用于动态生成 SQL 语句,可以去掉多余的逗号或关键字。

示例:

<trim prefix="WHERE" prefixOverrides="AND |OR ">
    <if test="name != null">AND name = #{name}</if>
    <if test="email != null">AND email = #{email}</if>
</trim>

4. <where>

自动处理条件语句中的 AND 和 OR,可以简化条件判断的书写。

示例:

<where>
    <if test="name != null">AND name = #{name}</if>
    <if test="email != null">AND email = #{email}</if>
</where>

5. <set>

用于动态生成更新语句中的 SET 部分,自动去掉多余的逗号。

示例:

<update id="updateUser" parameterType="com.example.model.User">
    UPDATE users
    <set>
        <if test="name != null">name = #{name},</if>
        <if test="email != null">email = #{email},</if>
    </set>
    WHERE id = #{id}
</update>

6. <foreach>

用于遍历集合,生成动态的 SQL 语句,常用于 IN 子句或批量插入。

示例:

<select id="getUsersByIds" resultType="com.example.model.User">
    SELECT * FROM users WHERE id IN
    <foreach collection="list" item="id" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

7. <choose>

类似于 Java 中的 switch 语句,用于处理多种条件。

示例:

<choose>
    <when test="name != null">AND name = #{name}</when>
    <when test="email != null">AND email = #{email}</when>
    <otherwise>AND status = 'active'</otherwise>
</choose>

8. <if>

用于条件判断,生成动态 SQL 语句。

示例:

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

9. <bind>

用于绑定变量,方便在 SQL 语句中使用。

示例:

<select id="findUsersByPattern" resultType="com.example.model.User">
    <bind name="pattern" value="'%' + name + '%'"/>
    SELECT * FROM users WHERE name LIKE #{pattern}
</select>

10. <cache-ref>

用于引用其他命名空间的缓存配置。

示例:

<mapper namespace="com.example.mapper.OrderMapper">
    <cache-ref namespace="com.example.mapper.UserMapper"/>
</mapper>

11. <association>

用于处理多对一映射关系。

示例:

<resultMap id="orderResultMap" type="com.example.model.Order">
    <id property="id" column="id"/>
    <result property="amount" column="amount"/>
    <association property="user" javaType="com.example.model.User">
        <id property="id" column="user_id"/>
        <result property="name" column="user_name"/>
    </association>
</resultMap>

12. <collection>

用于处理一对多映射关系。

示例:

<resultMap id="userResultMap" type="com.example.model.User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <collection property="orders" ofType="com.example.model.Order">
        <id property="id" column="order_id"/>
        <result property="amount" column="amount"/>
    </collection>
</resultMap>
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: MyBatis XMLMyBatis 中使用的一种配置文件。它用于存储 SQL 语句和映射信息。 MyBatis XML 文件的基本结构如下: ```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 语句 --> <select id="getUserById" resultType="com.example.domain.User"> SELECT * FROM users WHERE id = #{id} </select> <!-- 映射信息 --> <resultMap id="userResultMap" type="com.example.domain.User"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="email" property="email" /> </resultMap> </mapper> ``` 其中,`mapper` 标签是必须的,它的 `namespace` 属性对应着 Java 接口的全限定名。`select` 标签用于定义查询语句,其中 `id` 属性对应着 Java 接口中的方法名,`resultType` 属性对应着返回类型。`resultMap` 标签用于定义映射信息,其中 `id` 属性是该映射信息的名称,`type` 属性对应着返回类型。`id` 和 `result` 标签用于定义列与属性之间的映射关系。 通过使用 MyBatis XML 文件,我们可以将 SQL 语句和映射信息与 Java 代码分离开来,使得程序的结构更加清晰,并且方便维护。 ### 回答2: Mybatis是一款轻量级的Java持久层框架,在使用Mybatis时,我们通常会使用XML文件来配置和映射SQL语句。 首先,我们需要在Mybatis配置文件中设置数据源和相关的属性,例如数据库驱动、连接URL、用户名和密码等。接着,我们需要定义Mapper接口,该接口定义了数据库操作的方法。在Mapper接口中,我们通过@Insert、@Update、@Delete和@Select等注解来标记不同类型的SQL语句。 然后,我们需要创建一个与Mapper接口对应的XML配置文件。在XML文件中,我们可以使用<resultMap>元素来定义SQL查询结果的映射关系,使用<select>元素来定义查询语句,使用<insert>、<update>和<delete>元素来定义增删改操作。 在<resultMap>元素中,我们可以使用<id>、<result>和<association>等元素来定义主键、字段和关联对象的映射关系。例如,<resultMap id="userMap" type="User"> <id column="id" property="id"/> <result column="name" property="name"/> <association property="department" javaType="Department"> <id column="dept_id" property="id"/> <result column="dept_name" property="name"/> </association> </resultMap> 在<select>元素中,我们需要指定SQL语句的ID、返回结果的映射关系、参数类型和返回类型等属性。例如,<select id="getUserById" resultMap="userMap" parameterType="int" resultType="User"> SELECT * FROM user WHERE id = #{id} </select> 同样地,在<insert>、<update>和<delete>元素中,我们也需要指定SQL语句的ID、参数类型等属性。 最后,我们需要在Mybatis配置文件中加载Mapper接口和XML文件,使其可以被框架识别和调用。可以通过<typeAliases>元素来定义别名,通过<mapper>元素来引入Mapper接口和XML文件。例如,<typeAliases> <package name="com.example.model"/> </typeAliases> <mappers> <mapper class="com.example.mapper.UserMapper"/> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> 总结来说,MybatisXML配置文件主要包括数据源和相关属性的配置、Mapper接口和XML文件的定义、SQL语句的编写以及结果映射的配置。通过合理配置和使用MybatisXML文件,我们可以方便地进行数据库操作。 ### 回答3: MyBatis是一种Java持久化框架,提供了一种将SQL语句与Java代码解耦的方式。在MyBatis中,使用XML文件来编写SQL语句。 首先,需要创建一个Mapper XML文件。Mapper XML文件是将SQL语句映射到Java方法的配置文件。该文件通常与对应的Java接口放在同一个包下,文件名为接口名加上“Mapper.xml”。 在Mapper XML文件中,首先需要定义一个命名空间,用于唯一标识该Mapper文件。命名空间可以使用`<mapper namespace="com.example.mapper.MyMapper">`这样的方式进行定义。接下来,可以开始编写具体的SQL语句。 可以使用`<select>`标签来编写查询语句,在`<select>`标签内部需要指定SQL语句和返回值类型。如`<select id="getUserById" parameterType="int" resultType="com.example.model.User">`,其中`id`属性用于指定方法名称,`parameterType`属性用于指定参数类型,`resultType`属性用于指定返回值类型。 其他常用标签还包括`<insert>`、`<update>`和`<delete>`,分别用于编写插入、更新和删除语句。 在SQL语句编写的过程中,可以使用动态SQL语句,如`<if>`、`<choose>`、`<when>`和`<otherwise>`等标签。这些标签可以根据条件动态生成SQL语句,提供更灵活的编程方式。 除了SQL语句,还可以在Mapper XML文件中定义一些公用的SQL片段,可以使用`<sql>`标签来定义,通过`<include>`标签来引用。 在编写完成Mapper XML文件后,还需要在MyBatis的配置文件中进行配置,将Mapper XML文件和相应的Java接口进行绑定。 通过以上的步骤,就可以使用MyBatisXML来编写SQL语句,实现持久化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懒人w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值