2021年2月17日
用户登录Service层接收到Controller传来的username和password然后到Dao层进行查询时,查询条件本应是Controller传下来的username和password,但是查询条件却是上一次请求的username和password,导致如果请求多次,第一次请求如果输入正确的用户名和密码,那么后续请求无论用户名和密码是否正确,都可以成功,因为查询条件始终是第一次请求的用户名和密码。初步判断原因是Service层的某个实例的作用域为单例所导致。根据初步判断结果得到的初步解决方案为修改Servicez中某个实例的作用域为原型可解决。

2021年2月18日已解决,原因是我使用example组装查询条件(example为mybatis generator生成),spring的ioc容器默认的作用域为单例,导致每次请求的example都是同一个实例,查询条件也都是同一个。解决方法为修改example这个类的作用域为request即每次请求创建一个新的example用来查询。
这里需要注意的地方有:

  1. spring管理bean时默认的作用域就是单例。
  2. controller组件会在每次请求时创建一个新的实例。
  3. controller组件中的service组件如果时默认的作用域,那么不会每次在controller组件请求后得到新的service组件的实例,因为默认是单例。

如果你在阅读本文章时发现其中错误请及时联系我,希望我们共同进步

解决后的代码
Controller:

@Controller
@RequestMapping(value = "/user")
public class UserLoginController {@AutowiredUserLoginService userLoginService;@AutowiredUser user;@AutowiredResponseMessage responseMessage;@RequestMapping(value = "/userLogin.app",method = RequestMethod.POST)@ResponseBodypublic ResponseMessage userLoginByUsernameAndPassword(@RequestBody User user) {this.user = userLoginService.selectUserByUsernameAndPwd(user.getUsername(),user.getPassword());if(this.user != null) {responseMessage.setCode("200");responseMessage.setMsg("登陆成功");responseMessage.setTimestamp(System.currentTimeMillis());return responseMessage;}responseMessage.setCode("100");responseMessage.setMsg("登陆失败,请检查用户名或密码是否有误");responseMessage.setTimestamp(System.currentTimeMillis());return responseMessage;}
}

Service:

@Service
public class UserLoginServiceImpl implements UserLoginService {@Autowiredprivate UserMapper userMapper;@Autowiredprivate UserExample userExample;public User selectUserByUsernameAndPwd(String username, String password) {List<User> list = null;User user = null;UserExample.Criteria userCriteria = userExample.createCriteria();userCriteria.andUsernameEqualTo(username).andPasswordEqualTo(password);list = userMapper.selectByExample(userExample);if(list != null && list.size() != 0) {user = list.get(0);}return user;}
}

example(太长,部分):

@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserExample {protected String orderByClause;protected boolean distinct;protected List<Criteria> oredCriteria;public UserExample() {oredCriteria = new ArrayList<>();}

SSM项目使用example查询时多次查询条件相同相关推荐

  1. 天猫整站SSM项目(三)后台demo---数据查询(一)

    天猫整站SSM项目(三)后台demo---数据查询(一 一.分类查询页面包含的jsp文件 二.查询功能的实现 到这里就开始讲解功能开发了. 开发整站的顺序,通常来说还是按照依赖性来进行,前端需要的数据 ...

  2. TP5使用whereOr查询时致使部分查询条件失效怎么处理

    TP5使用whereOr查询时致使部分查询条件失效怎么处理 $cusList = Db::table('cl_goods') ->where('status', '1')->where(' ...

  3. SSM项目使用junit单元测试时Mybatis通配符加载Mapper不能正常加载

    问题描述:项目使用maven build 以及tomcat run能够正常运行,但是使用junit单元测试时却报错误 Caused by: java.lang.IllegalArgumentExcep ...

  4. mysql查询结果某个字段设置为固定值_MySQL使用select查询时,在查询结果中增加一个字段并指定固定值...

    假设需求是这样的: mysql> desc user; +-------+----------+------+-----+---------+----------------+ | Field ...

  5. 性别字段在数据库中存储数字,查询时,如何查询出数字对应的男和女?(case when的应用)

    今天敲代码的时候,刚好遇到这个问题,写博客记一下. 情况如下:性别字段在数据库中存储的是数字,男对应1,女对应0.然后,查询的时候,我想查询出男和女两个字,而不是1和0. 一开始,我写的sql语句,是 ...

  6. SSM项目调用Dao层查询方法传入正确参数但查不到数据

    2021年2月17日 2用户登录业务层调用Dao层的查询方法后返回的结果不是预期结果,预期结果为执行方法传入正确参数后查询得到查询结果封装的User对象的List集合,实际结果为传入正确参数执行方法后 ...

  7. MySQL IN、Exist关联查询时,我们为什么建议小表驱动大表?

    有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多. 一.优化原则 小表驱动大表,即小的数据集驱动大 ...

  8. 分页查询时如何优化MySQL的性能?

    一般情况下,用Typecho或者Wordpress做博客系统,数据量都不大,所以大家都很少遇到分页导致的性能问题.然而,当数据量上升(譬如做大量产品资料的企业网站),MySQL的分页查询性能问题将越来 ...

  9. MySQL工作笔记-建表时为Float型数据确定精度,查询时精度显示,多列之和查询

    目录 建表时设置精度 查询时设置精度 查询多列之和 建表时设置精度 首先是建表时为float类型设置精度: SQL代码如下: CREATE TABLE `testtable` (`id` int(11 ...

最新文章

  1. 5.6. Spring boot with Logging
  2. 使用内核定时器的second字符设备驱动及测试代码
  3. c语言程序设计填空带答案,c语言程序设计填空题及答案复习用精编-20210414010859.docx-原创力文档...
  4. Find Integer(费马大定理的使用)
  5. mpvue还在维护吗_mpvue 微信小程序开发之生命周期
  6. android style 中一些颜色的定义
  7. 502 Bad Gateway Registered endpoint failed to handle the request
  8. Repeater的嵌套
  9. 腾讯自研分布式远程Shuffle服务Firestorm正式开源
  10. vfp报表纸张设置_Excel表格美化十四招,让你的报表不再那么丑
  11. Java 函数传递对象是引用传递还是值传递?
  12. 美国计算机语言学phd,美国大学语言学(Linguistics)专业PhD排名(转)2013
  13. Python新手需要掌握的知识点
  14. 家藏四库图书系列书目(经典)
  15. snapchat_Snapchat的新地图功能介绍(以及如何禁用它)
  16. 阿里云账号注册流程方法(图文教程)
  17. 【Android 】零基础到飞升 | Service初涉
  18. 哈罗单车打不开锁,显示:“可能卡住了 重新开锁”
  19. 8款高质量小程序推荐:(工具类、电影类、阅读类)
  20. 一度智信:电商推广计划

热门文章

  1. matlab ode45求解齿轮动力学,Matlab拟合动力学参数遇到问题(ode45)
  2. 充电枪cp信号控制板_筋膜枪究竟是不是智商税?体验评测后,我的回答更肯定了...
  3. virsh命令 查看虚拟机镜像_kvm虚拟机操作相关命令及虚拟机和镜像密码修改
  4. python爬虫外快_我用Python爬虫挣钱的那些事
  5. 提高篇 第二部分 字符串算法 第3章 Trie字典树
  6. llinux c 语言延时,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写
  7. python可变参数和关键字参数位置_python笔记——函数的参数(位置参数、默认参数、可变参数、关键字参数、命名关键字参数、参数组合)...
  8. STM32H743+CubeIDE-CanFestival实现两个CANopen Master同时独立运行
  9. c# list集合根据某个字段去重_Python list、dataframe去重
  10. 信息安全工程师笔记-案例分析(三)