SpringBoot + Vue 微人事权限组管理模块 (十四)

权限组前端页面制作

权限组管理角色和菜单之间关系,操作员管理着用户和角色之间的关系。
英文的输入框要有个前缀,SpringSecurity里角色英文名需要加一个ROLE_的前缀
在这里插入图片描述

在这里插入图片描述
上代码

   <div>
       <div class="permissManaTool">
        <el-input placeholder="请输入角色英文名" v-model="role.name">
            <template slot="prepend">ROLE_</template>
        </el-input>
         <el-input placeholder="请输入角色中文名" v-model="role.nameZh"></el-input>
      </div>
   </div>
 data(){
            return{
                role:{
                    name:"",
                    nameZh:"",
                }
            }
        }

添加按钮
在这里插入图片描述

           <el-button type="primary" size="small" icon="el-icon-plus">添加角色</el-button>

添加输入框样式
在这里插入图片描述

    .permissManaTool{
        display: flex;
        justify-content: flex-start;
    }
    .permissManaTool .el-input{
        width: 300px;
        margin-right: 8px;
    }

添加一个折叠面板
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/02579f78440e450db2497be5c21db539.png

![在这里插入图片描述](https://img-blog.csdnimg.cn/d5d150b440f7435ebae4f6a4d3287138.png
可以看出展开了第 2 个
在这里插入图片描述
留一个就够了
在这里插入图片描述
从数据库中获取所有的角色展示到页面,注意后端不仅要返回所有角色还要返回角色操作的菜单,角色能操作哪些资源也要返回

权限用户角色前后端对接

我们先来把所有角色查询出来,在前端展示出来

PermissController

@RestController
@RequestMapping("/system/basic/permiss")
public class PermissController {

    @Autowired
    RoleService roleService;

    @GetMapping("/")
    public List<Role> getAllRoles(){

        return roleService.getAllRoles();
    }
}

RoleService

@Service
public class RoleService {


    @Autowired
    RoleMapper roleMapper;
    public List<Role> getAllRoles(){

        return roleMapper.getAllRoles();
    }
}

RoleMapper

在这里插入图片描述

    List<Role> getAllRoles();

RoleMapper.xml

  <select id="getAllRoles" resultMap="BaseResultMap">
    select *
    from role;
  </select>

对接前端

在这里插入图片描述

 <div style="margin-top: 15px;width: 720px">
           <el-collapse accordion>
               <el-collapse-item  :title="item.namezh" :name="index"  v-for="(item,index) in roles" :key="index">
                   <div>与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;</div>
                   <div>在界面中一致:所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。</div>
               </el-collapse-item>
           </el-collapse>
       </div>

在这里插入图片描述
在这里插入图片描述
展示效果
在这里插入图片描述
里面展示的内容应该是卡片
在这里插入图片描述
组件
在这里插入图片描述
在这里插入图片描述

  <div>
                      <el-card class="box-card">
                          <div slot="header" class="clearfix">
                              <span>卡片名称</span>
                              <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
                          </div>
                          <div v-for="o in 4" :key="o" class="text item">
                              {{'列表内容 ' + o }}
                          </div>
                      </el-card>
                  </div>

在这里插入图片描述
按钮样式改垃圾桶图标
在这里插入图片描述
在这里插入图片描述

 <el-button style="float: right; padding: 3px 0;color: #ff2a0c" type="text" icon="el-icon-delete"></el-button>

权限组菜单树展示

查询所有菜单展示树形结构,需要在服务端做处理返回
查询所有的父子类菜单,自己关联自己三次形成一张表,
在这里插入图片描述

select m1.id as id1,m1.name as name1,m2.id as id2,m2.name as name2,m3.id as id3,m3.name as name3 
 from menu m1,menu m2,menu m3 
where m1.id = m2.parentId and m2.id =m3.parentId and m3.enabled = true  
ORDER BY  m1.id,m2.id,m3.id```

### PermissController
![在这里插入图片描述](https://img-blog.csdnimg.cn/8bf2e5f06fc647038f6066e6603dfa49.png)

```java
@RestController
@RequestMapping("/system/basic/permiss")
public class PermissController {

    @Autowired
    RoleService roleService;

    @Autowired
    MenuService menuService;

    @GetMapping("/")
    public List<Role> getAllRoles(){

        return roleService.getAllRoles();
    }

    @PostMapping("/menus")
    public List<Menu> getAllMenus(){
        return menuService.getAllMenus();
    }
}

MenuService

在这里插入图片描述

@Service
public class MenuService {

    @Autowired
    MenuMapper menuMapper;
    public RespBean getMenusByHrId() {
      return RespBean.ok("操作成功!",menuMapper.getMenusByHrId( ((Hr) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId()));//Id从哪里来呢,前端传过来的信息是不可信,我们登录的用户信息保存在security,可以从Security里获取登录用户信息
    }

    /**
     * 获取所有的菜单角色   一对多 一个菜单项有多个角色
     * @return
     */
//    @Cacheable
    public List<Menu> getAllMenusWithRole(){
        return menuMapper.getAllMenusWithRole();
    }

    public List<Menu> getAllMenus() {
        return menuMapper.getAllMenus();
    }
}

MenuMapper

在这里插入图片描述

   List<Menu> getAllMenus();

MenuMapper.xml

一个父菜单有多个子菜单,子菜单中还有菜单,三级菜单,直接查询
如果不确认多少级菜单可以用递归
在这里插入图片描述

  <resultMap id="MenuWithChildren" type="com.xyg.pojo.Menu" extends="BaseResultMap">
    <id column="id1" property="id"></id>
    <result column="name1" property="name"></result>
    <collection property="children" ofType="com.xyg.pojo.Menu">
      <id column="id2" property="id"></id>
      <result column="name2" property="name"></result>
      <collection property="children" ofType="com.xyg.pojo.Menu">
        <id column="id3" property="id"></id>
        <result column="name3" property="name"></result>
      </collection>
    </collection>
  </resultMap>

  <select id="getAllMenus" resultMap="MenuWithChildren">
    select m1.id as id1,m1.name as name1,m2.id as id2,m2.name as name2,m3.id as id3,m3.name as name3
    from menu m1,menu m2,menu m3
    where m1.id = m2.parentId and m2.id =m3.parentId and m3.enabled = true
    ORDER BY  m1.id,m2.id,m3.id  
    </select>

测试
在这里插入图片描述

前端

在这里插入图片描述
拷贝过来
在这里插入图片描述
定义对应的变量
在这里插入图片描述
添加一个折叠面板的点击事件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进行请求后端加载数据
在这里插入图片描述

   change(name){
                if (name){
                    this.getAllMenus();//点击有id就执行
                }
            },
   getAllMenus(){
                this.postRequest("/system/basic/permiss/menus").then(resp=>{
                    if(resp){
                        console.log(resp)
                        this.allmenus=resp
                    }
                })
            },

添加多选框
在这里插入图片描述
展示效果
在这里插入图片描述

菜单角色关系修改

角色全部展示出来了,还差个预选中的问题,就是选中角色可以操作哪写菜单
看数据库有个menu_role 菜单角色关联表 ,根据角色id查询可以操作哪写菜单,把角色可以操作菜单的id查询出来。
使用组件
在这里插入图片描述
在这里插入图片描述
写死数据看一默认选择效果
在这里插入图片描述
展示效果
在这里插入图片描述
把写死的数据服务端返回的数据动态的修改,可以根据角色rid查询菜单mid就行了

PermissController

    @GetMapping("/mids/{rid}")
    public List<Integer>  getMidsByTid(@PathVariable  Integer rid){
        return menuService.getMidsByTid(rid);
    }

menuMapper

    public  List<Integer> getMidsByTid(Integer rid) {
        return menuMapper.getMidsByTid(rid);
    }

MenuMapper

List<Integer> getMidsByTid(Integer rid);

MenuMapper.xml


  <select id="getMidsByTid" resultType="integer">
    select mid from menu_role where rid=#{rid}
  </select>

对接前端

需要name参数绑定角色id
在这里插入图片描述

在这里插入图片描述
分别通过default-expanded-keys和default-checked-keys设置默认展开和默认选中的节点。需要注意的是,此时必须设置node-key,其值为节点数据中的一个字段名,该字段在整棵树中是唯一的。

在这里插入图片描述
对接后端
在这里插入图片描述
点击事件chance,传参角色id,调用getSelectedMenus把角色id传过去,查询菜单的id赋值selectedMenus数组,tree进行默认预选中多选框

 change(rid){
                if (rid){
                    this.getAllMenus();//点击有id就执行
                    this.getSelectedMenus(rid)
                }
            },
            getSelectedMenus(rid){
                this.getRequest("/system/basic/permiss/mids/"+rid).then(resp=>{
                    if (resp){
                        this.selectedMenus=resp
                    }
                })
            },

菜单角色关系修改

在这里插入图片描述
可以引用通过ref=“tree” 获取该组件元素在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
getCheckedKeys 方法 若节点可被选择(即 show-checkbox 为 true),则返回目前被选中的节点的 key 所组成的数组,(leafOnly) 接收一个 boolean 类型的参数,若为 true 则仅返回被选中的叶子节点的 keys,默认值为 false
在这里插入图片描述
打印出来看一下
在这里插入图片描述
在这里插入图片描述

        methods:{
            doUpdate(rid,index){
              console.log(rid)
               let tree = this.$refs.tree[index];//返回当前选中的元素
              let selectedKeys = tree.getCheckedKeys(true)//getCheckedKeys方法获取选中菜单节点的key值就是菜单id,若为true就返回叶子节点也就是子节点
                console.log(selectedKeys)
            },

在这里插入图片描述

编写修改操作后端接口

这里的更新操作有点麻烦,比如用户## 权限组前端页面制作
权限组管理角色和菜单之间关系,操作员管理着用户和角色之间的关系。英文的输入框要有个前缀,SpringSecurity里角色英文名需要加一个ROLE_的前缀在这里插入图片描述在这里插入图片描述上代码

<div>      
   <div class="permissManaTool">        
   <el-input placeholder="请输入角色英文名" v-model="role.name">                            <template slot="prepend">ROLE_</template>       
     </el-input>             
  <el-input placeholder="请输入角色中文名" v-model="role.nameZh">         </el-input>      
     </div>   
</div>
data(){            
    return{                
         role:{                    
             name:"",                    
             nameZh:"",               
              }           
          }        
       }

添加按钮在这里插入图片描述bash <el-button type="primary" size="small" icon="el-icon-plus">添加角色</el-button>添加输入框样式在这里插入图片描述

permissManaTool{        
    display: flex;       
    justify-content: flex-start;   
  }    
  .permissManaTool .el-input{       
       width: 300px;       
       margin-right: 8px;  
    }

添加一个折叠面板在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/02579f78440e450db2497be5c21db539.png![在这里插入图片描述](https://img-blog.csdnimg.cn/d5d150b440f7435ebae4f6a4d3287138.png可以看出展开了第 2 个 在这里插入图片描述留一个就够了在这里插入图片描述从数据库中获取所有的角色展示到页面,注意后端不仅要返回所有角色还要返回角色操作的菜单,角色能操作哪些资源也要返回## 权限用户角色前后端对接我们先来把所有角色查询出来,在前端展示出来### PermissController java @RestController@RequestMapping("/system/basic/permiss")public class PermissController { @Autowired RoleService roleService; @GetMapping("/") public List<Role> getAllRoles(){ return roleService.getAllRoles(); }}### RoleService java@Servicepublic class RoleService { @Autowired RoleMapper roleMapper; public List<Role> getAllRoles(){ return roleMapper.getAllRoles(); }}### RoleMapper在这里插入图片描述java List<Role> getAllRoles();### RoleMapper.xmlxml <select id="getAllRoles" resultMap="BaseResultMap"> select * from role; </select>### 对接前端在这里插入图片描述bash <div style="margin-top: 15px;width: 720px"> <el-collapse accordion> <el-collapse-item :title="item.namezh" :name="index" v-for="(item,index) in roles" :key="index"> <div>与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;</div> <div>在界面中一致:所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。</div> </el-collapse-item> </el-collapse> </div>在这里插入图片描述在这里插入图片描述展示效果在这里插入图片描述里面展示的内容应该是卡片在这里插入图片描述组件在这里插入图片描述在这里插入图片描述bash <div> <el-card class="box-card"> <div slot="header" class="clearfix"> <span>卡片名称</span> <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button> </div> <div v-for="o in 4" :key="o" class="text item"> {{'列表内容 ' + o }} </div> </el-card> </div>在这里插入图片描述按钮样式改垃圾桶图标在这里插入图片描述在这里插入图片描述bash <el-button style="float: right; padding: 3px 0;color: #ff2a0c" type="text" icon="el-icon-delete"></el-button>## 权限组菜单树展示查询所有菜单展示树形结构,需要在服务端做处理返回查询所有的父子类菜单,自己关联自己三次形成一张表,在这里插入图片描述sqlselect m1.id as id1,m1.name as name1,m2.id as id2,m2.name as name2,m3.id as id3,m3.name as name3 from menu m1,menu m2,menu m3 where m1.id = m2.parentId and m2.id =m3.parentId and m3.enabled = true ORDER BY m1.id,m2.id,m3.id### PermissController在这里插入图片描述java@RestController@RequestMapping("/system/basic/permiss")public class PermissController { @Autowired RoleService roleService; @Autowired MenuService menuService; @GetMapping("/") public List<Role> getAllRoles(){ return roleService.getAllRoles(); } @PostMapping("/menus") public List<Menu> getAllMenus(){ return menuService.getAllMenus(); }}### MenuService在这里插入图片描述java@Servicepublic class MenuService { @Autowired MenuMapper menuMapper; public RespBean getMenusByHrId() { return RespBean.ok("操作成功!",menuMapper.getMenusByHrId( ((Hr) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId()));//Id从哪里来呢,前端传过来的信息是不可信,我们登录的用户信息保存在security,可以从Security里获取登录用户信息 } /** * 获取所有的菜单角色 一对多 一个菜单项有多个角色 * @return */// @Cacheable public List<Menu> getAllMenusWithRole(){ return menuMapper.getAllMenusWithRole(); } public List<Menu> getAllMenus() { return menuMapper.getAllMenus(); }}### MenuMapper在这里插入图片描述java List<Menu> getAllMenus();### MenuMapper.xml一个父菜单有多个子菜单,子菜单中还有菜单,三级菜单,直接查询如果不确认多少级菜单可以用递归在这里插入图片描述xml <resultMap id="MenuWithChildren" type="com.xyg.pojo.Menu" extends="BaseResultMap"> <id column="id1" property="id"></id> <result column="name1" property="name"></result> <collection property="children" ofType="com.xyg.pojo.Menu"> <id column="id2" property="id"></id> <result column="name2" property="name"></result> <collection property="children" ofType="com.xyg.pojo.Menu"> <id column="id3" property="id"></id> <result column="name3" property="name"></result> </collection> </collection> </resultMap> <select id="getAllMenus" resultMap="MenuWithChildren"> select m1.id as id1,m1.name as name1,m2.id as id2,m2.name as name2,m3.id as id3,m3.name as name3 from menu m1,menu m2,menu m3 where m1.id = m2.parentId and m2.id =m3.parentId and m3.enabled = true ORDER BY m1.id,m2.id,m3.id </select>测试在这里插入图片描述## 前端在这里插入图片描述拷贝过来在这里插入图片描述定义对应的变量在这里插入图片描述添加一个折叠面板的点击事件在这里插入图片描述在这里插入图片描述在这里插入图片描述进行请求后端加载数据在这里插入图片描述java change(name){ if (name){ this.getAllMenus();//点击有id就执行 } }, getAllMenus(){ this.postRequest("/system/basic/permiss/menus").then(resp=>{ if(resp){ console.log(resp) this.allmenus=resp } }) },添加多选框在这里插入图片描述展示效果在这里插入图片描述## 菜单角色关系修改角色全部展示出来了,还差个预选中的问题,就是选中角色可以操作哪写菜单看数据库有个menu_role 菜单角色关联表 ,根据角色id查询可以操作哪写菜单,把角色可以操作菜单的id查询出来。使用组件在这里插入图片描述在这里插入图片描述写死数据看一默认选择效果在这里插入图片描述展示效果在这里插入图片描述把写死的数据服务端返回的数据动态的修改,可以根据角色rid查询菜单mid就行了### PermissControllerjava @GetMapping("/mids/{rid}") public List<Integer> getMidsByTid(@PathVariable Integer rid){ return menuService.getMidsByTid(rid); }### menuMapperjava public List<Integer> getMidsByTid(Integer rid) { return menuMapper.getMidsByTid(rid); }### MenuMapperjavaList<Integer> getMidsByTid(Integer rid);MenuMapper.xmlxml <select id="getMidsByTid" resultType="integer"> select mid from menu_role where rid=#{rid} </select>### 对接前端需要name参数绑定角色id在这里插入图片描述在这里插入图片描述分别通过default-expanded-keys和default-checked-keys设置默认展开和默认选中的节点。需要注意的是,此时必须设置node-key,其值为节点数据中的一个字段名,该字段在整棵树中是唯一的。在这里插入图片描述对接后端在这里插入图片描述点击事件chance,传参角色id,调用getSelectedMenus把角色id传过去,查询菜单的id赋值selectedMenus数组,tree进行默认预选中多选框java change(rid){ if (rid){ this.getAllMenus();//点击有id就执行 this.getSelectedMenus(rid) } }, getSelectedMenus(rid){ this.getRequest("/system/basic/permiss/mids/"+rid).then(resp=>{ if (resp){ this.selectedMenus=resp } }) },### 菜单角色关系修改在这里插入图片描述 可以引用通过ref=“tree” 获取该组件元素在这里插入图片描述在这里插入图片描述在这里插入图片描述getCheckedKeys 方法 若节点可被选择(即 show-checkbox 为 true),则返回目前被选中的节点的 key 所组成的数组,(leafOnly) 接收一个 boolean 类型的参数,若为 true 则仅返回被选中的叶子节点的 keys,默认值为 false在这里插入图片描述打印出来看一下在这里插入图片描述在这里插入图片描述java methods:{ doUpdate(rid,index){ console.log(rid) let tree = this.$refs.tree[index];//返回当前选中的元素 let selectedKeys = tree.getCheckedKeys(true)//getCheckedKeys方法获取选中菜单节点的key值就是菜单id,若为true就返回叶子节点也就是子节点 console.log(selectedKeys) },在这里插入图片描述### 编写修改操作后端接口这里的更新操作有点麻烦,比如用户勾选了几个,有取消了几个,有点麻烦后台要一个一个判断,这里就直接删除原有的,直接更新操作

PermissController

    @PutMapping("/")
    public RespBean updateMenuRole(Integer rid,Integer[] mids){
        if(menuService.updateMenuRole(rid,mids)){
             return RespBean.ok("更新成功");
        }
        return RespBean.err("更新失败");
    }

MenuService

    @Transactional
    public boolean updateMenuRole(Integer rid, Integer[] mids) {
        menuRoleMapper.deleteById(rid);
        Integer result=menuRoleMapper.insertRecord(rid,mids);
        return result==mids.length;
    }

MenuRoleMapper

    void deleteById(Integer rid);

    Integer insertRecord(@Param("rid") Integer rid,@Param("mids") Integer[] mids);

MenuRoleMapper.xml

  <delete id="deleteById">
    delete from menu_role where rid=#{rid}
  </delete>

  <insert id="insertRecord">
    insert into  menu_role (mid,rid) values
    <foreach collection="mids" separator="," item="mid">
      (#{mid},#{rid})
    </foreach>
  </insert>

对接前端

doUpdate(rid,index){
               let tree = this.$refs.tree[index];//返回当前选中的元素
               let selectedKeys = tree.getCheckedKeys(true)//getCheckedKeys方法获取选中菜单节点的key值就是菜单id,为true就获取子节点
                let url='/system/basic/permiss/?rid='+rid
                selectedKeys.forEach(key=>{
                    url +='&mids='+key;
                    console.log(url)
                })

                this.putRequest(url).then(resp=>{
                    if(resp){
                        this.getRolesAll()
                    }
                })
            },

在这里插入图片描述
控制面板绑定一个属性
在这里插入图片描述
赋值-1,就是谁都不展示
在这里插入图片描述
在这里插入图片描述
activeName他的值是等于如图里name值,就会展示,等于-1就没有对应的值就不展示
在这里插入图片描述

 doUpdate(rid,index){
               let tree = this.$refs.tree[index];//返回当前选中的元素
               let selectedKeys = tree.getCheckedKeys(true)//getCheckedKeys方法获取选中菜单节点的key值就是菜单id,为true就获取子节点
                let url='/system/basic/permiss/?rid='+rid
                selectedKeys.forEach(key=>{
                    url +='&mids='+key;
                    console.log(url)
                })

                this.putRequest(url).then(resp=>{
                    if(resp){
                        this.getRolesAll()
                        this.activeName=-1
                    }
                })
            },

取消修改一样就不展示
在这里插入图片描述
在这里插入图片描述

 cancelUpdate(){
                this.activeName=-1
            },

权限组角色添加

PermissController

    @PostMapping("/role")
    public RespBean addRole(@RequestBody Role role){
        if(roleService.addRole(role)==1){
            return RespBean.ok("添加成功");
        }

        return RespBean.err("添加失败");
    }

RoleService

因为SpringSecurity的角色需要以ROLE开头数据

    public Integer addRole(Role role) {

        if(!role.getName().startsWith("ROLE_")){
            role.setName("ROLE"+role.getName());
        }
        return roleMapper.insert(role);
    }

使用逆向工程工具生成的mapper

在这里插入图片描述

添加角色接口对接前端

在这里插入图片描述
在这里插入图片描述
判断输入框数据是否为空,不为空就执行后端接口
在这里插入图片描述

权限组角色删除

PermissController

    @DeleteMapping("/")
    public RespBean deletePositionByIds(Integer[] ids){
        if(positionsService.deletePositionsByIds(ids)==ids.length){
            return RespBean.ok("删除成功");
        }
        return RespBean.err("删除失败");
    }

PositionsService

    public int deletePositionsByIds(Integer[] ids) {
        return positionMapper.deletePositionsByIds(ids);
    }

RoleMapper

在这里插入图片描述

删除对接前端

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

完全备份、增量备份、差异备份、binlog日志

Top NSD DBA DAY06 案例1&#xff1a;完全备份与恢复案例2&#xff1a;增量备份与恢复案例3&#xff1a;差异备份与恢复案例4&#xff1a;binlog日志 1 案例1&#xff1a;完全备份与恢复 1.1 问题 练习物理备份与恢复练习mysqldump备份与恢复 1.2 方案 在数据库服务器192…

【图论】Floyd算法

一.简介 Floyd算法&#xff0c;也称为Floyd-Warshall算法&#xff0c;是一种用于解决所有节点对最短路径问题的动态规划算法。它可以在有向图或带权图中找到任意两个节点之间的最短路径。 Floyd算法的基本思想是通过中间节点逐步优化路径长度。它使用一个二维数组来存储任意两…

java面试基础 -- ArrayList 和 LinkedList有什么区别, ArrayList和Vector呢?

目录 基本介绍 有什么不同?? ArrayList的扩容机制 ArrayLIst的基本使用 ArrayList和Vector 基本介绍 还记得我们的java集合框架吗, 我们来复习一下, 如图: 可以看出来 ArrayList和LinkedList 都是具体类, 他们都是接口List的实现类. 但是他们底层的逻辑是不同的, 相信…

RabbitMq交换机类型介绍

RabbitMq交换机类型介绍 在RabbitMq中&#xff0c;生产者的消息都是通过交换器来接收&#xff0c;然后再从交换器分发到不同的队列&#xff0c;再由消费者从队列获取消息。这种模式也被成为“发布/订阅”。 分发的过程中交换器类型会影响分发的逻辑。 直连交换机&#xff1a…

【Go】Go 文本匹配 - 正则表达式基础与编程中的应用 (8000+字)

正则表达式&#xff08;Regular Expression, 缩写常用regex, regexp表示&#xff09;是计算机科学中的一个概念&#xff0c;很多高级语言都支持正则表达式。 目录 何为正则表达式 语法规则 普通字符 字符转义 限定符 定位符 分组构造 模式匹配 regexp包 MatchString…

什么是Eureka?以及Eureka注册服务的搭建

导包 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 htt…

LeetCode_Java_2236. 判断根结点是否等于子结点之和

2236. 判断根结点是否等于子结点之和 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。 示例1 输入&#xff1a;roo…

java八股文面试[JVM]——JVM内存结构

参考&#xff1a; JVM学习笔记&#xff08;一&#xff09;_卷心菜不卷Iris的博客-CSDN博客 JVM是运行在操作系统之上的&#xff0c;它与硬件没有直接的交互 JVM内存结构&#xff1a; 方法区&#xff1a;存储已被虚拟机加载的类元数据信息(元空间) 堆&#xff1a;存放对象实…

SpringBoot项目集成ElasticSearch服务

本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍优势说明集成过程1.引入依赖2.添加配置文件3.初始化 示例说明代码结果 总结提升 版本介绍 Spring boot的版本是&#xff1a; 2.3.12   ElasticSearch的版本是&#xff1a;7.6.2 背景介绍 在我们的项目中经常会遇到对于…

BOXTRADE-天启量化分析平台 系统功能预览

BOXTRADE-天启量化分析平台 系统功能预览 系统功能预览 1.登录 首页 参考登录文档 2. A股 行情与策略分析 2.1 A股股票列表 可以筛选和搜索 2.2 A股行情及策略回测 2.2.1 行情数据提供除权和前复权&#xff0c;后复权数据&#xff1b;外链公司信息 2.2.2 内置策略执行结果…

中国剩余定理及扩展

目录 中国剩余定理解释 中国剩余定理扩展——求解模数不互质情况下的线性方程组&#xff1a; 代码实现&#xff1a; 互质&#xff1a; 非互质&#xff1a; 中国剩余定理解释 在《孙子算经》中有这样一个问题&#xff1a;“今有物不知其数&#xff0c;三三数之剩二&#x…

计算机视觉的应用11-基于pytorch框架的卷积神经网络与注意力机制对街道房屋号码的识别应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用11-基于pytorch框架的卷积神经网络与注意力机制对街道房屋号码的识别应用&#xff0c;本文我们借助PyTorch&#xff0c;快速构建和训练卷积神经网络&#xff08;CNN&#xff09;等模型&#xff0c;…

Quivr 基于GPT和开源LLMs构建本地知识库 (更新篇)

一、前言 自从大模型被炒的越来越火之后&#xff0c;似乎国内涌现出很多希望基于大模型构建本地知识库的需求&#xff0c;大概在5月底的时候&#xff0c;当时Quivr发布了第一个0.0.1版本&#xff0c;第一个版本仅仅只是使用LangChain技术结合OpenAI的GPT模型实现了一个最基本的…

【搭建WebDAV服务手机ES文件浏览器远程访问】

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 有时候我们想通过移动设备访问群晖NAS 中的文件,以满足特殊需求,我们在群辉中开启WebDav服务,结合cpolar内网工具生成的公网地址,通过移动客户端ES文件…

在ubuntu中将dict.txt导入到数据库sqlite3

将dict.txt导入到数据库 #include <head.h> #include <sqlite3.h> int do_insert(int i,char *str,sqlite3 *db); int main(int argc, const char *argv[]) {//创建泵打开一个数据库sqlite3 *db NULL;if(sqlite3_open("./my.db",&db) ! SQLITE_OK){…

G0第26章:微服务概述与gRPCprotocol buffers

Go微服务与云原生 1、微服务架构介绍 单体架构&#xff08;电商&#xff09; SOA架构&#xff08;电商&#xff09; 微服务架构&#xff08;电商&#xff09; 优势 挑战 拆分 发展史 第一代:基于RPC的传统服务架构 第二代:Service Mesh(istio) 微服务架构分层 核心组件 Summar…

【3D激光SLAM】LOAM源代码解析--scanRegistration.cpp

系列文章目录 【3D激光SLAM】LOAM源代码解析–scanRegistration.cpp 写在前面 本系列文章将对LOAM源代码进行讲解&#xff0c;在讲解过程中&#xff0c;涉及到论文中提到的部分&#xff0c;会结合论文以及我自己的理解进行解读&#xff0c;尤其是对于其中坐标变换的部分&…

回归预测 | MATLAB实现TSO-SVM金枪鱼群算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现TSO-SVM金枪鱼群算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现TSO-SVM金枪鱼群算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基…

springcloud3 hystrix实现服务监控显示3(了解)

一 hystrix的服务监控调用 1.1 hystrix的服务监控调用 hystrix提供了准实时的监控调用&#xff08;hystrix dashbord&#xff09;&#xff0c;Hystrix 会持续的记录所有通过hystrix发送的请求的执行信息&#xff0c;并以统计报表和图形的形式展示给用户&#xff0c;包括每秒执…

不是说嵌入式是风口吗,那为什么工作还那么难找?

最近确实有很多媒体、机构渲染嵌入式可以拿高薪&#xff0c;这在行业内也是事实&#xff0c;但前提是你有足够的竞争力&#xff0c;真的懂嵌入式。 时至今日&#xff0c;能做嵌入式程序开发的人其实相当常见&#xff0c;尤其是随着树莓派、Arduino等开发板的普及&#xff0c;甚…