Mr.Li128 2023-05-15 11:00 采纳率: 12.5%
浏览 39
已结题

Mybatis-plus

Mybatis-plus使用selectMapsPage()查询,在数据库表中新增的字段,使用该方法返回结果中没有新增的字段
如何处理才能让表中新增的字段同步在查询结果中展示

  • 写回答

4条回答 默认 最新

  • Leodong. 2023-05-15 11:03
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    如果使用 Mybatis-plus 的 selectMapsPage() 方法查询数据,而在数据库表中新增了字段,查询结果中没有新增的字段,这可能是因为 Mybatis-plus 的缓存机制导致的。

    解决这个问题的方法是清除 Mybatis-plus 的缓存,重新生成 SQL 语句,以便查询出新增的字段。以下是具体的步骤和代码实现:

    1、 在 Mybatis-plus 的配置文件中,找到缓存配置,将缓存类型设置为 NONE,表示禁用缓存:

    <!-- Mybatis-plus 配置 -->
    <configuration>
        <!-- 禁用缓存 -->
        <settings>
            <setting name="cacheEnabled" value="false" />
        </settings>
    </configuration>
    

    2、 在执行查询之前,手动清除 Mybatis-plus 的缓存,以便重新生成 SQL 语句:

    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    import java.util.List;
    import java.util.Map;
    
    @Service
    public class UserService extends ServiceImpl<UserMapper, User> {
    
        @Resource
        private UserMapper userMapper;
    
        public List<Map<String, Object>> getUserList(int current, int size) {
            // 清除缓存
            clear();
            // 构造查询条件
            QueryWrapper<User> wrapper = new QueryWrapper<User>()
                    .select("id", "name", "age", "gender", "new_field")  // 查询新增的字段
                    .orderByDesc("id");
            // 分页查询
            Page<Map<String, Object>> page = new Page<>(current, size);
            return userMapper.selectMapsPage(page, wrapper).getRecords();
        }
    
        private void clear() {
            // 获取 Mybatis-plus 的缓存管理器
            Cache cache = getBaseMapper().getSqlSession().getConfiguration().getCache("com.example.mapper.UserMapper");
            // 清除缓存
            cache.clear();
        }
    }
    

    在上述代码中,我们创建了一个 UserService 类,并在其中定义了一个 getUserList() 方法,用于查询用户列表。在该方法内部,我们首先调用 clear() 方法清除 Mybatis-plus 的缓存,然后构造查询条件,并使用 selectMapsPage() 方法执行分页查询。

    需要注意的是,在 clear() 方法中,我们首先获取 Mybatis-plus 的缓存管理器,然后调用 clear() 方法清除缓存。我们通过 getBaseMapper() 方法获取到 UserMapper 对象,并调用 getSqlSession() 方法获取到 Mybatis 的 SqlSession 对象,最后获取到缓存管理器。在获取缓存管理器时,需要指定 Mapper 的全限定名。

    这样,当我们使用 selectMapsPage() 方法查询用户列表时,就能够获取到新增的字段了。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月15日
  • 创建了问题 5月15日

悬赏问题

  • ¥15 Qt4代码实现下面的界面
  • ¥15 prism提示我reinstall prism 如何解决
  • ¥15 asp.core 权限控制怎么做,需要控制到每个方法
  • ¥20 while循环中OLED显示中断中的数据不正确
  • ¥15 这个视频里的stm32f4代码是怎么写的
  • ¥15 JNA调用DLL报堆栈溢出错误(0xC00000FD)
  • ¥15 请教SGeMs软件的使用
  • ¥15 自己用vb.net编写了一个dll文件,如何只给授权的用户使用这个dll文件进行打包编译,未授权用户不能进行打包编译操作?
  • ¥50 深度学习运行代码直接中断
  • ¥20 需要完整的共散射点成像代码