public List<SysMenu> getByUserId(Long userId) { String nativeSql = "SELECT DISTINCT m.* FROM sys_menu m "; nativeSql +="LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id "; nativeSql +="LEFT JOIN sys_role r ON r.role_id = rm.role_id "; nativeSql +="WHERE r.role_id IN (SELECT role_id FROM sys_user_role WHERE user_id=?) "; nativeSql +="AND m.TYPE = 0 ORDER BY m.order_num"; List<SysMenu> list = dynamicQuery.query(SysMenu.class,nativeSql,new Object[]{userId}); list.stream().forEach(menu->{ String subSql = "SELECT DISTINCT m.* FROM sys_menu m "; subSql +="LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id "; subSql +="LEFT JOIN sys_role r ON r.role_id = rm.role_id "; subSql +="WHERE r.role_id IN (SELECT role_id FROM sys_user_role WHERE user_id=?) "; subSql +="AND m.parent_id = ? ORDER BY m.order_num"; List<SysMenu> subList = dynamicQuery.query(SysMenu.class,subSql,new Object[]{userId,menu.getMenuId()}); menu.setList(subList); }); return list; }
时间: 2023-06-26 07:08:44 浏览: 141
这段代码是一个通过用户ID获取菜单列表的方法。它使用了原生SQL语句,通过左连接查询sys_menu、sys_role_menu和sys_role表来获取与用户关联的菜单列表。其中,子查询通过parent_id字段来获取每个菜单的子菜单列表,并将其设置到父菜单的list属性中。最后,返回一个包含菜单列表的List<SysMenu>对象。
相关问题
解释一下这段代码public List<SysMenu> getByUserId(Long userId) { String nativeSql = "SELECT DISTINCT m.* FROM sys_menu m "; nativeSql +="LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id "; nativeSql +="LEFT JOIN sys_role r ON r.role_id = rm.role_id "; nativeSql +="WHERE r.role_id IN (SELECT role_id FROM sys_user_role WHERE user_id=?) "; nativeSql +="AND m.TYPE = 0 ORDER BY m.order_num"; List<SysMenu> list = dynamicQuery.query(SysMenu.class,nativeSql,new Object[]{userId}); list.stream().forEach(menu->{ String subSql = "SELECT DISTINCT m.* FROM sys_menu m "; subSql +="LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id "; subSql +="LEFT JOIN sys_role r ON r.role_id = rm.role_id "; subSql +="WHERE r.role_id IN (SELECT role_id FROM sys_user_role WHERE user_id=?) "; subSql +="AND m.parent_id = ? ORDER BY m.order_num"; List<SysMenu> subList = dynamicQuery.query(SysMenu.class,subSql,new Object[]{userId,menu.getMenuId()}); menu.setList(subList); }); return list; }
这段代码是一个查询指定用户ID下的菜单列表,并且将每个菜单的子菜单也一并查询出来。具体流程如下:
1. 首先构造一个 SQL 查询语句,用于查询菜单列表。该语句中使用了 LEFT JOIN 连接了多个表,以便能够查询到菜单对应的角色和用户信息。
2. 执行查询语句,并将结果映射为 SysMenu 对象的列表。
3. 对于每个菜单对象,构造一个子查询语句,用于查询该菜单的子菜单列表。该语句与菜单列表的查询语句类似,只是增加了一个条件,即查询该菜单的子菜单。
4. 执行子查询语句,并将结果映射为 SysMenu 对象的列表。
5. 将子菜单列表设置到对应的菜单对象中。
6. 返回菜单列表。
总的来说,这段代码实现了一个较为复杂的查询操作,涉及到多个表的连接和嵌套查询,需要对 SQL 语句和对象映射有一定的了解。
const baseurl="http://192.168.1.100:8016/" const app = Vue.createApp({ setup(){ // 导航栏 const titlemo = Vue.ref([]); const title =(baseurl) => { axios({ url:'baseurl+"api/Menu/get_helloin_web_menu_listbysysmenuid"', method:'get', params:{ fatherid: 0, sysmenu_id:3, // pagesize:1, // menuid: 117, category: 0, dtstart: '2010-01-01', dtend: '2023-07-07', recyclerflag: 0, checkflag: 1, topflag: -1, hotflag: -1, newflag: -1, // PageNo: 1, PageSize: 1, orderflag: 1 } }) //获取到的天气数据保存到数据中 .then(res=>{ // this.res=res.data; console.log(res); console.log(res.data); res.data.forEach((item) => { item.smallpic = baseurl + item.smallpic }); for(i=0;res.data.category==0;i++){ res.data=+res.data } console.log(res.data); titlemo.value = res.data; // return res.data; }) .catch(error=>{//如果响应失败则调用catch方法 alert("查询失败!"); }) }; 把以上代码的baseurl传进axios里怎么写
你可以直接将baseurl拼接在axios的url参数中,像这样:
```javascript
axios({
url: baseurl + "api/Menu/get_helloin_web_menu_listbysysmenuid",
// rest of the code
})
```
这样就会将baseurl和api路径连接起来作为完整的url。
阅读全文