mybatis同时请求执行同一个sql

问题:一个方法调用2次mapper,同样的参数,第二次返回数据为空

打印sql:mybatis提示:

Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1a81108e] from current transaction
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1a81108e]

 

原因分析:MyBatis的缓存机制,查看项目配置后发现问题在于第一次查询到结果会放到缓存中,程序对查到的结果list进行了remove操作,所以缓存中的list会发生变化,第二次查询时会从缓存中将操作过的list查找出来(mybatis返回的实体类的内存地址是相同的),故而产生了我们不需要的结果,之前项目中使用的是与Spring集成的,使用的session是SqlSessionTemplate,这里是默认关闭了一级缓存,而今天项目中没有与Spring集成,创建session使用的是SqlsessionFactory的openSession()方法,这里查找时默认会先从缓存中查询,综上,第二次我们查到的只是缓存中的数据.

解决方案:

方案一:通过SqlSessionUtils.getSqlSession(sqlSessionFactory).clearCache()方法刷新缓存
方案二:在mapper.xml对应的查找语句中添加flushCache=“true”

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型
Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型
Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型
Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。内存中的数据模型可以是任意数据结构或对象模型,存储数据的类型可以是XML,二进制流,关系模型等 ORM:在持久化对象上执行基本的增、删、改、查操作 使用Mybatis的步骤 1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建jdbc statement对象 4、 设置sql语句 5、 设置sql语句中的参数(使用preparedStatement) 6、 通过statement执行sql并获取结果 7、 对sql执行结果进行解析处理 8、 释放资源(resultSet、preparedstatement、connection)Spring MVC简介 基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,处理请求,支持restful。 三层结构:表现层、业务层、持久层 设计模式:Model(模型)、View(视图)、Controller(控制器) Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型
Spring Boot整合MyBatis中,如果要使用自定义的SQL语句,可以按照以下步骤进行操作: 1. 在Spring Boot的启动类上使用@MapperScan注解,并指定要扫描的mapper接口的包路径。例如,使用@MapperScan("com.springmybatis.mapper")注解来扫描com.springmybatis.mapper包下的mapper接口。 2. 创建一个Controller类,使用@RestController注解来标识这是一个Restful接口的控制器类。 3. 在Controller类中,使用@Autowired注解自动注入对应的Service实例。例如,使用@Autowired UserServiceImpl userService来注入UserServiceImpl实例。 4. 在Controller类中定义自定义的SQL查询方法,并使用@GetMapping注解来标识这是一个GET请求的处理方法。例如,使用@GetMapping("/seAll")注解来处理/seAll的GET请求。 5. 在自定义的SQL查询方法中,调用相应的Service方法执行自定义的SQL查询。例如,使用userService.seAll()来执行自定义的SQL查询,并返回查询结果。 通过以上步骤,你可以在Spring Boot整合MyBatis中使用自定义的SQL查询语句。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [springboot整合Mybatis-plus 且用xml自定义sql](https://blog.csdn.net/qq_47848696/article/details/117930682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [springboot 整合 mybatis 注解 sql 语句](https://blog.csdn.net/wsjzzcbq/article/details/91492700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值