权限管理的概述以及vue开发前端的路由、菜单、按钮权限控制实现方案

news2024/11/17 6:44:02

在这里插入图片描述

1. 权限管理概念

1.1 权限定义

权限管理是确保用户只能访问被授权资源的机制。在计算机系统中,权限通常指对特定数据或功能的访问权。权限的设置和控制对于保护数据安全和系统安全至关重要。

1.2 前端权限控制重要性

前端权限控制是用户与应用交互的第一道防线。它不仅能够提升用户体验,通过隐藏未授权的功能减少用户的困惑,还能作为后端权限控制的补充,降低未授权访问的风险。有效的前端权限控制可以减少不必要的服务器请求,提高应用性能,并增强应用的安全性。

2. 前端权限控制实现策略

2.1 角色与权限的映射

在前端实现权限控制,首先需要定义角色与权限的映射关系。这通常通过角色-权限矩阵来实现,每个角色分配一组权限,用户根据其角色获得相应的权限。

2.2 动态路由控制

根据用户的角色动态生成路由,确保用户只能访问其拥有权限的页面。这可以通过在路由配置中添加角色信息,并在应用启动时根据用户角色动态加载路由来实现。

2.3 按钮级别的权限控制

对于按钮级别的权限控制,可以在界面组件中使用权限标识来控制显示。例如,使用 v-if 指令结合用户权限来判断是否渲染某个按钮。

2.4 请求拦截

在前端使用请求拦截器,根据用户权限对请求进行拦截,防止未授权的请求发送到服务器。例如,可以在请求头中添加权限标识,并在后端进行验证。

2.5 权限缓存与更新

用户权限应该被缓存以减少频繁的权限验证请求,同时需要提供权限更新机制,以响应权限变更的场景。

3. Vue中的权限管理实现

3.1 Vue Router 路由守卫

利用 Vue Router 的路由守卫功能,可以实现基于角色的路由访问控制。通过 beforeEachbeforeEnter 守卫,可以判断当前用户的角色,并据此允许或重定向路由。

3.2 Vuex 管理用户状态

使用 Vuex 存储和管理用户的角色和权限信息,可以在全局范围内方便地访问这些信息,并在需要时进行状态更新。

3.3 自定义指令

创建自定义指令,如 v-permission,用于简化按钮级别的权限控制。通过该指令,可以直接在元素上声明所需的权限,指令内部处理是否显示该元素的逻辑。

3.4 与后端API的协作

前端权限控制需要与后端API紧密协作,后端API需要提供用户角色和权限信息,并在处理请求时进行权限验证。

3.5 权限变更的处理

实现一个机制来监听和响应权限的变更,例如,当用户角色更新后,前端需要重新加载用户的权限信息,并更新界面上的权限控制。

2. 前端权限控制策略

2.1 接口权限控制

接口权限控制是前端权限管理的基础,通常采用JWT(Json Web Tokens)或者OAuth等认证机制来实现。

  • 认证机制:用户登录后,服务端生成一个包含用户身份信息的token,前端在每次请求时将token发送给后端进行验证。
  • 请求拦截器:在前端框架(如Vue)中,可以使用请求拦截器来统一处理请求头的token添加,简化代码。
  • 响应拦截器:通过响应拦截器来处理token过期、无效等问题,如在Vue中使用axios拦截器:
    axios.interceptors.request.use(config => {
      config.headers['Authorization'] = `Bearer ${getToken()}`;
      return config;
    });
    axios.interceptors.response.use(response => {
      if (response.data.code === 401) {
        // token过期处理逻辑
      }
      return response;
    }, error => {
      if (error.response.status === 401) {
        // token过期处理逻辑
      }
      return Promise.reject(error);
    });
    

2.2 路由权限控制

路由权限控制是实现前端权限管理的关键环节,Vue中通常通过路由守卫来实现。

  • 路由守卫:在Vue Router中,可以使用全局路由守卫或者单个路由的守卫来控制访问权限。
  • 动态路由:根据用户的角色和权限动态生成路由,只有用户有权限访问的路由才会被渲染。
  • 路由元信息:在路由配置中添加元信息字段,如rolespermission,用于标识该路由需要的权限。
  • 示例代码
    const router = new VueRouter({
      routes: [
        {
          path: '/admin',
          component: Admin,
          beforeEnter: (to, from, next) => {
            if (hasRole('admin')) {
              next();
            } else {
              next({ path: '/403' });
            }
          }
        },
        {
          path: '/403',
          component: () => import('@/views/403.vue')
        }
      ]
    });
    

