页面开启根据初始化数据执行查询

背景:
1. 页面A跳转到页面B
2. A设定B参数,通过绑定的bean
3. B开启时根据绑定的bean获取参数进行查询

问题1:A如何传参数给B?
问题2:B获取参数如何自动执行查询?

1, 在A中把指定参数存放到session中
a,注意设定web.xml中的fifter不要过滤掉保存参数的session
b,在B页面绑定bean的类中通过构造函数在初始状态getSession.get对应的session值,并复制给对应的属性
c,设定一个特殊的session用作判断是否是初始化

2, 在B页面中
a,获取session中判断是否为初始化的参数,如果为空,则不执行查询,否则设定可执行查询,并在设定完后清空此session避免页面刷新后重复执行查询

以上动作代码:

A:public String login() {
message = loginService.login(customer);
if (message.equalsIgnoreCase("SUCCESSFUL")) {
General.setSession("userId", customer.getUser_id());
General.setCookie("user_id", customer.getUser_id());

General.setSession("modelId",customer.getModel());//B所需参数
General.setCookie("model_id", customer.getModel());

General.setSession("initFlag",customer.getInitFlag());//是否初始化判断
General.setCookie("init_flag",customer.getInitFlag());
}
return message;
}

B:
public YieldBean() {
workDateFrom = DateToString();
workDateTo = workDateFrom;
schemaName = (String) General.getSession("schemaName");
customerCode = (String) General.getSession("customerCode");
model = (String) General.getSession("modelId");
}

B页面:
<%
boolean firstInit = false;
if(session.getAttribute("initFlag")!=null){
firstInit = true;
session.setAttribute("initFlag",null);
}
%>

function loadFun(firstInit){
formatCss();
initQuery(firstInit);
}

function initQuery(firstInit){
var initQuery = document.getElementById('yield:initQuery');
initQuery.style.display = "none";

if(firstInit){
initQuery.click();
}
}

<body onload="loadFun(<%=firstInit%>);">

