0
点赞
收藏
分享

微信扫一扫

MyBatis 常用函数使用介绍

拾杨梅记 2024-11-13 阅读 38

MyBatis 是一个流行的持久化框架,通常用于将 Java 对象映射到数据库表中

1. 基本查询操作

最常见的操作是执行简单的查询,插入,更新和删除。MyBatis 通过映射 XML 配置文件或注解来实现这些操作。

查询操作(SELECT

<!-- 查询所有用户 -->
<select id="selectAllUsers" resultType="com.example.User">
  SELECT * FROM users
</select>

插入操作(INSERT

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

更新操作(UPDATE

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

删除操作(DELETE

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

2. 条件查询

在 MyBatis 中,使用 where 子句和 if 标签可以动态生成 SQL。

使用 if 动态 SQL

<select id="selectUser" 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>

在上述查询中,<if> 标签根据条件动态拼接 WHERE 子句。

3. 分页查询

分页查询常见于大数据集的场景中,MyBatis 可以通过提供 LIMITROWNUM 来实现分页查询。

使用 RowBounds 实现分页

List<User> users = sqlSession.selectList("selectAllUsers", null, new RowBounds(0, 10));

在这里,RowBounds(0, 10) 表示从第 0 条记录开始,查询 10 条记录。

使用 MySQL 的 LIMIT

<select id="selectPagedUsers" resultType="com.example.User">
  SELECT * FROM users
  LIMIT #{offset}, #{limit}
</select>

4. 批量插入和更新

MyBatis 也支持批量操作,适用于需要一次性插入或更新大量记录的情况。

批量插入

<insert id="insertUsers" parameterType="java.util.List">
  INSERT INTO users (name, age)
  VALUES
  <foreach collection="list" item="user" separator=",">
    (#{user.name}, #{user.age})
  </foreach>
</insert>

批量更新

<update id="updateUsers" parameterType="java.util.List">
  <foreach collection="list" item="user" open="BEGIN" close="END" separator=";">
    UPDATE users SET name = #{user.name}, age = #{user.age} WHERE id = #{user.id}
  </foreach>
</update>

5. 连接查询(Join)

MyBatis 支持通过简单的 SQL 查询来进行连接查询。

<select id="selectUserWithOrders" resultMap="userOrderMap">
  SELECT u.id, u.name, o.id AS order_id, o.amount
  FROM users u
  LEFT JOIN orders o ON u.id = o.user_id
</select>

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

在这里,LEFT JOIN 用来连接 users 表和 orders 表,返回一个包含 orders 集合的 User 对象。

6. 自定义函数(SQL)

MyBatis 允许你在 XML 中使用自定义 SQL 函数和条件。

使用 choosewhenotherwise

<select id="selectUser" resultType="com.example.User">
  SELECT * FROM users
  <where>
    <choose>
      <when test="name != null">AND name = #{name}</when>
      <when test="age != null">AND age = #{age}</when>
      <otherwise>AND status = 'active'</otherwise>
    </choose>
  </where>
</select>

<choose> 标签相当于 SQL 中的 CASE WHEN,根据不同的条件执行不同的 SQL 片段。

使用 trim 删除多余的 SQL

<select id="selectUserWithTrim" resultType="com.example.User">
  SELECT * FROM users
  <trim prefix="WHERE" prefixOverrides="AND">
    <if test="name != null">AND name = #{name}</if>
    <if test="age != null">AND age = #{age}</if>
  </trim>
</select>

<trim> 标签用来处理 SQL 中的前缀或多余的 ANDOR


举报

相关推荐

0 条评论