2.3 按钮权限控制

按钮权限控制是权限管理中粒度更细的控制,通常在视图层进行控制。

  • v-if指令:在Vue中,可以使用v-if指令来控制按钮的显示,根据用户权限动态渲染按钮。
  • 自定义指令:可以创建一个自定义指令,如v-has,来简化按钮权限的判断逻辑。
  • 示例代码
    Vue.directive('has', {
      bind: function (el, binding, vnode) {
        const { value } = binding;
        const permissions = vnode.context.$route.meta.btnPermissions;
        if (!value || !permissions.includes(value)) {
          el.parentNode.removeChild(el);
        }
      }
    });
    
    使用:
    <el-button @click="editClick" type="primary" v-has="'edit'">编辑</el-button>
    

2.4 菜单权限控制

菜单权限控制是前端权限管理的另一个重要方面,通常与路由权限控制相结合。

  • 菜单动态渲染:根据用户的角色和权限动态生成菜单项,只有用户有权限看到的菜单项才会被渲染。
  • 后端配合:后端需要提供用户权限信息,前端根据这些信息来控制菜单的显示。
  • 示例代码
    const menuData = await getUserInfo();
    const accessMenu = menuData.accessMenu;
    const routerMap = accessMenu.map(item => ({
      path: item.path,
      component: () => import(`@/views/${item.component}.vue`),
      name: item.name,
      meta: { roles: item.roles }
    }));
    router.addRoutes(routerMap);
    

2.5 请求控制

