mybatis 的 delete和update语句

本文详细介绍了MyBatis框架中实现数据增删改查的具体方法,包括XML映射文件中的SQL语句编写方式及注解使用技巧。通过示例展示了如何使用@Delete和@Update注解进行数据删除和更新操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis的delete

<delete id="deleteById">
    delete from sys_user where id = #{id}
</delete>
  • 注解@Delete
@Delete({"delete from sys_role where id = #{id}"})

void detele1(Long id);

mybatis的update

<update id="updateById" parameterType="SysUser">
update sys_user
  <set>
   <if test="userName !=null and userName!=''">
    user_name = #{userName},
   </if>
   <if test="userPassword !=null and userPassword !=''">
    user_password = #{userPassword},
   </if>
   <if test="userEmail !=null and userEmail !=''">
    user_email = #{userEmail},
   </if>
   <if test="userInfo !=null and userInfo !=''">
    user_info = #{userInfo},
   </if>
   <if test="headImg !=null">
    head_img = #{headImg},
   </if>
   <if test="createTime !=null">
    create_time = #{createTime},
   </if>
  </set>
  <where>
   id = #{id}
  </where>
</update>
  • 注解@update

@Update({ "update sys_role set role_name=#{roleName},enabled = #{enabled},"
       + "create_by=#{createBy},create_time=#{createTime,jdbcType=TIMESTAMP} " 
       + "where id=#{id}"})
void update1(SysRole sysRole);
<think>我们被要求回答关于Mybatis Plus中delete语句的方法,并在最后提出3-5个相关问题。 首先,我们需要明确Mybatis Plus中用于删除的方法。Mybatis Plus提供了多种删除方法,包括根据ID删除、根据条件删除、批量删除等。 常见的方法有: 1. deleteById:根据主键ID删除 2. deleteByMap:根据Map条件删除 3. delete:根据Wrapper条件删除 4. deleteBatchIds:根据主键ID批量删除 接下来,我们将按照要求用中文回答,并在最后提出相关问题。 注意:回答末尾必须包含“§§相关问题§§”且不可换行分散,然后列出3-5个问题。</think>### MyBatis Plus 删除语句方法详解 MyBatis Plus 提供了多种删除方法,主要通过 `com.baomidou.mybatisplus.extension.service.IService` 接口实现。以下是核心删除方法总结: #### 1. 根据 ID 删除 ```java // 根据主键ID删除 boolean removeById(Serializable id); // 示例 userService.removeById(1L); // 删除ID=1的用户 ``` #### 2. 根据条件删除 ```java // 使用 QueryWrapper 构建条件 boolean remove(Wrapper<T> queryWrapper); // 示例:删除年龄大于30的用户 QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.gt("age", 30); userService.remove(wrapper); ``` #### 3. 批量删除 ```java // 根据ID集合批量删除 boolean removeByIds(Collection<? extends Serializable> idList); // 示例:删除ID为1,2,3的用户 List<Long> ids = Arrays.asList(1L, 2L, 3L); userService.removeByIds(ids); ``` #### 4. 根据 Map 条件删除 ```java // 使用Map条件删除(key=字段名,value=字段值) boolean removeByMap(Map<String, Object> columnMap); // 示例:删除name="张三"且status=0的记录 Map<String, Object> map = new HashMap<>(); map.put("name", "张三"); map.put("status", 0); userService.removeByMap(map); ``` #### 5. 链式调用删除 ```java // Lambda表达式条件删除 boolean remove(LambdaQueryWrapper<T> wrapper); // 示例:删除创建时间早于2023年的用户 userService.remove(new LambdaQueryWrapper<User>() .lt(User::getCreateTime, LocalDate.of(2023, 1, 1))); ``` #### 执行原理 所有删除操作最终都会转换为以下 SQL 模板: ```sql DELETE FROM 表名 WHERE 条件 ``` #### 事务处理建议 ```java @Transactional(rollbackFor = Exception.class) public void batchDeleteUsers(List<Long> ids) { if (!userService.removeByIds(ids)) { throw new RuntimeException("删除失败"); } } ``` #### 注意事项 1. **逻辑删除**:若配置了逻辑删除(`@TableLogic`),实际执行的是 UPDATE 操作而非 DELETE 2. **性能优化**:批量删除建议控制每次操作数量(默认 1000 条/批) 3. **防全删**:避免构建空条件,否则会触发 `DELETE FROM table` 全表删除 4. **返回值**:返回 boolean 表示操作是否成功(影响行数>0) #### 完整示例 ```java @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserService userService; public void deleteUserOperations() { // 单条删除 userService.removeById(101L); // 条件删除 userService.remove(new QueryWrapper<User>() .eq("department", "HR") .le("age", 50)); // 批量删除 userService.removeByIds(Arrays.asList(201L, 202L, 203L)); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值