一、新增(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后,实体类Order的id已被赋值,可直接用于addOrderItem的orderId参数
二、删除(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 语法错误- 特点:仅更新传入的非空字段,适合部分字段修改的场景