Python 官方文档:入门教程 => 点击学习
目录mybatis-plus查询无数据先说说背景然后最开始根据经验做了几个判断根据以上3点开始排查 mybatis-plus查询操作一、查询二、分页mybatis-plus
由于本周工作原因,spring系列放到下周写,今天分享一个实际开发中出现的问题和解决办法。
事情是这样的,我们上线了一个缴费系统,但是一到高峰缴费,就会出现通过手机号查询不到个人的缴费信息。只要重启,能好那么一下,然后隔一段时间,就又不行了。而且这块还发现一点奇怪的规律,比如查询某个号码的,发现是点了9次之后,才会出现,之后便会一直这样。
使用的技术是SpringBoot+spring mvc+mybatis-plus,数据库是sqlserver(查的别人的库)
ps:由于事情过去一段时间了,当时忘了截图,这里可能是纯文字描述,请见谅。
1、是不是mybatis-plus的bug,连sqlserver有问题?
2、是不是mybatis-plus的缓存问题,从缓存中取数据取不到?
1、debug mybatis源码,发现没问题,pass。
2、将缓存设置去掉,不启用缓存,发现还会出问题,不是这个问题
3、如果是超时,应该是有日志,但是日志是没有的,也不是这个问题,而且放到本地,调高并发量测试,也是没有问题的。
来来回回搞了好久,都不行。最后没办法,把日志级别调到trace,开启打印sql语句,看看是不是sql语句搞的鬼,果不其然,发现一些问题。
sql语句最开始是都正常的,但是当查询不到数据的时候,sql语句最后被拼接上了分页,而且查的10行到20行的数据(为什么刚好查询的是10行到20行?最开始我提到了”比如查询某个号码的,发现是点了9次之后,才会出现,之后便会一直这样“),所以查不到。但是为啥点击第2-8次的时候,不出现,我也没搞明白,有清楚的还请告知一下。
几经周折发现,mybatis配置了这么一项:
注意画红框地方,这个就是打开localpage模式。
supportMethodsArguments 这个值默认是false,被设置了true,因此mybatis会自动拼接自动分页。
把这个改成false或者直接去掉,就好了。完美解决。
当然啦,大家一般都不会设置这个参数,这里只是给大家做一个参考。
1.1、普通查询
@Test
public void selectById() {
User user = userMapper.selectById(1412963147760857089L);
System.out.println(user);
}
查询结果:
1.2、通过多个ID批量查询
//多个id批量查询
@Test
public void testSelectByIds(){
List<User> users = userMapper.selectBatchIds(Arrays.asList(1412963147760857089L,1413086639927959553L,1413087102014337026L));
System.out.println(users);
}
查询结果:
1.3、简单条件查询
//简单条件查询
@Test
public void selectSimpleTerm(){
Map<String,Object> columnMap = new HashMap<>();
columnMap.put("name","lucyYY");
columnMap.put("age",20);
List<User> users = userMapper.selectByMap(columnMap);
System.out.println(users);
}
查询结果:
2.1、分页插件
MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能。
2.2、添加分页插件
配置类中添加@Bean配置:
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
2.3、测试selectPage分页
通过page对象获取相关数据:
//分页查询
@Test
public void testSelectPage(){
Page<User> page = new Page(2,3);
Page<User> userPage = userMapper.selectPage(page, null);
//返回对象得到的分页数据
long pages = userPage.getPages(); //总页数
long current = userPage.getCurrent();//当前页
List<User> records = userPage.getRecords();//查询到的分页数据
long total = userPage.getTotal();//总记录数
boolean hasNext = userPage.hasNext();//是否还存在上一分页
boolean hasPrevious = userPage.hasPrevious();//是否还存在下一分页
System.out.println(pages);
System.out.println(current);
System.out.println(records);
System.out.println(total);
System.out.println(hasNext);
System.out.println(hasPrevious);
}
查询结果:
2.4、测试selectMapPage分页
当指定了特定的查询列时,希望分页结果列表只返回被查询的列,而不是很多null值。这时就可以测试selectMapsPage分页:结果集是Map。
//根据特定条件查询结果
@Test
public void testSelectMapPage(){
Page<Map<String,Object>> page = new Page<>(1,5);
Page<Map<String,Object>> pageParam = userMapper.selectMapsPage(page,null);
List<Map<String,Object>> records = pageParam.getRecords();
records.forEach(System.out::println);
System.out.println(pageParam.getCurrent());
System.out.println(pageParam.getPages());
System.out.println(pageParam.getSize());
System.out.println(pageParam.getTotal());
System.out.println(pageParam.hasNext());
System.out.println(pageParam.hasPrevious());
}
查询结果:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: mybatis-plus查询无数据问题及解决
本文链接: https://www.lsjlt.com/news/174370.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0