MVN--06

一、新增(Insert)操作

1. 普通新增

① Mapper 接口

java

运行

复制代码
void add(Brand brand);
  • 参数:除主键 id 外的所有业务字段
  • 返回值:void(也可返回受影响行数 int
② XML 映射文件

xml

复制代码
<insert id="add">
    insert into tb_brand (brand_name, company_name, ordered, description, status)
    values (#{brandName},#{companyName},#{ordered},#{description},#{status});
</insert>
③ MyBatis 事务说明
  • openSession():默认开启手动事务,增删改后必须调用 sqlSession.commit() 手动提交
  • openSession(true):设置为自动提交事务(关闭事务管理)

2. 主键返回(自增主键场景)

适用场景

添加订单后,需要获取订单主键 id,用于插入关联的订单项数据。

① XML 映射文件

xml

复制代码
<insert id="addOrder" useGeneratedKeys="true" keyProperty="id">
    insert into tb_order (payment, payment_type, status)
    values (#{payment},#{paymentType},#{status});
</insert>
  • useGeneratedKeys="true":开启自增主键获取
  • keyProperty="id":将数据库生成的主键值,回写到实体类的 id 属性中
② 关联操作示例

xml

复制代码
<insert id="addOrderItem">
    insert into tb_order_item (goods_name, goods_price, count, order_id)
    values (#{goodsName},#{goodsPrice},#{count},#{orderId});
</insert>
  • 执行 addOrder 后,实体类 Orderid 已被赋值,可直接用于 addOrderItemorderId 参数

二、删除(Delete)操作

1. 单条删除(按 ID 删除)

① Mapper 接口

java

运行

复制代码
void deleteById(int id);
  • 参数:要删除的记录主键 id
  • 返回值:void(也可返回受影响行数 int
② XML 映射文件

xml

复制代码
<delete id="deleteById">
    delete from tb_brand where id = #{id}
</delete>

2. 批量删除(按 ID 数组删除)

① Mapper 接口

java

运行

复制代码
void deleteByIds(@Param("ids") int[] ids);
  • 参数:int[] ids 要删除的 ID 数组,@Param 注解用于指定参数在 Map 中的 key
  • 返回值:void
② MyBatis 参数封装规则

MyBatis 会将数组 / 集合参数自动封装为 Map

  • 默认 key:array(数组)/ list(List 集合)
  • 可通过 @Param("ids") 自定义 key 名称,提升代码可读性
③ XML 映射文件(foreach 标签实现)

xml

复制代码
<delete id="deleteByIds">
    delete from tb_brand
    where id in
    <foreach collection="ids" item="id" separator="," open="(" close=")">
        #{id}
    </foreach>
</delete>
  • collection:对应 @Param 指定的 key(无注解时写 array/list
  • item:遍历的单个元素别名
  • separator:元素间分隔符
  • open/close:包裹整个遍历结果的前后符号

三、修改(Update)操作

1. 全字段修改

① Mapper 接口

java

运行

复制代码
void update(Brand brand);
  • 参数:包含所有字段的实体对象(含 id
  • 返回值:void(也可返回受影响行数 int
② XML 映射文件

xml

复制代码
<update id="update">
    update tb_brand
    set brand_name = #{brandName},
        company_name = #{companyName},
        ordered = #{ordered},
        description = #{description},
        status = #{status}
    where id = #{id};
</update>
  • 特点:无论字段是否为空,都会强制更新所有字段

2. 动态字段修改(按需更新)

① Mapper 接口

java

运行

复制代码
void update(Brand brand);
  • 接口与全字段修改一致,仅需修改 XML 映射文件
② XML 映射文件(if + set 标签实现)

xml

复制代码
<update id="update">
    update tb_brand
    <set>
        <if test="brandName != null and brandName != ''">
            brand_name = #{brandName},
        </if>
        <if test="companyName != null and companyName != ''">
            company_name = #{companyName},
        </if>
        <if test="ordered != null">
            ordered = #{ordered},
        </if>
        <if test="description != null and description != ''">
            description = #{description},
        </if>
        <if test="status != null">
            status = #{status},
        </if>
    </set>
    where id = #{id};
</update>
  • <if> 标签:判断字段是否非空,非空才拼接更新语句
  • <set> 标签:自动去除末尾多余的逗号,避免 SQL 语法错误
  • 特点:仅更新传入的非空字段,适合部分字段修改的场景
相关推荐
鸠摩智首席音效师2 小时前
如何在 MacOS 上安装 PostgreSQL ?
数据库·macos·postgresql
℡終嚸♂6802 小时前
SQL 注入:从原理到实战的完整指南
数据库·sql
航Hang*2 小时前
第2章:进阶Linux系统——第8节:配置与管理MariaDB服务器
linux·运维·服务器·数据库·笔记·学习·mariadb
AKA__Zas2 小时前
初识SQL(1.0 PLUS)
数据库·sql·学习方法
卢傢蕊2 小时前
PostgreSQL 日常维护
数据库·postgresql·oracle
芯智工坊2 小时前
第10章 Mosquitto桥接模式
网络·数据库·人工智能·mqtt·开源·桥接模式
零陵上将军_xdr2 小时前
MySQL体系架构
数据库·mysql·架构
fLDiSQV1W2 小时前
【MongoDB】MongoDB 概述
数据库·mongodb