确认
- [X] 我的版本是最新版本, 我的版本号与 version 相同, 并且项目里无依赖冲突
- [X] 我已经在 issue 中搜索过, 确认问题没有被提出过
- [X] 我已经修改标题, 将标题中的 描述 替换为遇到的问题
当前程序版本
mybatis-plus-boot-starter 3.4.3.4
问题描述
环境:
主机:MacOS
mybatis-plus-boot-starter 3.4.3.4
com.microsoft.sqlserver mssql-jdbc 9.4.0.jre8
docker--->Sqlserver2019dev
在执行这段代码时:
@ApiOperation("查询视图列表")
@GetMapping("list")
public JsonResultObject get(@RequestParam(value = "entityid", required = true) UUID entityId,
@RequestParam(name = "name", required = false) String name,
@RequestParam(name = "getall", required = false) Boolean getall,
@RequestParam(name = "page", required = false) Integer page,
@RequestParam(name = "pagesize", required = false) Integer pagesize,
@RequestParam(value = "sortby", required = false) String sortby,
@RequestParam(value = "sortdirection", required = false) String sortdirection) {
if (UUIDUtil.isEmpty(entityId)) {
return JNotSpecifiedParams("entityid");
}
LambdaQueryWrapper lambdaQueryWrapper = getSortedQueryWrapper(sortby, sortdirection); //sortby, sortdirection
lambdaQueryWrapper.eq(QueryView::getEntityid, entityId);
if (StringUtil.notEmpty(name)) {
lambdaQueryWrapper.like(QueryView::getName, name);
}
if (getall != null && getall) {
return JOk(_queryViewFinderService.list(lambdaQueryWrapper));
} else if (page == null || pagesize == null) {
return JNotSpecifiedParams("page", "pagesize");
}
page = (page <= 0 ? 1 : page);
pagesize = (pagesize <= 0 ? 10 : pagesize);
IPage datas = _queryViewFinderService.page(new Page<>(page, pagesize), lambdaQueryWrapper);
PagedList result = new PagedList<>(datas.getRecords(), page, pagesize, datas.getTotal(), datas.getPages());
return JOk(result);
}
这里报错: IPage datas = _queryViewFinderService.page(new Page<>(page, pagesize), lambdaQueryWrapper);
提示:
nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Error: Method queryTotal execution error of sql : SELECT COUNT() FROM (SELECT COUNT() FROM (SELECT entityid,[name],[logenabled],[localizedname],[iscustomizable],[authorizationenabled],[entitymask],[duplicateenabled],[workflowenabled],[parententityid],[entitygroups],[createdby],[createdon],[description],[organizationid] FROM dbo.entity ORDER BY createdon DESC) TOTAL) TOTAL 。
这里生成的 SQL 执行失败:
1.2 次SELECT COUNT(*)
2.分页信息丢失了,没有生成分页的 SQL 语句。
详细堆栈日志
No response
Comment From: miemieYaho
先查count再分页
Comment From: kaizhutongxie
先查count再分页
int totalCount = _queryViewFinderService.count(lambdaQueryWrapper);
-----totalCount=38
IPage datas = _queryViewFinderService.page(new Page<>(page, pagesize),lambdaQueryWrapper);
报错信息:
### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'OFFSET'. ### The error may exist in com/xms/queryview/data/QueryviewMapper.java (best guess) ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: SELECT queryviewid,[name],[description],[isdefault],[fetchconfig],[layoutconfig],[createdon],[createdby],[modifiedon],[modifiedby],[ownerid],[isprivate],[entityid],[entityname],[issimplefilter],[iscustombutton],[custombuttons],[authorizationenabled],[aggregateconfig],[targetformid],[statecode] FROM dbo.queryView WHERE ([entityid] = ?) OFFSET ? ROWS FETCH NEXT ? ROWS ONLY ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'OFFSET'. ; uncategorized SQLException; SQL state [S0001]; error code [102]; Incorrect syntax near 'OFFSET'.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'OFFSET'.
Comment From: miemieYaho
更新版本
Comment From: kaizhutongxie
版本信息:
com.baomidou
mybatis-plus-boot-starter
3.5.7
com.baomidou
mybatis-plus-generator
3.5.7
执行page时报错:
提示
### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'. ### The error may exist in com/xms/schema/data/EntityMapper.java (best guess) ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: SELECT [entityid],[name],[logenabled],[localizedname],[iscustomizable],[authorizationenabled],[entitymask],[duplicateenabled],[workflowenabled],[parententityid],[entitygroups],[createdby],[createdon],[description],[organizationid] FROM dbo.entity OFFSET ? ROWS FETCH NEXT ? ROWS ONLY ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'. ; uncategorized SQLException; SQL state [S0001]; error code [102]; Incorrect syntax near '@P0'.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'.
Comment From: kaizhutongxie
另外提一嘴,可以断点看到生成T-SQL的代码吗?
Comment From: miemieYaho
什么tsql?你把分页插件指定一下数据库类型为sqlserver高的那个版本试试呢