慕雪年少 2024-02-29 14:55 采纳率: 50%
浏览 31

前端请求三次只有一次走了接口,剩下两次sql语句依旧是修改之前的,怎么才能每次都走后台接口

若依system模块登录日志页面。
前端发起三次请求,只有一次走到了后端接口,剩下的两次报sql语句错误(sql语句已经修改了)。

"msg": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: FUNCTION ry-cloud.to_date does not exist\r\n### The error may exist in file [E:\IDEAoffice\EMSProjectSource\code\RuoYi-Cloud-v2\RuoYi-Cloud\ruoyi-modules\ruoyi-system\target\classes\mapper\system\SysLogininforMapper.xml]\r\n### The error may involve com.ruoyi.system.mapper.SysLogininforMapper.selectLogininforList-Inline\r\n### The error occurred while setting parameters\r\n### SQL: SELECT count(0) FROM sys_logininfor WHERE to_date(access_time, 'yyyymmdd') >= to_date(?, 'yyyymmdd') AND to_date(access_time, 'yyyymmdd') <= to_date(?, 'yyyymmdd')\r\n### Cause: java.sql.SQLSyntaxErrorException: FUNCTION ry-cloud.to_date does not exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: FUNCTION ry-cloud.to_date does not exist",

清除redis缓存,idea缓存都没有用。
mybatis一级缓存刷新和二级缓存禁用(在下面代码flushCache="true" useCache="false")。
怎么才能每次发起请求都走后台接口?
具体代码如下:

```xml
<select id="selectLogininforList" flushCache="true" useCache="false" parameterType="com.ruoyi.system.api.domain.SysLogininfor" resultMap="SysLogininforResult">
        select info_id, user_name, ipaddr, status, msg, access_time from sys_logininfor
        <where>
            <if test="ipaddr != null and ipaddr != ''">
                AND ipaddr like concat('%', #{ipaddr}, '%')
            </if>
            <if test="status != null and status != ''">
                AND status = #{status}
            </if>
            <if test="userName != null and userName != ''">
                AND user_name like concat('%', #{userName}, '%')
            </if>
            <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
                and access_time &gt;= #{params.beginTime}
            </if>
            <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
                and access_time &lt;= #{params.endTime}
            </if>
        </where>
        order by info_id desc
    </select>



  • 写回答

3条回答 默认 最新

  • 关注

    慕雪年少 下午好🌅🌅🌅
    本答案参考通义千问

    **问题分析:**这个问题可能是由于MyBatis的缓存机制导致的,即使你设置了flushCache="true"useCache="false",但因为存在一级缓存和二级缓存(默认启用),在第一次请求成功获取数据后,后续请求可能会直接从缓存中读取,而不是重新发送请求到后端接口。

    解决方案:

    1. 禁用MyBatis缓存:

      • 一级缓存:在Mapper接口上添加@CacheNamespace注解,并设置cache="false"来禁用一级缓存。例如:
      @Mapper
      @CacheNamespace("ruoyi-system")
      public interface SysLogininforMapper {
          //...
          @CacheNamespace(cache="false")
          List<SysLogininfor> selectLogininforList(SysLogininfor params);
      }
      
      • 二级缓存:如果你使用了全局或局部二级缓存,需要在mybatis-config.xml中配置cacheManagercacheEnabledfalse
    2. 清空所有缓存:

      • 在每次需要更新数据或者确保每次都走接口时,调用SqlSessionclearCache()方法。
      SqlSession sqlSession = sqlSessionFactory.openSession();
      try {
          //...你的业务逻辑...
          sqlSession.clearCache(); // 清除缓存
          List<SysLogininfor> list = sqlSession.selectList("selectLogininforList", params);
          //...
      } finally {
          sqlSession.close();
      }
      
    3. 使用Spring AOP代理:

      • 使用Spring AOP代理可以动态地控制缓存策略。在切面中,你可以设置一个方法拦截器,每次请求时都清除缓存。
      @Aspect
      @Component
      public class CacheClearAspect {
          @Around("execution(* com.ruoyi.system.api.service.SysLogininforService.*(..))")
          public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
              // 清除缓存
              joinPoint.getThis().clearCache();
              return joinPoint.proceed();
          }
      }
      

      然后在SysLogininforService中调用clearCache()方法。

    4. 数据库连接池层面优化:

      • 如果是数据库连接池的问题,确保每次请求都获取新的数据库连接,避免复用导致缓存问题。具体实现依赖于你使用的连接池(如Druid、HikariCP等)。

    遵循以上步骤,你应该能确保每次请求都能走后端接口,而不会受到缓存的影响。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月29日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境