请求控制是前端权限管理的最后一道防线,用于拦截越权请求。

  • 请求拦截器:在发送请求时,检查用户是否具有相应的权限,如果没有,则拦截请求。
  • 示例代码
    axios.interceptors.request.use(config => {
      const userPermissions = getUserPermissions();
      const requiredPermission = config.url.match(/\/(api\/.*)\//)[1];
      if (!userPermissions.includes(requiredPermission)) {
        return Promise.reject(new Error('Unauthorized'));
      }
      return config;
    });
    

3. Vue中的路由权限控制实现

3.1 路由守卫

路由守卫是Vue Router中用于控制路由跳转的重要机制,可以基于用户权限来控制路由的访问。

  • 全局守卫:在Vue Router实例中使用beforeEachbeforeEnter等方法设置全局守卫,对所有路由跳转进行前置检查。
  • 权限拦截:通过判断用户的角色或权限,决定是否允许访问特定路由。例如,只有管理员角色可以访问管理后台。
router.beforeEach((to, from, next) => {
  const userRole = localStorage.getItem('userRole'); // 假设用户角色存储在本地存储中
  if (to.matched.some(record => record.meta.requiresAdmin)) {
    if (userRole !== 'admin') {
      next('/unauthorized'); // 重定向到无权限访问页面
    } else {
      next(); // 管理员可以访问
    }
  } else {
    next(); // 非管理员路由,直接访问
  }
});

3.2 动态路由加载

动态路由加载是指根据用户权限动态地加载和显示路由,确保用户只能看到和访问他们有权限的路由。

  • 后端角色信息:从后端获取用户的角色和权限信息,通常在用户登录后由后端返回。
  • 动态添加路由:根据用户的角色和权限信息,动态构建和添加路由到Vue Router中。
// 假设从后端获取到的路由权限数据
const permissions = ['dashboard', 'user', 'profile'];

// 根据权限动态添加路由
permissions.forEach(permission => {
  if (permission === 'dashboard') {
    router.addRoute({
      path: '/dashboard',
      component: Dashboard,
      name: 'dashboard'
    });
  }
  // 根据其他权限添加更多路由...
});

通过这种方式,可以确保只有用户有权限访问的路由才会被加载和显示,实现按钮级别的权限控制。同时,这也有助于提升应用的性能,因为只有必要的路由组件会被加载。

4. 按钮级别权限控制策略

4.1 使用v-if进行按钮权限控制

在Vue中,可以通过v-if指令来控制按钮的显示,从而实现按钮级别的权限控制。这种方法简单直接,适用于权限控制逻辑较为简单的情况。

  • 实现方式:在按钮的v-if指令中加入权限判断逻辑,只有当用户拥有相应权限时,按钮才会显示。

  • 示例代码

    <template>
      <el-button
        v-if="hasPermission('edit')"
        @click="editClick"
        type="primary">
        编辑
      </el-button>
    </template>
    
    <script>
    export default {
      data() {
        return {
          // 假设用户权限列表
          permissions: ['edit', 'delete']
        };
      },
      methods: {
        hasPermission(permission) {
          return this.permissions.includes(permission);
        },
        editClick() {
          // 编辑操作
        }
      }
    };
    </script>
    
  • 优点:实现简单,易于理解和维护。

  • 缺点:随着权限逻辑的复杂化,可能会导致模板中的逻辑过于复杂,难以维护。

4.2 自定义指令实现按钮权限控制

自定义指令是Vue中一种强大的功能,可以用来封装和复用DOM操作逻辑。通过自定义指令,可以实现更灵活和可复用的按钮权限控制。

  • 实现方式:创建一个全局或局部的自定义指令,用于判断用户是否具有执行按钮操作的权限。

  • 示例代码

    <template>
      <el-button
        v-has="['edit']"
        @click="editClick"
        type="primary">
        编辑
      </el-button>
    </template>
    
    <script>
    import Vue from 'vue';
    
    Vue.directive('has', {
      bind(el, binding, vnode) {
        const { value } = binding;
        const permissions = vnode.context.$route.meta.permissions || [];
        if (!permissions.includes(value)) {
          el.parentNode.removeChild(el);
        }
      }
    });
    
    export default {
      data() {
        return {
          // 假设当前路由的权限列表
          routePermissions: ['edit', 'view']
        };
      },
      methods: {
        editClick() {
          // 编辑操作
        }
      }
    };
    </script>
    
  • 优点:提高了代码的复用性和可维护性,逻辑更加清晰。

  • 缺点:实现相对复杂,需要对Vue的自定义指令有较深的理解。

  • 权限数据的获取:权限数据可以通过后端接口获取,并存储在Vuex或组件的data中。在路由守卫或组件的created钩子中进行初始化。

  • 权限数据的存储:建议将权限数据存储在Vuex的state中,这样可以在全局范围内访问和使用。

  • 权限数据的更新:在用户登录或权限变更时,需要更新存储的权限数据,以确保权限控制的准确性。

通过上述两种策略,可以实现Vue应用中按钮级别的权限控制,确保用户只能看到和操作他们有权限的内容。

5. 菜单权限控制

5.1 菜单与路由分离

在Vue应用中,实现菜单权限控制的一种有效方法是将菜单与路由分离。这种方法的核心思想是将菜单的显示逻辑与路由的访问控制逻辑分开处理。

  • 前端定义路由信息:前端只定义路由的路径、组件和名称等基本信息,不包含任何权限信息。这样做的好处是,即使菜单信息发生变化,也不会影响路由的结构。

    {
      name: "login",
      path: "/login",
      component: () => import("@/pages/Login.vue")
    }
    
  • 后端返回菜单数据:菜单数据由后端服务提供,前端通过API获取菜单信息,并根据用户的角色和权限动态生成菜单。这种方式使得菜单的维护和更新更加灵活,不需要每次更改菜单时都重新编译前端代码。

  • 权限校验:在全局路由守卫中,根据用户的权限和后端返回的菜单数据,动态决定是否显示某个菜单项。如果用户没有权限访问某个菜单项,则在前端不显示该项。

  • 性能优化:由于菜单数据是动态生成的,可以利用前端缓存机制,减少对后端API的请求次数,提高应用的性能。

  • 用户体验:用户只能看到自己有权限访问的菜单项,这有助于提升用户体验,避免用户看到无法访问的菜单项而产生困惑。

5.2 后端返回菜单数据

后端返回菜单数据是实现菜单权限控制的关键步骤。后端需要根据用户的角色和权限,返回相应的菜单信息。

  • 菜单数据结构:后端返回的菜单数据通常包含菜单项的名称、路径、图标、子菜单等信息。这些信息需要与前端的路由信息相对应。

    [
      {
        "name": "home",
        "path": "/",
        "component": "home"
      },
      {
        "name": "home",
        "path": "/userinfo",
        "component": "userInfo"
      }
    ]
    
  • 权限过滤:后端在返回菜单数据时,需要根据用户的权限进行过滤,只返回用户有权限访问的菜单项。这通常涉及到对用户角色和权限的查询和判断。

  • 动态菜单生成:前端在获取到后端返回的菜单数据后,需要动态生成菜单。这可以通过递归遍历菜单数据,根据每个菜单项的路径和组件信息,动态创建路由对象。

  • 路由守卫集成:在全局路由守卫中,需要集成对菜单数据的权限校验。当用户尝试访问某个路由时,前端需要检查用户是否有权限访问该路由对应的菜单项。

  • 安全性考虑:后端在返回菜单数据时,需要确保数据的安全性,避免泄露敏感信息。同时,前端在处理菜单数据时,也需要进行安全校验,防止跨站脚本攻击(XSS)等安全问题。

通过上述方法,可以实现Vue应用中的菜单权限控制,确保用户只能访问到自己有权限的菜单项,从而提高应用的安全性和用户体验。

6. 安全性考虑

6.1 前端权限与后端权限的配合

在进行Vue权限管理时,前端和后端的紧密配合是确保系统安全性的关键。前端权限管理主要是提升用户体验和初步过滤请求,而后端权限验证则是最终的权限控制保障。

角色与权限的后端校验

  • 角色与权限数据应该在后端进行集中管理,通过数据库存储角色与权限的映射关系。
  • 用户登录后,后端根据用户的角色分配相应的权限,并生成一个包含权限信息的JWT(Json Web Tokens),随登录响应返回给前端。

前端权限的实现

  • 前端根据JWT中的权限信息动态展示菜单和按钮。使用如v-if或自定义指令v-has来控制DOM元素的显示与隐藏。
  • 前端路由守卫结合路由元信息(如meta.rolesmeta.btnPermissions)来判断用户是否有权限访问特定路由或操作。

请求拦截与响应处理

  • 使用axios拦截器在请求发出前添加权限验证,如检查JWT的合法性。
  • 响应拦截器用于处理后端返回的权限相关错误,如401未认证或403无权限,根据情况可能需要重定向到登录页或显示错误提示。

按钮级别的权限控制

  • 对于按钮级别的权限控制,可以在路由或组件的元信息中定义所需的权限。
  • 自定义指令v-has可以被用于按钮或其他元素上,通过比较当前用户权限与所需权限来决定是否渲染该元素。

安全性最佳实践

  • 避免将敏感操作的权限控制仅放在前端实现,以防被绕过。
  • 定期审计权限控制逻辑,确保没有配置错误或遗漏。
  • 对权限数据进行敏感性分类,对于高风险操作增加额外的验证机制,如二次确认或验证码。

跨域与CSRF防护

  • 在设置CORS策略时,只允许信任的域名访问资源。
  • 使用CSRF Token来防止跨站请求伪造攻击,每次表单提交或重要请求都应包含此Token。

总结

权限管理是一个多层次、多维度的工作,需要前后端共同协作,形成一套完整的安全机制。前端负责界面的展示控制和初步的权限校验,而后端则进行最终的权限判断和数据安全防护。只有两者紧密结合,才能确保应用的安全性和数据的完整性。

7. 总结

在Vue中实现权限管理,尤其是控制到按钮级别的权限,需要综合考虑前端与后端的配合,以及路由、菜单和按钮权限的控制策略。以下是对整个研究主题的总结:

7.1 权限管理的重要性

权限管理是确保应用安全性的关键环节,它能够保证用户只能访问他们被授权的资源。在Vue应用中,这通常涉及到对路由、菜单和按钮等界面元素的访问控制。

7.2 前端权限控制策略

前端权限控制主要通过以下几种方式实现:

  • 路由权限控制:通过全局路由守卫或路由元信息来控制页面访问权限。
  • 菜单权限控制:将菜单与路由分离,根据用户权限动态显示菜单项。
  • 按钮权限控制:使用v-if指令或自定义指令来控制按钮的显示与隐藏。

7.3 后端权限控制策略

后端权限控制是安全的基础,通常通过以下方式实现:

  • 接口权限验证:使用如JWT等token机制来验证用户请求。
  • 角色与权限的后端校验:确保用户请求的接口和操作符合其角色和权限。

7.4 技术实现

技术实现方面,Vue应用可以采用以下方法:

  • 使用Axios拦截器:在请求头中添加token,并在响应中处理token过期等逻辑。
  • 动态路由加载:登录后根据用户权限动态加载可访问的路由。
  • 自定义指令:创建v-has等自定义指令,简化按钮级别的权限判断。

7.5 性能与用户体验

在设计权限管理系统时,需要平衡性能和用户体验:

  • 避免过度的权限判断:减少全局路由守卫中的复杂判断逻辑,提高应用性能。
  • 用户友好的提示:对于无权限的访问请求,给予用户清晰友好的提示。

7.6 安全性

权限管理的安全性至关重要,应确保:

  • 前后端双重验证:前端控制用户界面显示,后端进行安全校验。
  • 定期的安全审计:定期检查权限控制逻辑,修复可能的安全漏洞。

7.7 可维护性与扩展性

设计权限管理系统时,应考虑到系统的可维护性与扩展性:

  • 模块化设计:将权限控制逻辑模块化,便于维护和扩展。
  • 灵活的权限配置:允许通过配置而非代码修改来调整权限设置。

通过上述总结,我们可以看到,Vue中的权限管理是一个多维度、多层次的复杂问题,需要开发者从多个角度进行综合考虑和设计。

如果这篇文章对你有所帮助,欢迎点赞、分享和留言,让更多的人受益。感谢你的细心阅读,如果你发现了任何错误或需要补充的地方,请随时告诉我,我会尽快处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超级好用的免费在线流程图软件

超级好用的免费在线流程图软件 Draw io 是一款免费开源的流程图绘制工具&#xff0c;可在浏览器中使用或下载安装。它提供了简单易用的界面和丰富的图形元素&#xff0c;支持创建各种类型的流程图、组织结构图、网络图等。Draw io 支持导入和导出多种格式&#xff0c;包括 PDF…

从零开始,快速打造API:揭秘 Python 库toapi的神奇力量

在开发过程中&#xff0c;我们常常需要从不同的网站获取数据&#xff0c;有时候还需要将这些数据转化成API接口提供给前端使用。传统的方法可能需要大量的时间和精力去编写代码。但今天我要介绍一个神奇的Python库——toapi&#xff0c;它可以让你在几分钟内创建API接口&#x…

数据库练习——处理表

新建数据库 mysql> create database mydb15_indexstu; Query OK, 1 row affected (0.00 sec)mysql> use mydb15_indexstu; Database changed 新建表 建立student表 mysql> create table student(Sno int primary key auto_increment,-> Sname varchar(30) not …

社区团购系统搭建开发,前端uniapp。社区团购搭建开发定制

目录 前言&#xff1a; 一、社区团购系统有哪些功能&#xff1f; 二、社区团购管理端 三、社区团购的基本流程如下&#xff1a; 总结 &#xff1a; 前言&#xff1a; 社区团购是一种以社区为单位进行的集体购物模式。这种模式利用了互联网平台来组织同一社区内的居民一起购…

Linux I/O 体系结构与访问设备

I/O 体系结构 与外设的通信通常称之为输入输出&#xff0c;一般都缩写为I/O。 在实现外设的I/O时&#xff0c;内核必须处理3个可能出现的问题&#xff1a; &#xff08;1&#xff09;必须根据具体的设备类型和模型&#xff0c;使用各种方法对硬件寻址&#xff1b; &#xff08…

26.x86游戏实战-寻找公共call

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

KeePass密码管理工具部署

KeePass密码管理工具部署 安装包下载入口 双击执行&#xff0c;根据提示完成安装&#xff1a; 安装完成后如图&#xff1a;

RCE和php文件上传

一、远程命令执行&#xff08;RCE&#xff09; RCE漏洞概述 RCE漏洞允许攻击者通过某种方式在目标服务器上执行任意命令。这种漏洞通常出现在服务器端语言中&#xff0c;如PHP。 RCE漏洞原理 PHP中的一些函数可以执行命令或代码&#xff0c;但如果对这些函数的输入未加限制&a…

Java并发(十五)Java并发工具类

CountDownLatch 字面意思为 递减计数锁。用于控制一个线程等待多个线程。 **CountDownLatch**** 维护一个计数器 count&#xff0c;表示需要等待的事件数量。**countDown 方法递减计数器&#xff0c;表示有一个事件已经发生。调用 await 方法的线程会一直阻塞直到计数器为零&a…

程序员如何准备既符合“八股文“又展现实力的面试?

在当今竞争激烈的IT行业中,面试已成为程序员求职路上的一道重要关卡。而在这个过程中,"八股文"这个词频频出现,引发了业内人士的热议。本文将深入探讨"八股文"在程序员面试中的角色,以及它对实际工作的影响。 目录 1. 程序员面试八股文的利弊分析什么是&q…

Unity 预制动态绑定光照贴图遇到变白问题

预制绑定光照贴图&#xff0c;网上解决方案很多&#xff0c;已下是要点&#xff1a; //烘培完场景之后&#xff0c;保存光照贴图信息 void StoreLightmapData() {lightMap.Clear();LightmapData[] lds LightmapSettings.lightmaps;foreach (LightmapData data in lds){Custom…

无人机之科学防汛篇

随着全球气候变化的加剧&#xff0c;极端天气时间频发&#xff0c;汛期防汛工作面临着前所未有的挑战。传统的防汛手段&#xff0c;如人工巡堤、地面监测等&#xff0c;在复杂多变的自然环境下显得力不从心。而无人机技术的快速发展&#xff0c;为科学防汛提供了新的解决方案。…

Java面试八股之Spring AOP 和 AspectJ AOP 的区别

Spring AOP 和 AspectJ AOP 的区别 Spring AOP 和 AspectJ AOP 是两种不同的面向切面编程&#xff08;Aspect-Oriented Programming, AOP&#xff09;实现。它们各有特点&#xff0c;适用于不同的场景。下面是一些主要的区别&#xff1a; 1. 实现机制 Spring AOP: 基于代理…

Python NLTK 情感分析不正确

1、问题背景 一位 Reddit 用户使用 Python 的 NLTK 库来训练一个朴素贝叶斯分类器以研究其他句子的情感&#xff0c;但是无论输入什么句子&#xff0c;分类器总是预测为正面。 2、解决方案 经过仔细检查&#xff0c;发现原始代码中的问题在于 wordList 为空。因此&#xff0…

【LLM】-12-部署Langchain-Chatchat-0.3.x版本

目录 1、0.3与0.2的功能对比 2、0.3.x支持多种部署方式 2.3、源码安装 2.3.1、项目源码下载 2.3.2、创建conda环境 2.3.3、安装poetry 2.3.4、安装依赖库 2.3.5、项目初始化 2.3.6、初始化知识库 2.3.7、启动服务 2.3.8、配置说明 2.3.8.1、basic_settings.yaml 2…

一副穿戴甲背后,5万苏北宝妈如何硬控全球美甲潮流?

2019年的一天&#xff0c;张达在拼多多后台看到一个有趣的订单。“看姓名、联系方式&#xff0c;像表妹下的订单&#xff0c;但我的穿戴甲店才开第二天&#xff0c;她应该不可能知道。”张达回忆。 1993年出生的张达&#xff0c;是江苏东海县人&#xff0c;当地以水晶闻名。高…

达梦数据库的系统视图v$bufferpool

达梦数据库的系统视图v$bufferpool 达梦数据库系统视图V$BUFFERPOOL的主要作用是监控和管理数据库缓冲池的性能。通过查询V$BUFFERPOOL视图&#xff0c;用户可以获取以下关键信息&#xff1a; 缓存命中率&#xff1a;显示缓冲池的命中率&#xff0c;即从缓冲池中成功获取数据的…

嵌入式☞第二组(壹)

C语言基础: 循环的构成&#xff1a; 循环体 循环条件 循环的分类&#xff1a; 无限循环&#xff1a;程序设计中尽量避免无限循环。(程序中的无限循环必须可控) 有限循环&#xff1a;循环限定循环次数或者循环的条件。 当型循环的实现&#xff1a; while 语法 while(循…

【MySQL】索引 【上】 {没有索引的查询/磁盘/mysql与磁盘IO/初识索引}

文章目录 1.没有索引存在的问题2. 认识磁盘MySQL与存储MySQL与磁盘交互基本单位建立共识图解IO认识索引 在关系数据库中&#xff0c;索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构&#xff0c;它是某个表中一列或若干列值的集合和相应的指向表中物…

初学Mybatis之缓存

所有的查询都需要连接数据库&#xff0c;而连接数据库消耗资源 我们可以把一次查询的结果暂时存在一个可以直接获取到的地方&#xff08;内存&#xff1a;缓存&#xff09; 我们再次查询相同数据的时候&#xff0c;直接走缓存&#xff0c;不走数据库 缓存&#xff1a;存在内…