mybaits 查询返回Map<Integer,Integer>
时间: 2023-07-09 17:47:58 浏览: 124
如果你想使用MyBatis查询返回一个`Map<Integer, Integer>`类型的结果,可以使用MyBatis提供的`MapResultHandler`类,该类可以将查询结果转换为一个Map对象,其中Map的key和value都是Integer类型。
以下是一个示例:
```java
public interface MyMapper {
@Select("SELECT id, value FROM my_table")
void select(Map<Integer, Integer> resultMap);
}
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
Map<Integer, Integer> resultMap = new HashMap<>();
sqlSession.select("com.example.MyMapper.select", resultMap);
// 处理查询结果
} finally {
sqlSession.close();
}
```
在上面的示例中,我们在`select`方法的参数中传入了一个空的`HashMap`对象,查询结果将会被转换为这个`HashMap`对象,其中Map的key是查询结果中的`id`字段,value是查询结果中的`value`字段。
相关问题
mybaits 自定义查询返回Map<Integer,Integer>
如果你想自定义MyBatis查询返回一个`Map<Integer, Integer>`类型的结果,可以使用MyBatis提供的`ResultHandler`接口,该接口可以将查询结果转换为一个你自定义的Map对象。
以下是一个示例:
```java
public class MyResultHandler implements ResultHandler {
private Map<Integer, Integer> resultMap = new HashMap<>();
@Override
public void handleResult(ResultContext context) {
Map<String, Object> resultMap = (Map<String, Object>) context.getResultObject();
Integer id = (Integer) resultMap.get("id");
Integer value = (Integer) resultMap.get("value");
resultMap.put(id, value);
}
public Map<Integer, Integer> getResultMap() {
return resultMap;
}
}
MyResultHandler handler = new MyResultHandler();
sqlSession.select("com.example.MyMapper.select", handler);
Map<Integer, Integer> resultMap = handler.getResultMap();
```
在上面的示例中,我们自定义了一个`MyResultHandler`类,实现了`ResultHandler`接口,并在实现类中将查询结果转换为一个Map对象,其中Map的key是查询结果中的`id`字段,value是查询结果中的`value`字段。然后我们在查询语句中传入了这个实现类的对象,查询结果将会被转换为我们自定义的Map对象。
mybaitsplus分页查询
### MyBatisPlus 分页查询的使用方法
#### 配置分页插件
为了实现分页功能,需要配置 `MybatisPlusInterceptor` 并添加拦截器。以下是具体的配置代码:
```java
@Configuration
public class MyBatisConfig {
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
```
上述代码展示了如何通过 Spring Boot 的配置类来注册分页拦截器[^3]。
---
#### 实现分页查询
在完成分页插件的配置之后,可以通过调用 `Page<T>` 对象来进行分页查询操作。以下是一个完整的示例代码:
```java
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void queryUserListWithPagination(int currentPage, int pageSize) {
// 创建 Page 对象并设置当前页码和每页显示记录数
Page<User> page = new Page<>(currentPage, pageSize);
// 调用 Mapper 方法执行分页查询
IPage<User> result = userMapper.selectPage(page, null);
// 获取分页结果中的总记录数、总页数以及其他信息
long totalRecords = result.getTotal();
List<User> records = result.getRecords();
System.out.println("总记录数:" + totalRecords);
System.out.println("当前页数据:" + records);
}
}
```
在此示例中,`selectPage` 方法会返回一个封装了分页信息的对象 `IPage<T>`,其中包含了分页的结果集和其他元数据,例如总记录数、当前页码等[^1]。
---
#### 前后端交互场景下的分页处理
当项目采用前后端分离架构时,前端通常会传递两个参数给后端:`current` 和 `size`,分别表示当前页码和每页大小。后端接收到这些参数后可以直接映射到 `Page<T>` 中进行分页查询。最终将分页结果序列化为 JSON 格式返回给前端。
以下是一个典型的 Controller 层代码片段:
```java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/list")
public Map<String, Object> getUserList(@RequestParam Integer current, @RequestParam Integer size) {
Page<User> page = new Page<>(current, size);
IPage<User> result = userService.queryUserListWithPagination(current, size);
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("total", result.getTotal());
resultMap.put("data", result.getRecords());
return resultMap;
}
}
```
此代码实现了从前端接收分页请求参数,并将其转换为分页对象传入服务层逻辑。
---
#### 数据库支持情况
需要注意的是,MyBatis-Plus 提供的分页插件依赖于底层数据库的支持。不同的数据库类型可能需要指定对应的枚举值 `DbType` 来适配 SQL 方言。例如,MySQL 使用 `DbType.MYSQL`,Oracle 则需改为 `DbType.ORACLE` 等[^2]。
---
阅读全文
相关推荐















