mybatisplus mapper in list 写法
时间: 2023-07-25 22:14:36 浏览: 147
MybatisPlus 提供了一种方便的 `in` 查询方式,使用 `List` 来传递参数。具体的写法如下:
1. 在 Mapper 接口中定义方法:
```java
List<User> selectUserListByIds(List<Long> ids);
```
2. 在对应的 XML 文件中,使用 `<foreach>` 标签来拼接 SQL 语句:
```xml
<select id="selectUserListByIds" resultType="User">
SELECT * FROM user WHERE id IN
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
```
其中,`collection` 属性指定了传入的 List 参数,`item` 属性指定了 List 中的每个元素的名称,`open` 属性指定了 SQL 语句的开头,`separator` 属性指定了 List 中每个元素之间的分隔符,`close` 属性指定了 SQL 语句的结尾。
使用 MybatisPlus 提供的 `in` 查询方式,可以避免手动拼接 SQL 语句,提高了开发效率。
相关问题
mybatisplus 分页的mapper写法
MybatisPlus是一个基于MyBatis的ORM框架,它简化了数据库操作的编写,包括分页。在Mapper接口中,你可以使用一些特定的注解和方法来实现分页查询。
首先,你需要在Mapper接口上添加`@Mapper`注解,并导入相应的分页注解,如`@PageInfo`:
```java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.Wrapper;
public interface UserMapper extends BaseMapper<User> {
@PageInfo(page = "当前页", limit = "每页数量")
List<User> selectList(Page<User> page, Wrapper<User> wrapper);
}
```
在这个例子中,`selectList`方法接受一个`Page`对象和一个`Wrapper`对象。`Page`对象包含当前页数、每页大小等信息,`Wrapper`对象则是对实体类User的动态查询条件。
然后,在Service层调用这个方法并传入实际的分页参数:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final UserMapper userMapper;
@Autowired
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public Page<User> getUserList(int pageNum, int pageSize) {
return userMapper.selectList(new Page<>(pageNum, pageSize));
}
}
```
我用了这种List<Long> userIds = new LambdaQueryChainWrapper<>(sysUserRoleMapper) .select(SysUserRole::getUserId) .in(SysUserRole::getRoleId, groups) .list() .stream() .map(SysUserRole::getUserId) .collect(Collectors.toList());写法报错Caused by: org.flowable.common.engine.impl.javax.el.ELException: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not find lambda cache for this property [userId] of entity [com.ehl.base.workflow.handler.SysUserRole]
这个错误信息显示是找不到 `SysUserRole` 实体类的 lambda cache,可能是因为 `SysUserRole` 类没有使用 `@TableName` 注解,或者没有在 MyBatis Plus 的配置文件中开启自动注入。
你可以尝试在 `SysUserRole` 类上添加 `@TableName` 注解,指定对应的表名,例如:
```
@TableName("sys_user_role")
public class SysUserRole {
// ...
}
```
然后在 MyBatis Plus 的配置文件中开启自动注入,例如:
```
@Configuration
@MapperScan("com.example.mapper")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setUseDeprecatedExecutor(false);
}
}
```
如果还有问题,请提供详细的错误信息和相关代码,我会尽力帮助你解决。
阅读全文