当前位置: 首页 > 知识库问答 >
问题:

oracle缓存与mybatis查询结果混乱(无法获得最新结果)

晋天逸
2023-03-14

我的环境是:
Spring Boot+Mybatis+Oracle 10g+JDK1.8

我在oracle中得到了一个名为book的表,如下所示:

+---------+------+--------+
| book_id | name | number |
+---------+------+--------+
|       1 | b1   |    123 |
|       2 | b2   |    123 |
|       3 | b3   |   2343 |
+---------+------+--------+
3 rows in set (0.00 sec)

我用我编写的映射器使它工作并成功地显示了它。但是当我用plsql在这个表中插入了2条记录后,当我用mybatis映射器查询它时,我仍然得到了相同的3条记录,而不是所有的5条记录(如下所示)。

+---------+------+--------+  
| book_id | name | number |  
+---------+------+--------+  
|       1 | b1   |    123 |  
|       2 | b2   |    123 |  
|       3 | b3   |   2343 |  
|       4 | b4   |  22343 |  
|       5 | b5   |     43 |  
+---------+------+--------+  
5 rows in set (0.00 sec) 
alter table book nocache
# Spring
spring.resources.static-locations=classpath:/static/

# MyBatis
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.local-cache-scope=statement
# DataSource 1
spring.datasource.db1.url=jdbc:oracle:thin:@*******
spring.datasource.db1.username=***
spring.datasource.db1.password=***
spring.datasource.db1.driver-class-bookName=oracle.jdbc.OracleDriver

映射器

@Mapper
@Qualifier("bookMapper")
public interface BookMapper {
    @Select({"select * from book"})
    @Options(useCache = false)
    @Results({
            @Result(property = "bookId",column = "book_id"),
            @Result(property = "bookName",column = "book_name"),
            @Result(property = "bookNumber",column = "book_number")
    })
    List<BookEntity>  getALL();
//    insertBook();
}

实体

public class BookEntity {
    long bookId;
    String bookName;
    int bookNumber;

    //getters and setters


}

共有1个答案

糜正业
2023-03-14

该问题与缓存清除无关。

我认为除了在insert(一个DML)语句之后发出commit之外,没有问题。

如果不发出commit,则只能从另一个会话获得3条记录。

 类似资料:
  • 这里是Hadoop新手。我想计算文本中每行词的共读数,比如一个词与其他词出现在同一行中的次数。为此,我创建了一个特殊的单词对类,所以MapReduce将给出单词对,然后是计数。问题是,结果搞砸了,我不知道我错在哪里。

  • 问题内容: 我正在尝试找到一种方法来缓存不会随频率变化的查询结果。例如,来自电子商务的产品类别(手机,电视等)。我正在考虑使用模板片段缓存,但是在这个片段中,我将遍历这些类别的列表。该列表在网站的任何部分都可用,因此在我的文件中。渲染模板时是否总是要发送类别列表?还是有更动态的方法来执行此操作,以使列表始终在模板中可用? 问题答案: 将缓存的查询弹出到Django的缓存中: 然后创建一个上下文处理

  • 问题内容: 我使用MSSQL和ADO运行各种SQL语句。 代码序列如下所示: 如果SQL返回结果为空,则最后一条语句将失败。如何检查这种情况以避免运行时错误? 注意:SQL语句来自用户在其中键入SQL的备忘录。 问题答案: 如果您的查询返回记录集(报表),你应该 不 使用,而只是或。 对于不返回记录集例如查询/ / ,使用。在大多数情况下,您会通过查询返回。 其他SQL语句,你应该使用是/ / /

  • 问题内容: 我如何能够在oracle查询中为几个组获得N个结果。 例如,给定下表: 有更多行和更多职业。我想从每个职业中聘请三名员工(可以说)。 有没有不用子查询就可以做到这一点的方法? 问题答案: 这将产生所需的内容,并且不使用供应商特定的SQL功能(例如TOP N或RANK())。 在此示例中,它为三位雇员提供每个职业emp_id最低的值。您可以更改不等式比较中使用的属性,以使其按名称或其他方

  • 结果缓存 1,用于加速热门数据的访问速度,Dubbo 提供声明式缓存,以减少用户加缓存的工作量 2。 缓存类型 lru 基于最近最少使用原则删除多余缓存,保持最热的数据被缓存。 threadlocal 当前线程缓存,比如一个页面渲染,用到很多 portal,每个 portal 都要去查用户信息,通过线程缓存,可以减少这种多余访问。 jcache 与 JSR107 集成,可以桥接各种缓存实现。 缓存

  • 要运行查询,在工具栏中点击 运行 。如果查询语句是正确的,该查询将被运行,如果该查询应该返回数据,结果 选项卡会打开查询返回的数据。如果运行查询时发生错误,运行停止,显示相应的错误信息。 结果 选项卡以网格显示查询返回的结果数据。数据可以用两种模式显示:网格查看 和 表单查看。详细信息请看表查看 器。 提示:Navicat 支持返回 10 个结果集。 注意:你可以通过选择 查看 -> 显示结果 -