myabtisplus批量条件删除
时间: 2023-07-21 19:45:48 浏览: 90
你可以使用 MyBatis-Plus 提供的 LambdaWrapper 类来实现批量条件删除。LambdaWrapper 可以方便地构建查询条件,例如:
```java
LambdaQueryWrapper<User> lambdaQueryWrapper = Wrappers.<User>lambdaQuery()
.eq(User::getStatus, 0) // 筛选状态为0的用户
.gt(User::getAge, 18); // 筛选年龄大于18岁的用户
int deleteCount = userMapper.delete(lambdaQueryWrapper);
```
以上代码会删除符合条件的 User 实体记录。其中,userMapper 是 MyBatis 的 Mapper 接口,delete 方法会自动将 LambdaWrapper 转换为对应的 SQL 语句执行删除操作。
如果你想更改删除的表名,可以使用 @TableName 注解来指定,例如:
```java
@TableName("user_info")
public class User {
// ...
}
```
这样,删除操作就会在 user_info 表中执行。
相关问题
myabtisplus分页查询
MyBatis-Plus 提供了 Page 类来支持分页查询,使用起来非常方便。具体步骤如下:
1. 在 mapper 接口中添加方法,方法参数为 Page 对象和查询条件对象,返回值为 IPage 对象。
```java
IPage<User> selectUserPage(Page<User> page, @Param("user") User user);
```
2. 在 mapper.xml 文件中编写 SQL 语句,使用 limit 关键字实现分页查询。
```xml
<select id="selectUserPage" resultType="com.example.demo.entity.User">
select * from user
<where>
<if test="user.username != null and user.username != ''">
and username like concat('%', #{user.username}, '%')
</if>
<if test="user.email != null and user.email != ''">
and email like concat('%', #{user.email}, '%')
</if>
</where>
order by create_time desc
limit #{page.offset}, #{page.size}
</select>
```
3. 在 Service 层调用 mapper 方法,传入 Page 对象和查询条件对象。
```java
Page<User> page = new Page<>(1, 10);
User user = new User();
user.setUsername("test");
IPage<User> userPage = userService.selectUserPage(page, user);
```
4. 获取分页查询结果。
```java
List<User> userList = userPage.getRecords();
long total = userPage.getTotal();
```
myabtisplus 一级缓存
MyBatis-Plus(简称 MP)是基于 MyBatis 的增强工具,提供了许多便捷的功能和扩展,其中包括一级缓存。
一级缓存是 MyBatis 中默认开启的缓存机制。它位于 SqlSession 层,用于缓存查询的结果集。当执行相同的 SQL 语句时,MyBatis 会先检查一级缓存中是否已经存在相应的缓存数据,如果存在,则直接从缓存中获取,而不去数据库中查询。这样可以大大提高查询性能。
一级缓存的生命周期与 SqlSession 相关联,当 SqlSession 提交或关闭时,一级缓存也会被清空。如果在同一个 SqlSession 中执行了更新操作(例如插入、更新、删除等),那么一级缓存也会被清空,以保证数据的一致性。
在 MyBatis-Plus 中,可以通过一些配置来控制一级缓存的行为,例如:
1. 在配置文件中设置 `<setting name="localCacheScope" value="STATEMENT" />`,可以将一级缓存的范围设置为 STATEMENT,这样每次执行 SQL 语句都会清空一级缓存,可以避免脏读的问题。
2. 使用 `@CacheNamespace` 注解,可以在 Mapper 接口类上配置缓存策略,包括开启/关闭缓存、缓存过期时间等。
需要注意的是,一级缓存是基于对象引用的,如果两次查询的返回结果对象相同(通过 equals 方法比较),则会直接返回缓存中的对象。因此,在修改查询结果对象时要小心,以免影响其他查询结果的一致性。
阅读全文