<think>首先,用户的问题是:"我想查找在Java和Spring Boot项目中使用MyBatis进行分页查询页面不显示数据的原因"。这是在询问Spring Boot和MyBatis分页查询数据不显示的原因。 从系统级指令: - 所有行内数学表达式必须用$...$(但这里可能不涉及数学,因为是编程问题)。 - 独立公式用$$...$$。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 用户提供了引用[1]到[5],这些是关于Spring Boot + MyBatis分页查询的: - [1]: 提到整合Spring Boot和MyBatis使用PageHelper插件。 - [2]: 关于MyBatis-Flex整合(但用户主要问MyBatis,不是Flex)。 - [3]: 超详细图文教程,包括常见问题如分页失效、数据不全等。 - [4]: 使用PageHelper插件,添加依赖和配置。 - [5]: 分页插件的优势,不需要手动计算偏移量。 用户说:"上述引用仅供参考,并不是用户真正的需求",但我应该尽可能参考用户上一次的问题和我的回答。用户没有提供上一次的问题或我的回答历史,所以我只能基于当前问题。 关键点是:用户问"页面不显示数据的原因",这意味着查询结果为空或分页设置有问题。 参考引用[3],它列出了常见问题: - 分页失效或不分页(检查是否在查询前调用PageHelper.startPage()) - 返回的PageInfo数据不全(确保通过查询后的List构造) - 多表关联分页导致数据重复(使用排序) - 同一个方法中多次分页无效(拆分方法) 引用[4]提到添加PageHelper依赖和配置。 所以,回答应该基于这些引用解释原因。 结构我的回答: 1. **逐步解决问题**:帮助用户诊断原因。 2. **引用标识**:在引用到的内容结束添加[^n],例如引用[3]的内容。 3. **使用中文**。 4. **生成相关问题**:在最后添加"§§相关问题§§"部分。 可能的原因: - 忘记调用PageHelper.startPage(pageNum, pageSize)。 - PageHelper配置错误。 - SQL查询没有正确写。 - 分页插件版本问题。 - 数据源为空或查询条件错误。 - 分页信息没有正确传递到前端。 从引用[3],常见问题包括: - 分页失效:未调用startPage。 - 数据不全:PageInfo构造不当。 - 多表关联:需要排序。 - 多次分页无效。 回答步骤: 1. 确认是否调用了PageHelper.startPage。 2. 检查PageHelper依赖和配置。 3. 验证SQL查询是否正确。 4. 确保PageInfo或分页对象正确使用。 5. 检查是否有排序问题导致数据重复。 6. 确认数据源是否有数据。 最后,生成相关问题。 完整回答结构: - 介绍常见原因。 - 逐步解释每个原因。 - 提供解决方案引用。 - 添加引用标识。 - 生成相关问题。 </think>### Java Spring Boot项目中使用MyBatis分页查询页面不显示数据的原因分析 在Java Spring Boot项目中结合MyBatis进行分页查询页面不显示数据是一个常见问题。这通常是由于分页配置错误、插件使用不当或SQL执行问题导致的。以下我将基于引用内容,逐步分析可能的原因并提供解决方案。结合引用[3]和[4],分页查询的核心依赖于PageHelper插件,其原理是通过拦截SQL查询动态添加LIMIT和OFFSET子句。 #### 1. **未正确调用PageHelper.startPage()** - **原因分析**:PageHelper插件要求在查询数据库**之前**调用`PageHelper.startPage(pageNum, pageSize)`方法。如果这个方法未被调用或调用顺序错误,插件无法拦截SQL语句添加分页逻辑,导致查询返回所有数据而非分页结果。最终页面可能显示空或显示所有数据不分页。 - **解决方案**: - 确保在Mapper查询方法执行前调用`PageHelper.startPage()`。例如: ```java // 在Service层调用 PageHelper.startPage(pageNum, pageSize); // pageNum为页码,pageSize为每页条数 List<User> users = userMapper.findAllUsers(); // 查询数据库 ``` - 引用[3]强调:"分页失效或不分页:检查是否在查询前调用了PageHelper.startPage()"[^3]。 - **排查提示**:在代码中添加日志,确认`PageHelper.startPage()`是否被正确执行。 #### 2. **PageHelper配置错误或依赖缺失** - **原因分析**:PageHelper插件需要正确的Maven依赖和Spring Boot配置。如果依赖缺失(如未添加到pom.xml)或配置文件错误,插件无法生效,导致SQL查询未被拦截。 - **解决方案**: - 添加PageHelper依赖(引用[4]提供): ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.6</version> <!-- 使用最新稳定版 --> </dependency> ``` - 在application.yml中配置分页插件参数: ```yaml pagehelper: helper-dialect: mysql # 指定数据库方言 reasonable: true # 页码合理化,避免无效页 support-methods-arguments: true ``` - 引用[4]指出:"分页功能可以通过MyBatis的插件来实现,常用的分页插件是PageHelper。首先,需要添加PageHelper依赖"[^4]。 - **排查提示**:检查项目pom.xml文件是否包含依赖,并在启动日志中确认PageHelper插件是否加载成功。 #### 3. **PageInfo对象构造不当导致数据不全** - **原因分析**:查询结果需要通过`PageInfo`对象封装分页信息(如总记录数、总页数)。如果直接返回List而不构造`PageInfo`,或构造方式错误(如数据未正确初始化),页面可能无法获取数据列表。 - **解决方案**: - 确保使用查询后的List创建`PageInfo`对象: ```java PageHelper.startPage(pageNum, pageSize); List<User> userList = userMapper.findAllUsers(); PageInfo<User> pageInfo = new PageInfo<>(userList); // 封装分页信息 ``` - 引用[3]提示:"返回的PageInfo数据不全:确保PageInfo是通过查询后的List构造的"[^3]。 - **排查提示**:在Controller层打印`pageInfo.getList()`,检查是否包含查询结果。 #### 4. **SQL查询问题或多表关联导致数据混乱** - **原因分析**: - SQL语句本身错误(如查询条件不匹配),导致数据源为空。 - 多表关联,分页可能失效或重复数据(如未指定排序规则),插件无法正确处理分页逻辑。 - **解决方案**: - 验证SQL在数据库工具中是否能返回数据(如使用MySQL Workbench测试)。 - 对于多表查询,添加显式排序来避免数据重复: ```java PageHelper.startPage(pageNum, pageSize); PageHelper.orderBy("id DESC"); // 指定排序字段 List<User> users = userMapper.findUsersWithJoin(); ``` - 引用[3]提到:"多表关联分页导致数据重复:使用PageHelper.orderBy()或SQL中合理使用排序字段"[^3]。 - **排查提示**:检查SQL日志(开启MyBatis日志:`logging.level.com.example.mapper=DEBUG`),确认生成的SQL是否包含LIMIT子句。 #### 5. **其他常见陷阱** - **同一个方法多次调用分页无效**:引用[3]指出:"同一个方法中多次分页无效:只有第一次调用startPage()生效,建议拆分成多个方法"[^3]。如果在一个方法内多次调用查询,只有第一次分页生效,后续查询会返回所有数据。 - **页面参数传递错误**:前端传递的页码(pageNum)或每页条数(pageSize)无效(如值为0或负数),导致插件跳过分页。 - **数据源问题**:数据库表中确实无数据,或查询条件过滤了所有记录。 - **插件版本兼容性**:使用过的PageHelper版本(如1.2.x),可能与Spring Boot不兼容。引用[5]建议:"分页插件最新源码解读及使用"[^5],推荐更新到最新稳定版。 ### 总结建议 页面不显示数据通常源于分页逻辑未正确触发。推荐以下调试顺序: 1. 确认调用`PageHelper.startPage()`的顺序。 2. 检查依赖和配置。 3. 验证SQL和PageInfo对象。 4. 添加排序规则处理多表查询。 如果问题持续,参考引用[3]的"常见问题与解决方案"部分进行全面排查[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值