UpdateWrapper的相关方法介绍

524 阅读3分钟

UpdateWrapper是MyBatis-Plus框架中的一个类,用于构建更新操作的条件和更新字段。下面是UpdateWrapper常用的方法介绍:

1. eq(column, value)

指定字段等于某个值的条件。

java
updateWrapper.eq("name", "Alice");

2. ne(column, value)

指定字段不等于某个值的条件。

java
updateWrapper.ne("status", "inactive");

3. set(column, value)

设置要更新的字段及其对应的值。

java
updateWrapper.set("age", 30);

4. in(column, values)

指定字段值在一组值中的条件。

java
List<Integer> ids = Arrays.asList(1, 2, 3);
updateWrapper.in("id", ids);

5. like(column, value)

指定字段值包含某个字符串的条件。

java
updateWrapper.like("name", "John");

6. isNull(column)

指定字段值为空的条件。

java
updateWrapper.isNull("email");

7. isNotNull(column)

指定字段值不为空的条件。

java
updateWrapper.isNotNull("phone");

8. orderByAsc(column)

指定字段按升序排序。

java
updateWrapper.orderByAsc("create_time");

9. orderByDesc(column)

指定字段按降序排序。

java
updateWrapper.orderByDesc("salary");

10. last(sql)

自定义拼接SQL条件。

java
updateWrapper.last("LIMIT 10");

last(sql) 方法通常用于在构建更新操作时添加自定义的 SQL 片段,这样可以在生成的 SQL 语句的最后添加额外的条件或语句,例如在排序数据、限制返回结果数量等情况下非常有用。下面是 last(sql) 方法的应用场景示例:

10.1 添加 LIMIT 限制

java
updateWrapper.eq("status", "active").last("LIMIT 10");

上述代码将会生成类似于 UPDATE table SET ... WHERE status = 'active' LIMIT 10 的 SQL 语句,限制更新操作只影响查询结果集的前 10 条记录。

10.2. 自定义排序

java
updateWrapper.eq("type", "A").orderByAsc("create_time").last("FOR UPDATE");

以上代码会生成类似于 UPDATE table SET ... WHERE type = 'A' ORDER BY create_time FOR UPDATE 的 SQL 语句,其中使用了自定义的排序规则,并且添加了数据库锁定的语句。

10.3. 复杂条件组合

java
updateWrapper.eq("status", "pending").ne("processed", true).last("AND DATE(created_at) = CURDATE()");

在这个例子中,除了常规的等于和不等于条件外,通过 last() 方法添加了一个自定义的条件,确保更新操作只会影响满足特定日期条件的记录。

当使用自定义排序时,可以根据实际需求灵活地构建SQL语句,下面是几个示例来说明不同的应用场景:

10.4. 按照多个字段排序

假设需要按照时间字段和地点字段进行排序:

java
updateWrapper.orderByAsc("event_date")
             .orderByDesc("location")
             .last(", priority ASC");

以上代码首先按照事件日期升序排序,然后按照地点降序排序,最后按照优先级字段升序排序。

10.5. 多层级排序

如果需要实现多层级的排序,可以通过在 last(sql) 中添加多个排序条件来实现:

java
updateWrapper.orderByDesc("year")
             .orderByAsc("month")
             .last(", day ASC, hour DESC");

这段代码中,首先按照年份降序排序,然后按照月份升序排序,最后按照日期升序、小时降序排序。

10.6. 自定义复杂排序逻辑

有时候可能需要根据某些业务逻辑来动态调整排序规则:

java
String customSort = getCustomSortLogic(); // 获取自定义排序逻辑
updateWrapper.orderByAsc("field1")
             .last(customSort);

在上述例子中,customSort 可以是根据业务需求动态生成的排序规则,可以是某种复杂的算法或规则,通过 last(sql) 方法将其应用到排序中。