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) 方法将其应用到排序中。