List<Long>如何存储在MySQL中
时间: 2024-05-19 19:13:06 浏览: 198
List<Long>可以使用以下方法存储在MySQL中:
1. 将List转换为字符串,然后将字符串存储在MySQL的文本类型字段中。例如,将List<Long>转换为逗号分隔的字符串,然后将其存储在VARCHAR类型的字段中。
2. 将List中的每个Long值存储在MySQL的数值类型字段中。可以使用循环将每个Long值作为单独的行插入到数据库表中,或者将它们作为逗号分隔的值一起存储在一个VARCHAR类型的字段中。
3. 使用MySQL的JSON数据类型来存储List<Long>。可以将List转换为JSON格式,然后将其存储在JSON类型的字段中。这需要MySQL版本5.7及以上。
需要根据具体情况选择存储方法,其中第一种方法最为常见。
相关问题
public interface PageSortInterface { Integer getPageNum(); Integer getPageSize(); String getSort(); String getOrder(); } public interface MyBaseMapper<T> extends Mapper<T>, MySqlMapper<T>,MyInsertListMapper<T> { } public interface UserMapper extends MyBaseMapper<User> { } springboot项目在有这三个接口的情况下,实现在sql层的分页(使用PageHelper 方式)
好的,以下是一个示例代码,演示如何在Spring Boot项目中使用`PageHelper`实现在SQL层面的分页:
首先,需要在`pom.xml`中添加`pagehelper`依赖:
```xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
```
然后,在`application.properties`中添加相应的配置:
```properties
# 分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
```
接下来,定义一个`Page`类,用于封装分页参数和查询结果:
```java
public class Page<T> {
private List<T> content; // 数据列表
private long total; // 总记录数
private int pageNum; // 当前页码
private int pageSize; // 每页记录数
private String sort; // 排序字段
private String order; // 排序方式
// getter和setter方法
}
```
然后,定义一个`PageHelperUtil`工具类,用于调用`PageHelper`进行分页查询:
```java
public class PageHelperUtil {
public static <T> Page<T> startPage(PageSortInterface pageSort, Supplier<List<T>> supplier) {
PageHelper.startPage(pageSort.getPageNum(), pageSort.getPageSize(), pageSort.getSort() + " " + pageSort.getOrder());
List<T> list = supplier.get();
PageInfo<T> pageInfo = new PageInfo<>(list);
Page<T> page = new Page<>();
page.setContent(list);
page.setTotal(pageInfo.getTotal());
page.setPageNum(pageInfo.getPageNum());
page.setPageSize(pageInfo.getPageSize());
page.setSort(pageSort.getSort());
page.setOrder(pageSort.getOrder());
return page;
}
}
```
在`startPage`方法中,我们调用`PageHelper.startPage`方法,指定当前页码、每页记录数和排序方式,并使用`Supplier`接口作为入参,接收一个查询结果的lambda表达式。然后,将查询结果封装为`Page`对象,包含数据列表、总记录数、当前页码、每页记录数、排序字段和排序方式。
最后,在`UserMapper`接口中定义一个`selectByRoleAndPage`方法,接收一个`PageSortInterface`类型的参数,并返回一个`List<User>`类型的结果:
```java
public interface UserMapper extends MyBaseMapper<User> {
@SelectProvider(type = MySelectProvider.class, method = "dynamicSQL")
List<User> selectByRoleAndPage(PageSortInterface pageSort);
}
```
在`selectByRoleAndPage`方法中,我们调用`MySelectProvider.dynamicSQL`方法生成查询语句,并将`PageSortInterface`类型的参数作为入参传递给`PageHelperUtil.startPage`方法,实现分页查询。最终返回一个`List<User>`类型的结果。
使用示例如下:
```java
@RequestMapping("/users")
public Page<User> getUsers(@RequestParam int role, @RequestParam int pageNum, @RequestParam int pageSize, @RequestParam String sort, @RequestParam String order) {
PageSortInterface pageSort = new PageSortImpl(pageNum, pageSize, sort, order);
return PageHelperUtil.startPage(pageSort, () -> userMapper.selectByRoleAndPage(pageSort));
}
```
在`getUsers`方法中,我们接收请求参数,创建一个`PageSortImpl`对象,实现`PageSortInterface`接口。然后,调用`PageHelperUtil.startPage`方法,传入`PageSortInterface`类型的参数和一个lambda表达式,获取分页查询结果。
我用了这种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);
}
}
```
如果还有问题,请提供详细的错误信息和相关代码,我会尽力帮助你解决。
阅读全文